diff --git a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff index 62015f2..0634279 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21 2024-11-27T00:15:38.1934553 Languages: en_us for mod: leashedplayer -d32d19599105d6c5575757a7f0344f066445bd15 assets/leashedplayer/lang/en_us.json +// 1.21 2024-12-07T16:59:56.8625511 Languages: en_us for mod: leashedplayer +b307f81b4c4d1f4ab0e3520c4028c9addd42b840 assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index 91c2867..e6fb3a7 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21 2024-11-27T00:15:38.1929375 Languages: zh_cn for mod: leashedplayer -be8f599c80c4ea7e7f6de238f6acf213fe9827d2 assets/leashedplayer/lang/zh_cn.json +// 1.21 2024-12-07T16:59:56.8605492 Languages: zh_cn for mod: leashedplayer +4099d0ec30ba8cf765f5e9d492644b2fb8a60b30 assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index ed95c5f..b7ffc0a 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21 2024-11-27T00:15:38.1846441 Languages: zh_tw for mod: leashedplayer -73006b0556ae8066c61837a9ff35a1b50126f510 assets/leashedplayer/lang/zh_tw.json +// 1.21 2024-12-07T16:59:56.8583125 Languages: zh_tw for mod: leashedplayer +b031b47a2ec98923235e85b63310b71e5f2b0d86 assets/leashedplayer/lang/zh_tw.json diff --git a/src/generated/resources/assets/leashedplayer/lang/en_us.json b/src/generated/resources/assets/leashedplayer/lang/en_us.json index 3d79d0d..6f29d4a 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -58,6 +58,11 @@ "item.minecraft.potion.effect.no_leash": "No Leash Potion", "item.minecraft.splash_potion.effect.no_leash": "Splash No Leash Potion", "item.minecraft.tipped_arrow.effect.no_leash": "Arrow of No Leash", + "item.nestle_rope_arrow.desc.1": "§7This arrow will carry the owner along with its flight:", + "item.nestle_rope_arrow.desc.2": "§c1.§r If it hits an entity, it will leash the owner with the entity and drop as a normal arrow.", + "item.nestle_rope_arrow.desc.3": "", + "item.nestle_rope_arrow.desc.4": "", + "item.nestle_rope_arrow.desc.5": "", "item.spectral_leash_rope_arrow.desc": "§c2.§r Strike the entity to give it a §e§lGlowing§r effect.", "item.tipped_leash_rope_arrow.desc": "§c2.§rStrike the entity to give it a Potion effect.", "item.tipped_leash_rope_arrow.name": "Tipped Leash Rope Arrow Soaked By %1$s", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 38978e9..5746559 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -58,6 +58,11 @@ "item.minecraft.potion.effect.no_leash": "禁拴药水", "item.minecraft.splash_potion.effect.no_leash": "喷溅型禁拴药水", "item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭", + "item.nestle_rope_arrow.desc.1": "§7该箭将会携带拥有者随其飞行", + "item.nestle_rope_arrow.desc.2": "§c1.§r 若击中生物时,将持有者与其拴在一起并已普通箭形式掉落;", + "item.nestle_rope_arrow.desc.3": "", + "item.nestle_rope_arrow.desc.4": "", + "item.nestle_rope_arrow.desc.5": "", "item.spectral_leash_rope_arrow.desc": "§c2.§r 击中实体给与其§e§l发光§7(§e§lGlowing§7)§r效果", "item.tipped_leash_rope_arrow.desc": "§c2.§r 击中实体给与其药水效果", "item.tipped_leash_rope_arrow.name": "用%1$s浸泡过的拴绳箭", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 08a0317..9117cde 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -58,6 +58,11 @@ "item.minecraft.potion.effect.no_leash": "禁拴藥水", "item.minecraft.splash_potion.effect.no_leash": "噴濺型禁拴藥水", "item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭", + "item.nestle_rope_arrow.desc.1": "§7該箭將會攜帶擁有者隨其飛行:", + "item.nestle_rope_arrow.desc.2": "§c1.§r 若擊中生物時,將持有者與其拴在一起其上並以普通箭的形式掉落;", + "item.nestle_rope_arrow.desc.3": "", + "item.nestle_rope_arrow.desc.4": "", + "item.nestle_rope_arrow.desc.5": "", "item.spectral_leash_rope_arrow.desc": "擊中實體給予其§e§l發光§7(§e§lGlowing§7)§r效果", "item.tipped_leash_rope_arrow.desc": "擊中實體給予其药水效果", "item.tipped_leash_rope_arrow.name": "蘸有%1$s的拴繩箭", 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 8e0ae2b..5300158 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/entities/LeashRopeArrow.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/entities/LeashRopeArrow.java @@ -48,7 +48,9 @@ public class LeashRopeArrow extends AbstractArrow { } private PotionContents getPotionContents() { - return this.getPickupItemStackOrigin().getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY); + ItemStack pickupItemStackOrigin = this.getPickupItemStackOrigin(); + pickupItemStackOrigin.setCount(1); + return pickupItemStackOrigin.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY); } public void addEffect(MobEffectInstance pEffectInstance) { @@ -135,14 +137,43 @@ public class LeashRopeArrow extends AbstractArrow { if(life <= 40 ) { return false; - } - else { + } else { PlayerLeashable playerLeashable = (PlayerLeashable) pPlayer; - if(this.getOwner() == null) {//未有Owner始终可检 - return true; - } - if(life <= 240) { - if(pPlayer.isShiftKeyDown()) { + if(this.getOwner() != null) {//未有Owner始终可检 + if(life <= 240) { + if(pPlayer.isShiftKeyDown()) { + Entity leashDataEntity = this.getOwner() instanceof PlayerLeashable ? PlayerLeashable.getLeashDataEntity((ServerPlayer) this.getOwner(), (ServerLevel) level()) : this.getOwner(); + if(this.ownedBy(pPlayer)) { + this.pickup = Pickup.ALLOWED; + if(this.equals(leashDataEntity)) { + pPlayer.playSound(SoundEvents.LEASH_KNOT_BREAK, 1, 1); + playerLeashable.dropLeash(true, false); + } + } else { + if(life >= 120) { + Entity owner = getOwner(); + if( owner != null ) { +// if(this.equals(leashDataEntity)) { + if(owner instanceof PlayerLeashable player) { + player.setLeashedTo(pPlayer, true); + pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); + } else if(owner instanceof Leashable leashable) { + leashable.setLeashedTo(pPlayer, true); + pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); + } + ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), getOrginalItemStack()); + level().addFreshEntity(itemEntity); + discard(); +// } + } + } else return false; + } + } else { + ((ServerPlayer)pPlayer).sendSystemMessage(Component.translatable(PUSH_SHIFT_TO_PICKUP_QUICKLY), true); + return false; + } + + } else { Entity leashDataEntity = this.getOwner() instanceof PlayerLeashable ? PlayerLeashable.getLeashDataEntity((ServerPlayer) this.getOwner(), (ServerLevel) level()) : this.getOwner(); if(this.ownedBy(pPlayer)) { this.pickup = Pickup.ALLOWED; @@ -151,53 +182,23 @@ public class LeashRopeArrow extends AbstractArrow { playerLeashable.dropLeash(true, false); } } else { - if(life >= 120) { - Entity owner = getOwner(); - if( owner != null ) { -// if(this.equals(leashDataEntity)) { - if(owner instanceof PlayerLeashable player) { - player.setLeashedTo(pPlayer, true); - pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); - } else if(owner instanceof Leashable leashable) { - leashable.setLeashedTo(pPlayer, true); - pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); - } - ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), getOrginalItemStack()); - level().addFreshEntity(itemEntity); - discard(); -// } - } else return true; - } else return false; - } - } else { - ((ServerPlayer)pPlayer).sendSystemMessage(Component.translatable(PUSH_SHIFT_TO_PICKUP_QUICKLY), true); - return false; - } + Entity owner = getOwner(); + if(owner instanceof PlayerLeashable player) { + player.setLeashedTo(pPlayer, true); + pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); + } else if(owner instanceof Leashable leashable) { + leashable.setLeashedTo(pPlayer, true); + pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); + } + ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), getOrginalItemStack()); + level().addFreshEntity(itemEntity); + discard(); - } - else { - Entity leashDataEntity = this.getOwner() instanceof PlayerLeashable ? PlayerLeashable.getLeashDataEntity((ServerPlayer) this.getOwner(), (ServerLevel) level()) : this.getOwner(); - if(this.ownedBy(pPlayer)) { - if (this.pickup == Pickup.DISALLOWED) this.pickup = Pickup.ALLOWED; - if(this.equals(leashDataEntity)) { - pPlayer.playSound(SoundEvents.LEASH_KNOT_BREAK, 1, 1); - playerLeashable.dropLeash(true, false); } - } else { - Entity owner = getOwner(); - if(owner instanceof PlayerLeashable player) { - player.setLeashedTo(pPlayer, true); - pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); - } else if(owner instanceof Leashable leashable) { - leashable.setLeashedTo(pPlayer, true); - pPlayer.playSound(SoundEvents.LEASH_KNOT_PLACE, 1, 1); - } - ItemEntity itemEntity = new ItemEntity(level(), getX(), getY(), getZ(), getOrginalItemStack()); - level().addFreshEntity(itemEntity); - discard(); - } - } + } else if (this.pickup != Pickup.CREATIVE_ONLY) this.pickup = Pickup.ALLOWED; + else return false; + } return super.tryPickup(pPlayer); @@ -424,8 +425,8 @@ public class LeashRopeArrow extends AbstractArrow { ItemEntity lead = new ItemEntity(this.level(), this.position().x, this.position().y, this.position().z, Items.LEAD.getDefaultInstance()); this.level().addFreshEntity(lead); } + super.onHitEntity(pResult); } - else super.onHitEntity(pResult); } /** * Handles an entity event received from a {@link net.minecraft.network.protocol.game.ClientboundEntityEventPacket}. diff --git a/src/main/java/com/r3944realms/leashedplayer/content/entities/NestleRopeArrow.java b/src/main/java/com/r3944realms/leashedplayer/content/entities/NestleRopeArrow.java index 9c0a546..ef33a1f 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/entities/NestleRopeArrow.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/entities/NestleRopeArrow.java @@ -87,7 +87,7 @@ public class NestleRopeArrow extends AbstractArrow { if (life <= 40) return false; else { - if (this.pickup == Pickup.DISALLOWED) this.pickup = Pickup.ALLOWED; + this.pickup = Pickup.ALLOWED; } return super.tryPickup(pPlayer); } @@ -96,7 +96,7 @@ public class NestleRopeArrow extends AbstractArrow { public void tick() { super.tick(); Entity owner = getOwner(); - if(owner != null && !owner.level().isClientSide) { + if (owner != null && !owner.level().isClientSide) { if (!inGround) { if (owner.getVehicle() == null) owner.startRiding(this); } @@ -105,6 +105,10 @@ public class NestleRopeArrow extends AbstractArrow { setOwner(null); } } + if (this.inGround && this.inGroundTime != 0) { + this.level().broadcastEntityEvent(this, (byte)0); + this.setPickupItemStack(new ItemStack(getSelfItemStack().getItem())); + } } @Override diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/type/NestleRopeArrowItem.java b/src/main/java/com/r3944realms/leashedplayer/content/items/type/NestleRopeArrowItem.java index 4f713d9..7b3c140 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/type/NestleRopeArrowItem.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/type/NestleRopeArrowItem.java @@ -2,6 +2,7 @@ package com.r3944realms.leashedplayer.content.items.type; import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; +import com.r3944realms.leashedplayer.content.entities.NestleRopeArrow; import net.minecraft.core.Direction; import net.minecraft.core.Position; import net.minecraft.network.chat.Component; @@ -19,7 +20,12 @@ import javax.annotation.Nullable; import java.util.List; public class NestleRopeArrowItem extends ArrowItem implements INestleRopeArrow { - + public static final String descKey = "item.nestle_rope_arrow.description", + DESC_1 = "item.nestle_rope_arrow.desc.1", + DESC_2 = "item.nestle_rope_arrow.desc.2", + DESC_3 = "item.nestle_rope_arrow.desc.3", + DESC_4 = "item.nestle_rope_arrow.desc.4", + DESC_5 = "item.nestle_rope_arrow.desc.5"; public NestleRopeArrowItem(Item.Properties pProperties) { super(pProperties); } @@ -30,10 +36,18 @@ public class NestleRopeArrowItem extends ArrowItem implements INestleRopeArrow { @Override public @NotNull Projectile asProjectile(@NotNull Level pLevel, @NotNull Position pPos, @NotNull ItemStack pStack, @NotNull Direction pDirection) { - return new LeashRopeArrow(ModEntityRegister.NESTLE_ROPE_ARROW.get(), pPos.x(), pPos.y(), pPos.z(), pLevel, pStack,null, null); + NestleRopeArrow arrow = new NestleRopeArrow(ModEntityRegister.NESTLE_ROPE_ARROW.get(), pPos.x(), pPos.y(), pPos.z(), pLevel, pStack, null, null); + arrow.pickup = AbstractArrow.Pickup.DISALLOWED; + return arrow; } public void appendHoverText(@NotNull ItemStack pStack, Item.@NotNull TooltipContext pContext, @NotNull List pTooltipComponents, @NotNull TooltipFlag pTooltipFlag) { - + pTooltipComponents.addAll(List.of( + Component.translatable(DESC_1), + Component.translatable(DESC_2), + Component.translatable(DESC_3), + Component.translatable(DESC_4), + Component.translatable(DESC_5) + )); } } diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java index 78ad42a..d739f02 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -12,10 +12,7 @@ import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.gamerules.Server.*; import com.r3944realms.leashedplayer.content.items.ModCreativeTab; import com.r3944realms.leashedplayer.content.items.ModItemRegister; -import com.r3944realms.leashedplayer.content.items.type.LeadBreakerItem; -import com.r3944realms.leashedplayer.content.items.type.LeashRopeArrowItem; -import com.r3944realms.leashedplayer.content.items.type.SpectralLeashRopeArrowItem; -import com.r3944realms.leashedplayer.content.items.type.TippedLeashRopeArrow; +import com.r3944realms.leashedplayer.content.items.type.*; import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister; import com.r3944realms.leashedplayer.datagen.provider.attributes.ModPaintingVariants; import com.r3944realms.leashedplayer.network.server.Code; @@ -23,6 +20,7 @@ import com.r3944realms.leashedplayer.network.server.DecreaseLeashRopeLength; import com.r3944realms.leashedplayer.network.server.IncreaseLeashRopeLength; import com.r3944realms.leashedplayer.utils.Enum.LanguageEnum; import com.r3944realms.leashedplayer.utils.Enum.ModPartEnum; +import io.github.kunosayo.nestle.item.NestleItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.NotNull; @@ -59,6 +57,12 @@ public enum ModLangKeyValue { DESC_ITEM_S_LEASH_R_ARROW_THREE(SpectralLeashRopeArrowItem.DESC, ModPartEnum.DESCRIPTION, "§c2.§r Strike the entity to give it a §e§lGlowing§r effect.", "§c2.§r 击中实体给与其§e§l发光§7(§e§lGlowing§7)§r效果", "擊中實體給予其§e§l發光§7(§e§lGlowing§7)§r效果", false), DESC_ITEM_T_LEASH_R_ARROW_THREE(TippedLeashRopeArrow.DESC, ModPartEnum.DESCRIPTION, "§c2.§rStrike the entity to give it a Potion effect.", "§c2.§r 击中实体给与其药水效果", "擊中實體給予其药水效果", false), DESC_ITEM_LEAD_BREAKER(LeadBreakerItem.HOVER_KEY, ModPartEnum.DESCRIPTION, "§7can break the link of leash", "§7可以破坏拴绳链接", "§7可以破壞拴繩鏈接", false), + DESC_ITEM_NESTLE_R_ARROW_ONE(NestleRopeArrowItem.DESC_1, ModPartEnum.DESCRIPTION, "§7This arrow will carry the owner along with its flight:", "§7该箭将会携带拥有者随其飞行", "§7該箭將會攜帶擁有者隨其飛行:", false), + DESC_ITEM_NESTLE_R_ARROW_TWO(NestleRopeArrowItem.DESC_2, ModPartEnum.DESCRIPTION, "§c1.§r If it hits an entity, it will leash the owner with the entity and drop as a normal arrow.", "§c1.§r 若击中生物时,将持有者与其拴在一起并已普通箭形式掉落;", "§c1.§r 若擊中生物時,將持有者與其拴在一起其上並以普通箭的形式掉落;", false), + DESC_ITEM_NESTLE_R_ARROW_THREE(NestleRopeArrowItem.DESC_3, ModPartEnum.DESCRIPTION, "", "", "", false), + DESC_ITEM_NESTLE_R_ARROW_FORE(NestleRopeArrowItem.DESC_4, ModPartEnum.DESCRIPTION, "", "", "", false), + DESC_ITEM_NESTLE_R_ARROW_FIVE(NestleRopeArrowItem.DESC_5, ModPartEnum.DESCRIPTION, "", "", "", false), + //PAINTING GROUP_PHOTO_TITLE(ModPaintingVariants.getPaintingVariantTitleKey(ModPaintingVariants.GROUP_PHOTO),ModPartEnum.TITLE, "§dGroup Photo §7[§6memorable§7]§r", "§d集体照 §7[§6纪念§7]§r", "§d集體照 §7[§6紀念§7]§r", false), GROUP_PHOTO_AUTHOR(ModPaintingVariants.getPaintingVariantAuthorKey(ModPaintingVariants.GROUP_PHOTO),ModPartEnum.AUTHOR, "§9Leisure §4Time §eDock§r","§9闲趣§4时§e坞§r","§9閑趣§4時§e塢§r",false),