From c3a1ac8fc4c037784cb7add6788164b15adbc338 Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Sun, 6 Oct 2024 00:55:12 +0800 Subject: [PATCH] =?UTF-8?q?2024-10-06=20=E4=BF=AE=E5=A4=8D=E4=BA=86=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 | 4 +-- .../advancement/leash_arrow.json | 2 +- .../content/entities/LeashRopeArrow.java | 36 ++++++++++++++----- .../entities/SpectralLeashRopeArrow.java | 10 ++++++ .../generator/ModAdvancementGenerator.java | 2 +- 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index 2e0acbf..5748058 100644 --- a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,8 +1,8 @@ -// 1.21.1 2024-10-05T22:48:57.4441437 Advancements +// 1.21.1 2024-10-06T00:40:59.6903049 Advancements 4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json 29911bbed5a1b7ede2b08d82e6716cd9463bc061 data/leashedplayer/advancement/leashed_friend.json 25f6b476b194a27c0fe0e75d74ac3a7ff4054789 data/leashedplayer/advancement/leashed_self.json -3daef978c8533b3cab963642193faf7181a8f220 data/leashedplayer/advancement/leash_arrow.json +a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_arrow.json 133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json diff --git a/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json b/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json index e8db300..6e76574 100644 --- a/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json +++ b/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json @@ -15,7 +15,7 @@ "display": { "announce_to_chat": false, "description": { - "translate": "advancement.leashedplayer.leashed_friend.desc" + "translate": "advancement.leashedplayer.leash_arrow.desc" }, "hidden": true, "icon": { diff --git a/src/main/java/com/r3944realms/leashedplayer/content/entities/LeashRopeArrow.java b/src/main/java/com/r3944realms/leashedplayer/content/entities/LeashRopeArrow.java index ea21bc5..2008c31 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/entities/LeashRopeArrow.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/entities/LeashRopeArrow.java @@ -3,7 +3,6 @@ package com.r3944realms.leashedplayer.content.entities; import com.r3944realms.leashedplayer.config.LeashPlayerCommonConfig; import com.r3944realms.leashedplayer.content.gamerules.GameruleRegistry; import com.r3944realms.leashedplayer.content.gamerules.Server.KeepLeashNotDropTime; -import com.r3944realms.leashedplayer.content.items.type.LeashRopeArrowItem; import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.modInterface.ILivingEntityExtension; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; @@ -34,6 +33,10 @@ public class LeashRopeArrow extends AbstractArrow { public LeashRopeArrow(EntityType entityType, double pX, double pY, double pZ, Level pLevel, ItemStack pPickupItemStack, @Nullable ItemStack pFiredFromWeapon, @Nullable ServerPlayer serverPlayer) { super(entityType, pX, pY, pZ, pLevel, pPickupItemStack, pFiredFromWeapon); if(serverPlayer != null && !level().isClientSide) { + Entity leashDataEntity = PlayerLeashable.getLeashDataEntity(serverPlayer, (ServerLevel) level()); + if(leashDataEntity instanceof LeashRopeArrow leashRopeArrow) { + leashRopeArrow.setOwner(null); + } ((PlayerLeashable)serverPlayer).setLeashedTo(this, true); } } @@ -41,6 +44,10 @@ public class LeashRopeArrow extends AbstractArrow { public LeashRopeArrow(EntityType entityType, LivingEntity pOwner, Level pLevel, ItemStack pPickupItemStack, @Nullable ItemStack pFiredFromWeapon) { super(entityType, pOwner, pLevel, pPickupItemStack, pFiredFromWeapon); if(pOwner instanceof PlayerLeashable lPlayer && !level().isClientSide) { + Entity leashDataEntity = PlayerLeashable.getLeashDataEntity((ServerPlayer) lPlayer, (ServerLevel) level()); + if(leashDataEntity instanceof LeashRopeArrow leashRopeArrow) { + leashRopeArrow.setOwner(null); + } lPlayer.setLeashedTo(this, true); } } @@ -95,7 +102,7 @@ public class LeashRopeArrow extends AbstractArrow { if( owner != null ) { if(this.equals(leashDataEntity)) { ((PlayerLeashable) owner).setLeashedTo(pPlayer, true); - ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), Items.ARROW.getDefaultInstance()); + ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), getOrginalItemStack()); level().addFreshEntity(itemEntity); discard(); } @@ -114,7 +121,7 @@ public class LeashRopeArrow extends AbstractArrow { if(this.equals(leashDataEntity)) { Entity owner = getOwner(); ((PlayerLeashable)owner).setLeashedTo(pPlayer, true); - ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), Items.ARROW.getDefaultInstance()); + ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), getOrginalItemStack()); level().addFreshEntity(itemEntity); discard(); } @@ -125,30 +132,41 @@ public class LeashRopeArrow extends AbstractArrow { return super.tryPickup(pPlayer); } - + protected void hitOnEntityHandler(Entity pEntity) { + //NOOP + } + protected ItemStack getOrginalItemStack() { + return Items.ARROW.getDefaultInstance(); + } + protected ItemStack getSelfItemStack() { + return ModItemRegister.LEASH_ROPE_ARROW.get().getDefaultInstance(); + } @Override protected void tickDespawn() { this.life++; if (this.life >= maxLifeTime) { - ItemEntity leash_rope_arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, ModItemRegister.LEASH_ROPE_ARROW.get().getDefaultInstance()); + ItemEntity leash_rope_arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, getOrginalItemStack()); this.level().addFreshEntity(leash_rope_arrow); this.discard(); } } + @Override protected void onHitBlock(@NotNull BlockHitResult pResult) { if(!level().isClientSide) { if (getOwner() instanceof PlayerLeashable pL) { if (this.level().getBlockState(pResult.getBlockPos()).is(BlockTags.FENCES)) { Entity leashDataEntity = PlayerLeashable.getLeashDataEntity((ServerPlayer) getOwner(), (ServerLevel) level()); - if(leashDataEntity != null) pL.dropLeash(true, !(leashDataEntity instanceof LeashRopeArrow)); + if(leashDataEntity != null) { + pL.dropLeash(true, !(leashDataEntity instanceof LeashRopeArrow)); + } Entity leashKnotFence = PlayerLeashable.createLeashKnotFence((ServerLevel) this.level(), pResult.getBlockPos()); ILivingEntityExtension pLL = (ILivingEntityExtension) pL; pLL.setKeepLeashTick(GameruleRegistry.getGameruleIntValue(level(), KeepLeashNotDropTime.ID)); pL.setLeashedTo(leashKnotFence, true); - ItemEntity arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, Items.ARROW.getDefaultInstance()); + ItemEntity arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, getOrginalItemStack()); this.level().addFreshEntity(arrow); discard(); } @@ -175,7 +193,7 @@ public class LeashRopeArrow extends AbstractArrow { } else if (this.getOwner() instanceof PlayerLeashable pL) { Entity leashDataEntity = PlayerLeashable.getLeashDataEntity((ServerPlayer) getOwner(), (ServerLevel) level()); if(leashDataEntity != null) pL.dropLeash(true, !(leashDataEntity instanceof LeashRopeArrow)); - ItemEntity arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, Items.ARROW.getDefaultInstance()); + ItemEntity arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, getSelfItemStack()); ILivingEntityExtension pLL = (ILivingEntityExtension) pL; pLL.setKeepLeashTick(GameruleRegistry.getGameruleIntValue(level(), KeepLeashNotDropTime.ID)); pL.setLeashedTo(pResult.getEntity(), true); @@ -186,7 +204,7 @@ public class LeashRopeArrow extends AbstractArrow { if (getOwner() instanceof PlayerLeashable pL) { Entity leashDataEntity = PlayerLeashable.getLeashDataEntity((ServerPlayer) getOwner(), (ServerLevel) level()); if(leashDataEntity != null) pL.dropLeash(true, true); - ItemEntity arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, Items.ARROW.getDefaultInstance()); + ItemEntity arrow = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, getOrginalItemStack()); ILivingEntityExtension pLL = (ILivingEntityExtension) pL; pLL.setKeepLeashTick(GameruleRegistry.getGameruleIntValue(level(), KeepLeashNotDropTime.ID)); pL.setLeashedTo(leashKnotFence, true); diff --git a/src/main/java/com/r3944realms/leashedplayer/content/entities/SpectralLeashRopeArrow.java b/src/main/java/com/r3944realms/leashedplayer/content/entities/SpectralLeashRopeArrow.java index e5e7414..2a640cd 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/entities/SpectralLeashRopeArrow.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/entities/SpectralLeashRopeArrow.java @@ -1,5 +1,6 @@ package com.r3944realms.leashedplayer.content.entities; +import com.r3944realms.leashedplayer.content.items.ModItemRegister; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; @@ -9,6 +10,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -58,4 +60,12 @@ public class SpectralLeashRopeArrow extends LeashRopeArrow { pCompound.putInt("Duration", this.duration); } + @Override + protected ItemStack getOrginalItemStack() { + return Items.SPECTRAL_ARROW.getDefaultInstance(); + } + @Override + protected ItemStack getSelfItemStack() { + return ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get().getDefaultInstance(); + } } diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java index b9579ab..7655adb 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java @@ -42,7 +42,7 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG AdvancementHolder hasLeashRopeArrow = Advancement.Builder.advancement().display( ModItemRegister.LEASH_ROPE_ARROW.get(), Component.translatable(ModAdvancementKey.LEASH_ARROW.getNameKey()), - Component.translatable(ModAdvancementKey.LEASHED_FRIEND.getDescKey()), + Component.translatable(ModAdvancementKey.LEASH_ARROW.getDescKey()), null, AdvancementType.TASK, true,