From 6471f956fa03a671a670b9eef41de8ea59f4db42 Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Sun, 3 Nov 2024 12:37:33 +0800 Subject: [PATCH] 2024/11/02 Add New Entity --- .../0aef4464247e697f9a7226f384437b478152c21c | 3 +- .../211976637bfb5e111401ad2bfb58570ef2fb3dff | 4 +- .../853329c6e706e45295e80307b8a95a5709025422 | 4 +- .../a1129211d3ad6d65c101bb152ae8c66c8256bccb | 4 +- .../ed628fd843215c1bf29a07b9cbd1b26a6af0636d | 4 +- .../assets/leashedplayer/lang/en_us.json | 2 + .../assets/leashedplayer/lang/lzh.json | 1 + .../assets/leashedplayer/lang/zh_cn.json | 2 + .../assets/leashedplayer/lang/zh_tw.json | 2 + .../models/item/kid_spawn_egg.json | 3 + .../leashedplayer/ClientEventHandler.java | 2 + .../leashedplayer/CommonEventHandler.java | 7 ++ .../renders/entities/KidPlayerRenderer.java | 106 ++++++++++++++++++ .../content/entities/LittlePlayer.java | 80 +++++++++++++ .../content/entities/ModEntityRegister.java | 5 + .../content/items/ModItemRegister.java | 9 +- .../LanguageAndOtherData/ModLangKeyValue.java | 3 +- .../provider/ModItemModelProvider.java | 7 ++ 18 files changed, 233 insertions(+), 15 deletions(-) create mode 100644 src/generated/resources/assets/leashedplayer/models/item/kid_spawn_egg.json create mode 100644 src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java create mode 100644 src/main/java/com/r3944realms/leashedplayer/content/entities/LittlePlayer.java diff --git a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c index eeb5ef8..3456ff1 100644 --- a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c +++ b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c @@ -1,9 +1,10 @@ -// 1.21 2024-11-01T00:08:54.8327658 Item Models: leashedplayer +// 1.21 2024-11-03T11:56:02.1200385 Item Models: leashedplayer 766c487fbf0c59e9045eeaf81daf583eb679b0e1 assets/leashedplayer/models/item/amethyst_shears.json 5846df9d85726428905701120ef34c9324c20faf assets/leashedplayer/models/item/bow_lra_pulling_0.json 845a7316b86e26f88c6932d4ef2656126503727a assets/leashedplayer/models/item/bow_lra_pulling_1.json 5bd1f9f28b91005c587f1c38fb77cd19b59495e3 assets/leashedplayer/models/item/bow_lra_pulling_2.json 83946f4d60d0fb1758d6553c36330506c8e48ada assets/leashedplayer/models/item/crossbow_leash_rope_arrow.json bb0d76077719c83c8a8bd4346a24ea1766175125 assets/leashedplayer/models/item/fabric.json +63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/leashedplayer/models/item/kid_spawn_egg.json 114d3cc5832ef047403114504483c6f3ea07e77c assets/leashedplayer/models/item/leash_rope_arrow.json c4748995a5fe190d20e3bd16f4b2244164ec0f83 assets/leashedplayer/models/item/spectral_leash_rope_arrow.json diff --git a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff index 7c4260c..a76415c 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21 2024-11-02T23:21:56.3625648 Languages: en_us for mod: leashedplayer -dad5064bbdf42ff624b9a0b7f24b17274fa247c2 assets/leashedplayer/lang/en_us.json +// 1.21 2024-11-03T11:56:02.1210394 Languages: en_us for mod: leashedplayer +e37115e9e6433f0d2a2748efc9749b10204119c7 assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 b/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 index 385af49..1fbaf25 100644 --- a/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 +++ b/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 @@ -1,2 +1,2 @@ -// 1.21 2024-11-02T23:04:02.4438077 Languages: lzh for mod: leashedplayer -b13bfd7bcb371f7da65fe06086a3db47da2de9cd assets/leashedplayer/lang/lzh.json +// 1.21 2024-11-03T11:56:02.1150382 Languages: lzh for mod: leashedplayer +a9b5a3116c6381872e174909553b8dac080dede8 assets/leashedplayer/lang/lzh.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index 43e043e..64a1867 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21 2024-11-02T23:21:56.3615582 Languages: zh_cn for mod: leashedplayer -2e3e8d720e46344cc2069590242ef2ab9fbdb435 assets/leashedplayer/lang/zh_cn.json +// 1.21 2024-11-03T11:56:02.119039 Languages: zh_cn for mod: leashedplayer +bc7e4095ad9239d38aff0e14e4eb8be3903980ec assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index 31ea7fc..7c31627 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21 2024-11-02T23:21:56.3599006 Languages: zh_tw for mod: leashedplayer -a3d780ceee5ee80b007fd0ed01c91c256f82b5a4 assets/leashedplayer/lang/zh_tw.json +// 1.21 2024-11-03T11:56:02.1180379 Languages: zh_tw for mod: leashedplayer +a4e3c3350a1a38b98fa7d7c0c2305a2c79440a50 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 6f6b0bc..6a844e8 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -19,6 +19,7 @@ "advancement.leashedplayer.no_leash.desc": "You cannot be leashed by ANY", "creativetab.leashedplayer.leashedplayer_tab": "Leashed Player", "effect.leashedplayer.no_leash": "No Leash", + "entity.leashedplayer.kid_player": "Kid", "entity.leashedplayer.leash_rope_arrow": "Leash Rope Arrow", "entity.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "Create Leash Fence Knot Entity if absent", @@ -32,6 +33,7 @@ "item.leash_rope_arrow.description": "Arrows with ropes attached?", "item.leashedplayer.amethyst_shears": "Amethyst Shears", "item.leashedplayer.fabric": "Fabric", + "item.leashedplayer.kid_spawn_egg": "Kid Spawn Egg", "item.leashedplayer.leash_rope_arrow": "Leash Rope Arrow", "item.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow", "item.minecraft.lingering_potion.effect.no_leash": "Splash No Leash Potion", diff --git a/src/generated/resources/assets/leashedplayer/lang/lzh.json b/src/generated/resources/assets/leashedplayer/lang/lzh.json index 641e94c..0e644da 100644 --- a/src/generated/resources/assets/leashedplayer/lang/lzh.json +++ b/src/generated/resources/assets/leashedplayer/lang/lzh.json @@ -1,4 +1,5 @@ { + "entity.leashedplayer.kid_player": "幼", "gamerule.LP.DefaultTalkArea.description": "阖局初置非负数,则限一顾之日下,若立聊城小在直则用其常,若用玩义直上跻之地", "leashedplayer.chat.none_heard_you": "无人受子问", "leashedplayer.command.chat.message.talkarea.current_config": "%s§6今聊城可知半径置§e %d§6格§f(§a默§7:§e%d格§f)§r", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 02f3965..58cca36 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -19,6 +19,7 @@ "advancement.leashedplayer.no_leash.desc": "你不会被任何东西拴住", "creativetab.leashedplayer.leashedplayer_tab": "可拴玩家", "effect.leashedplayer.no_leash": "禁拴", + "entity.leashedplayer.kid_player": "小孩", "entity.leashedplayer.leash_rope_arrow": "拴绳箭", "entity.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失则创建拴绳结", @@ -32,6 +33,7 @@ "item.leash_rope_arrow.description": "带有拴绳的箭矢?", "item.leashedplayer.amethyst_shears": "紫水晶剪刀", "item.leashedplayer.fabric": "Fabric", + "item.leashedplayer.kid_spawn_egg": "小孩生成蛋", "item.leashedplayer.leash_rope_arrow": "拴绳箭", "item.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭", "item.minecraft.lingering_potion.effect.no_leash": "滞留型禁拴药水", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 203a0b1..1f4f95e 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -19,6 +19,7 @@ "advancement.leashedplayer.no_leash.desc": "恁不會被任何拴住", "creativetab.leashedplayer.leashedplayer_tab": "可拴玩家", "effect.leashedplayer.no_leash": "禁拴", + "entity.leashedplayer.kid_player": "小孩", "entity.leashedplayer.leash_rope_arrow": "拴繩箭", "entity.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失則創建拴繩結", @@ -32,6 +33,7 @@ "item.leash_rope_arrow.description": "帶有拴繩的箭矢?", "item.leashedplayer.amethyst_shears": "紫水晶剪刀", "item.leashedplayer.fabric": "Fabric", + "item.leashedplayer.kid_spawn_egg": "小孩生成蛋", "item.leashedplayer.leash_rope_arrow": "拴繩箭", "item.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭", "item.minecraft.lingering_potion.effect.no_leash": "滯留型禁拴藥水", diff --git a/src/generated/resources/assets/leashedplayer/models/item/kid_spawn_egg.json b/src/generated/resources/assets/leashedplayer/models/item/kid_spawn_egg.json new file mode 100644 index 0000000..d1aaa9d --- /dev/null +++ b/src/generated/resources/assets/leashedplayer/models/item/kid_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file diff --git a/src/main/java/com/r3944realms/leashedplayer/ClientEventHandler.java b/src/main/java/com/r3944realms/leashedplayer/ClientEventHandler.java index 5bc9153..5138d13 100644 --- a/src/main/java/com/r3944realms/leashedplayer/ClientEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/ClientEventHandler.java @@ -1,5 +1,6 @@ package com.r3944realms.leashedplayer; +import com.r3944realms.leashedplayer.client.renders.entities.KidPlayerRenderer; import com.r3944realms.leashedplayer.client.renders.entities.LeashRopeArrowRenderer; import com.r3944realms.leashedplayer.client.renders.entities.SpectralLeashRopeArrowRenderer; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; @@ -37,6 +38,7 @@ public class ClientEventHandler { public static void RegisterRenderer(EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(ModEntityRegister.LEASH_ROPE_ARROW.get(), LeashRopeArrowRenderer::new); event.registerEntityRenderer(ModEntityRegister.SPECTRAL_LEASH_ROPE_ARROW.get(), SpectralLeashRopeArrowRenderer::new); + event.registerEntityRenderer(ModEntityRegister.KID.get(), KidPlayerRenderer::create); } } diff --git a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java index 5fac995..a4473e3 100644 --- a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java @@ -8,6 +8,8 @@ import com.r3944realms.leashedplayer.content.commands.TickCommand; import com.r3944realms.leashedplayer.content.effects.ModEffectRegister; import com.r3944realms.leashedplayer.content.effects.ModPotionRegister; import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow; +import com.r3944realms.leashedplayer.content.entities.LittlePlayer; +import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; @@ -25,6 +27,7 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent; +import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent; import net.neoforged.neoforge.event.tick.EntityTickEvent; @@ -78,6 +81,10 @@ public class CommonEventHandler { DispenserBlock.registerProjectileBehavior(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()); DispenserBlock.registerBehavior(ModItemRegister.AMETHYST_SHEARS.get(), new LeadBreakItemBehavior()); } + @SubscribeEvent + public static void onEntityAttributeEvent(EntityAttributeCreationEvent event) { + event.put(ModEntityRegister.KID.get(), LittlePlayer.createAttributes().build()); + } } diff --git a/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java b/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java new file mode 100644 index 0000000..8bc70ba --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java @@ -0,0 +1,106 @@ +package com.r3944realms.leashedplayer.client.renders.entities; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.r3944realms.leashedplayer.content.entities.LittlePlayer; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.*; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.item.CrossbowItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.UseAnim; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; + +@OnlyIn(Dist.CLIENT) +public class KidPlayerRenderer extends HumanoidMobRenderer> { + + + public static @NotNull KidPlayerRenderer create(@NotNull EntityRendererProvider.Context pContext) { + if (pContext instanceof PlayerContext pc) { + return new KidPlayerRenderer(pc); + } + return new KidPlayerRenderer(new PlayerContext(pContext, true)); + } + + public static class PlayerContext extends EntityRendererProvider.Context { + boolean isUseSlimModel; + public PlayerContext(EntityRendererProvider.Context pContext, boolean pIsSlimModel) { + super(pContext.getEntityRenderDispatcher(), pContext.getItemRenderer(), pContext.getBlockRenderDispatcher(), pContext.getItemInHandRenderer(), pContext.getResourceManager(), pContext.getModelSet(), pContext.getFont()); + this.isUseSlimModel = pIsSlimModel; + } + + public boolean isUseSlimModel() { + return isUseSlimModel; + } + + } + public KidPlayerRenderer(PlayerContext pContext) { + super(pContext, new PlayerModel<>(pContext.bakeLayer(pContext.isUseSlimModel() ? ModelLayers.PLAYER_SLIM : ModelLayers.PLAYER), pContext.isUseSlimModel()), 0.5F); + this.addLayer(new HumanoidArmorLayer<>(this, + new HumanoidModel<>(pContext.bakeLayer(ModelLayers.PLAYER_INNER_ARMOR)), + new HumanoidModel<>(pContext.bakeLayer(ModelLayers.PLAYER_OUTER_ARMOR)), + pContext.getModelManager() + )); + } + + + @Override + public @NotNull ResourceLocation getTextureLocation(@NotNull LittlePlayer pEntity) { + return pEntity.getSkin().texture(); + } + public void render(@NotNull LittlePlayer companion, float companionYaw, float pPartialTicks, @NotNull PoseStack pMatrixStack, + @NotNull MultiBufferSource pBuffer, int pPackedLight) { + this.setModelProperties(companion); + + super.render(companion, companionYaw, pPartialTicks, pMatrixStack, pBuffer, pPackedLight); + } + private void setModelProperties(LittlePlayer companion) { + PlayerModel companionModel = this.getModel(); + + HumanoidModel.ArmPose humanoidmodel$armpose = getArmPose(companion, InteractionHand.MAIN_HAND); + HumanoidModel.ArmPose humanoidmodel$armpose1 = getArmPose(companion, InteractionHand.OFF_HAND); + + if (companion.getMainArm() == HumanoidArm.RIGHT) { + companionModel.rightArmPose = humanoidmodel$armpose; + companionModel.leftArmPose = humanoidmodel$armpose1; + } else { + companionModel.rightArmPose = humanoidmodel$armpose1; + companionModel.leftArmPose = humanoidmodel$armpose; + } + } + private static HumanoidModel.ArmPose getArmPose(LittlePlayer companion, InteractionHand hand) { + ItemStack itemstack = companion.getItemInHand(hand); + if (itemstack.isEmpty()) { + return HumanoidModel.ArmPose.EMPTY; + } else { + if (companion.getUsedItemHand() == hand && companion.getUseItemRemainingTicks() > 0) { + UseAnim useanim = itemstack.getUseAnimation(); + + if (useanim == UseAnim.BOW) { + return HumanoidModel.ArmPose.BOW_AND_ARROW; + } + + if (useanim == UseAnim.CROSSBOW && hand == companion.getUsedItemHand()) { + return HumanoidModel.ArmPose.CROSSBOW_CHARGE; + } + } else if (!companion.swinging && itemstack.is(Items.CROSSBOW) && CrossbowItem.isCharged(itemstack)) { + return HumanoidModel.ArmPose.CROSSBOW_HOLD; + } + + return HumanoidModel.ArmPose.ITEM; + } + } + protected void scale(@NotNull LittlePlayer player, PoseStack pPoseStack, float pPartialTickTime) { + float f = 0.9375F; + pPoseStack.scale(f, f, f); + } + +} diff --git a/src/main/java/com/r3944realms/leashedplayer/content/entities/LittlePlayer.java b/src/main/java/com/r3944realms/leashedplayer/content/entities/LittlePlayer.java new file mode 100644 index 0000000..6ada93c --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/entities/LittlePlayer.java @@ -0,0 +1,80 @@ +package com.r3944realms.leashedplayer.content.entities; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.PlayerInfo; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.PlayerSkin; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import java.util.Objects; + +import static net.minecraft.world.entity.EquipmentSlot.*; + +public class LittlePlayer extends AgeableMob { + private static final EntityDataAccessor DATA_TYPE_ID = SynchedEntityData.defineId(LittlePlayer.class, EntityDataSerializers.INT); + private static final EntityDataAccessor BASE_HEALTH = SynchedEntityData.defineId(LittlePlayer.class,EntityDataSerializers.INT); + public EquipmentSlot[] armorTypes = new EquipmentSlot[]{FEET, LEGS, + CHEST, EquipmentSlot.HEAD}; + @Nullable + private PlayerInfo playerInfo; + protected LittlePlayer(EntityType pEntityType, Level pLevel) { + super(pEntityType, pLevel); + + } + + public static AttributeSupplier.Builder createAttributes() { + return AgeableMob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 20.0D) + .add(Attributes.MOVEMENT_SPEED, 0.32D); + } + + @Nullable + public PlayerInfo getPlayerInfo() { + if (this.playerInfo == null) { + try { + this.playerInfo = Objects.requireNonNull(Minecraft.getInstance().getConnection()).getPlayerInfo(this.getUUID()); + } catch (Exception ignored) { + } + } + return this.playerInfo; + } + public PlayerSkin getSkin() { + PlayerInfo playerinfo = this.getPlayerInfo(); + return playerinfo == null ? DefaultPlayerSkin.get(this.getUUID()) : playerinfo.getSkin(); + } + + @Override + public AgeableMob getBreedOffspring(@NotNull ServerLevel pLevel, @NotNull AgeableMob pOtherParent) { + return ModEntityRegister.KID.get().create(pLevel); + } + + @Override + protected void defineSynchedData(SynchedEntityData.@NotNull Builder pBuilder) { + super.defineSynchedData(pBuilder); + pBuilder.define(DATA_TYPE_ID, 1); + pBuilder.define(BASE_HEALTH, 20); + } + public void setBaseHealth(int health) { + this.entityData.set(BASE_HEALTH, health); + } + public float getBaseHealth() { + return this.entityData.get(BASE_HEALTH); + } + + + @Override + public boolean isBaby() { + return true; + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/content/entities/ModEntityRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/entities/ModEntityRegister.java index 75c067f..8796bb0 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/entities/ModEntityRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/entities/ModEntityRegister.java @@ -28,6 +28,11 @@ public class ModEntityRegister { .updateInterval(20) .build("spectral_leash_rope_arrow") ); + public static final DeferredHolder, EntityType> KID = ENTITY_TYPE.register("kid_player", + () -> EntityType.Builder.of(LittlePlayer::new, MobCategory.MISC) + .sized(0.6f,1.08f) + .build("kid_player") + ); // public static final DeferredHolder, EntityType> CHAIN_TIE = ENTITY_TYPE.register( // "chain_tie", // () -> EntityType.Builder.of(ChainTieEntity::new, MobCategory.MISC) diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java index 23b9c0b..a026bba 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java @@ -1,18 +1,16 @@ package com.r3944realms.leashedplayer.content.items; import com.r3944realms.leashedplayer.LeashedPlayer; +import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; 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.TestItem; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ShearsItem; import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.common.DeferredSpawnEggItem; import net.neoforged.neoforge.registries.DeferredRegister; import java.util.ArrayList; @@ -35,7 +33,8 @@ public class ModItemRegister { public static final Supplier AMETHYST_SHEARS = ModItemRegister.register("amethyst_shears", () -> new LeadBreakerItem(new Item.Properties().durability(100).component(DataComponents.TOOL, LeadBreakerItem.createToolProperties()) .stacksTo(1))); - + public static final Supplier KID_SPAWN_EGG = ModItemRegister.register("kid_spawn_egg", + () -> new DeferredSpawnEggItem(ModEntityRegister.KID, 0x3F4F1F, 0x3D0D4D, new Item.Properties())); public static Supplier register(String name, Supplier supplier) { return register(name, supplier, true); } 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 cb01eec..43a93e5 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -31,7 +31,7 @@ public enum ModLangKeyValue { ITEM_SPECTRAL_LEASH_ROPE_ARROW(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW, ModPartEnum.ITEM, "Spectral Leash Rope Arrow", "拴绳光灵箭", "拴繩光靈箭", true), TEST_FABRIC_ITEM(ModItemRegister.FABRIC, ModPartEnum.ITEM, "Fabric", "Fabric", "Fabric", true), AMETHYST_SHEARS(ModItemRegister.AMETHYST_SHEARS, ModPartEnum.ITEM, "Amethyst Shears", "紫水晶剪刀", "紫水晶剪刀", true), - + KID_SPAWN_EGG(ModItemRegister.KID_SPAWN_EGG, ModPartEnum.ITEM, "Kid Spawn Egg", "小孩生成蛋", "小孩生成蛋", false), //ITEM_DESC DESC_ITEM_LEASH_ROPE_ARROW(LeashRopeArrowItem.descKey, ModPartEnum.DESCRIPTION, "Arrows with ropes attached?","带有拴绳的箭矢?", "帶有拴繩的箭矢?", false), //PAINTING @@ -40,6 +40,7 @@ public enum ModLangKeyValue { //ENTITY LEASH_ROPE_ARROW(ModEntityRegister.getEntityNameKey("leash_rope_arrow"), ModPartEnum.ENTITY, "Leash Rope Arrow", "拴绳箭", "拴繩箭", false), SPECTRAL_LEASH_ROPE_ARROW(ModEntityRegister.getEntityNameKey("spectral_leash_rope_arrow"), ModPartEnum.ENTITY, "Spectral Leash Rope Arrow", "拴绳光灵箭", "拴繩光靈箭", false), + kID(ModEntityRegister.getEntityNameKey("kid_player"), ModPartEnum.ENTITY, "Kid", "小孩", "小孩", "幼", false), //CREATIVE_TAB CREATIVE_TAB_NAME(ModCreativeTab.getCreativeMod(LEASHED_PLAYER_ITEM), ModPartEnum.CREATIVE_TAB, "Leashed Player","可拴玩家", "可拴玩家", false), //COMMAND_MESSAGE diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemModelProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemModelProvider.java index 249de34..051a410 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemModelProvider.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemModelProvider.java @@ -2,10 +2,13 @@ package com.r3944realms.leashedplayer.datagen.provider; import com.r3944realms.leashedplayer.LeashedPlayer; +import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.datagen.LanguageAndOtherData.ModLangKeyValue; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; +import net.neoforged.neoforge.client.model.generators.ItemModelBuilder; import net.neoforged.neoforge.client.model.generators.ItemModelProvider; import net.neoforged.neoforge.client.model.generators.ModelFile; import net.neoforged.neoforge.common.data.ExistingFileHelper; @@ -46,6 +49,7 @@ public class ModItemModelProvider extends ItemModelProvider { getBuilder("bow_lra_pulling_2") .parent(new ModelFile.UncheckedModelFile("item/bow")) .texture("layer0", ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "item/bow_lra_pulling_2")); + spawnEgg(ModItemRegister.KID_SPAWN_EGG.get()); } @Override @@ -55,4 +59,7 @@ public class ModItemModelProvider extends ItemModelProvider { // 注册进阶材质物品模型(非模板大量需要,可以用BlockBench生成的就行了) AdvancedModItemModelRegister(); } + public ItemModelBuilder spawnEgg(Item item) { + return withExistingParent(BuiltInRegistries.ITEM.getKey(item).getPath(), mcLoc("item/template_spawn_egg")); + } }