From 6c9f27041d45f64ba55481a95f16e5157109c958 Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Mon, 11 Nov 2024 13:56:19 +0800 Subject: [PATCH] =?UTF-8?q?2024/11/11=20=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=BD=A9=E8=9B=8B=E7=89=A9=E5=93=81=E7=9A=84=E7=8D=B2=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resource/neoforge.json | 8 +++++ .../0aef4464247e697f9a7226f384437b478152c21c | 3 +- .../1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 | 3 +- .../211976637bfb5e111401ad2bfb58570ef2fb3dff | 4 +-- .../a1129211d3ad6d65c101bb152ae8c66c8256bccb | 4 +-- .../e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 | 3 +- .../ed628fd843215c1bf29a07b9cbd1b26a6af0636d | 4 +-- .../assets/leashedplayer/lang/en_us.json | 2 ++ .../assets/leashedplayer/lang/zh_cn.json | 2 ++ .../assets/leashedplayer/lang/zh_tw.json | 2 ++ .../leashedplayer/models/item/neoforge.json | 6 ---- .../leashedplayer/advancement/neo_fox.json | 36 +++++++++++++++++++ .../recipe/tipped_leash_rope_arrow_a.json | 4 +++ .../recipe/tipped_leash_rope_arrow_b.json | 4 +++ .../data/minecraft/tags/item/head_armor.json | 6 ++++ .../leashedplayer/CommonEventHandler.java | 18 +++++++++- .../content/effects/type/StunnedEffect.java | 3 +- .../content/items/ModItemRegister.java | 2 +- .../content/items/type/CanEquipOnHead.java | 17 +++++++++ .../ModAdvancementKey.java | 1 + .../LanguageAndOtherData/ModLangKeyValue.java | 6 ++-- .../generator/ModAdvancementGenerator.java | 12 +++++++ .../datagen/provider/ModItemTagProvider.java | 4 +++ .../mixin/item/MixinLeadItem.java | 10 +++++- .../r3944realms/leashedplayer/utils/Util.java | 24 +++++++++++++ .../leashedplayer/models/item/neoforge.json | 12 +++++++ 26 files changed, 177 insertions(+), 23 deletions(-) create mode 100644 Resource/neoforge.json delete mode 100644 src/generated/resources/assets/leashedplayer/models/item/neoforge.json create mode 100644 src/generated/resources/data/leashedplayer/advancement/neo_fox.json create mode 100644 src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_a.json create mode 100644 src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_b.json create mode 100644 src/generated/resources/data/minecraft/tags/item/head_armor.json create mode 100644 src/main/java/com/r3944realms/leashedplayer/content/items/type/CanEquipOnHead.java create mode 100644 src/main/resources/assets/leashedplayer/models/item/neoforge.json diff --git a/Resource/neoforge.json b/Resource/neoforge.json new file mode 100644 index 0000000..f2bac93 --- /dev/null +++ b/Resource/neoforge.json @@ -0,0 +1,8 @@ +{ + "credit": "Made with Blockbench", + "parent": "minecraft:item/generated", + "textures": { + "1": "leashedplayer:item/neoforge", + "particle": "leashedplayer:item/neoforge" + } +} \ No newline at end of file diff --git a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c index e9dcee1..8db8db1 100644 --- a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c +++ b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c @@ -1,4 +1,4 @@ -// 1.21 2024-11-08T12:16:30.8995908 Item Models: leashedplayer +// 1.21 2024-11-11T12:51:27.0438541 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 @@ -7,6 +7,5 @@ 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 -39b631c9dacf0481bfe8b84c7e7dd5841baf4ff7 assets/leashedplayer/models/item/neoforge.json c4748995a5fe190d20e3bd16f4b2244164ec0f83 assets/leashedplayer/models/item/spectral_leash_rope_arrow.json c4ef06f3162fe85f152c5b4a25ecdb4c2c56f945 assets/leashedplayer/models/item/tipped_leash_rope_arrow.json diff --git a/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 b/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 index 91b91a9..ecf2370 100644 --- a/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 +++ b/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 @@ -1,2 +1,3 @@ -// 1.21 2024-11-08T16:34:21.9849347 Tags for minecraft:item mod id leashedplayer +// 1.21 2024-11-11T12:54:18.1914427 Tags for minecraft:item mod id leashedplayer 63e4ad58dc8397171f84264d53dfe4fb503c7b1e data/minecraft/tags/item/arrows.json +5cf114c796db4c2235df11ee7f656bba09d72a7a data/minecraft/tags/item/head_armor.json diff --git a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff index d1f1df9..d4a7eaf 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21 2024-11-08T21:47:39.4393293 Languages: en_us for mod: leashedplayer -b97b093aa096d9da7d04c5776b65187091d23f5a assets/leashedplayer/lang/en_us.json +// 1.21 2024-11-11T13:22:05.9272287 Languages: en_us for mod: leashedplayer +4addbeba8c66e52ed59604cfd0f32643a427565c assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index 1ce5da3..4b52bfb 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21 2024-11-08T21:47:39.4379612 Languages: zh_cn for mod: leashedplayer -ab838eecdadc795951fdb15fe04df7ae6cbf67af assets/leashedplayer/lang/zh_cn.json +// 1.21 2024-11-11T13:22:05.9272287 Languages: zh_cn for mod: leashedplayer +fc4499fb20705f63dbce27b56b0b84cd94e63e8c assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index 15a9b31..8449ea1 100644 --- a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,4 +1,4 @@ -// 1.21 2024-11-10T23:56:54.4171709 Advancements +// 1.21 2024-11-11T13:22:05.9272287 Advancements 4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json @@ -7,5 +7,6 @@ bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_a a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_arrow.json 133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json 2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json +4e567c22e18462ad367fe1817140d1ffa13a6294 data/leashedplayer/advancement/neo_fox.json 4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json 72f40eb5816d1e8c296bdf4df6b599c15ba7e7e9 data/leashedplayer/advancement/tipped_leash_arrow.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index c192afb..bf0d5dd 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21 2024-11-08T21:47:39.4299508 Languages: zh_tw for mod: leashedplayer -dc4a7182da45af2eaa987ef614cb6b2aa1a9b5c0 assets/leashedplayer/lang/zh_tw.json +// 1.21 2024-11-11T13:22:05.9192042 Languages: zh_tw for mod: leashedplayer +5c54c9e6bbc71fd718b1c711ce7ed17452a78f39 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 60f7f8f..00c7188 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -15,6 +15,8 @@ "advancement.leashedplayer.leashed_friend.desc": "Be Bond by player with lead", "advancement.leashedplayer.leashed_self": "Stable Connection", "advancement.leashedplayer.leashed_self.desc": "“Restrain oneself with a rope", + "advancement.leashedplayer.neo_fox": "NEOFORGE!", + "advancement.leashedplayer.neo_fox.desc": "It seems can be equipped.", "advancement.leashedplayer.no_leash": "Don't tie me up", "advancement.leashedplayer.no_leash.desc": "You cannot be leashed by ANY", "advancement.leashedplayer.tipped_leash_arrow": "God said there should be more arrows", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 83ca1ff..e56ff19 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -15,6 +15,8 @@ "advancement.leashedplayer.leashed_friend.desc": "被玩家用拴绳链接", "advancement.leashedplayer.leashed_self": "稳固联结", "advancement.leashedplayer.leashed_self.desc": "用拴绳拴住自己", + "advancement.leashedplayer.neo_fox": "NEOFORGE!", + "advancement.leashedplayer.neo_fox.desc": "似乎可以戴头上", "advancement.leashedplayer.no_leash": "勿拴我", "advancement.leashedplayer.no_leash.desc": "你不会被任何东西拴住", "advancement.leashedplayer.tipped_leash_arrow": "神说要有更多箭矢", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 38720cf..0e81a01 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -15,6 +15,8 @@ "advancement.leashedplayer.leashed_friend.desc": "被玩家用拴繩鏈接", "advancement.leashedplayer.leashed_self": "穩固聯結", "advancement.leashedplayer.leashed_self.desc": "用栓繩拴住自己", + "advancement.leashedplayer.neo_fox": "NEOFORGE!", + "advancement.leashedplayer.neo_fox.desc": "似乎可以戴著", "advancement.leashedplayer.no_leash": "請恁勿拴唔", "advancement.leashedplayer.no_leash.desc": "恁不會被任何拴住", "advancement.leashedplayer.tipped_leash_arrow": "神說要有更多箭矢", diff --git a/src/generated/resources/assets/leashedplayer/models/item/neoforge.json b/src/generated/resources/assets/leashedplayer/models/item/neoforge.json deleted file mode 100644 index 36b780c..0000000 --- a/src/generated/resources/assets/leashedplayer/models/item/neoforge.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "leashedplayer:item/neoforge" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/neo_fox.json b/src/generated/resources/data/leashedplayer/advancement/neo_fox.json new file mode 100644 index 0000000..c6a2bc5 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/neo_fox.json @@ -0,0 +1,36 @@ +{ + "parent": "leashedplayer:leash_start", + "criteria": { + "has_neo_fox": { + "conditions": { + "items": [ + { + "items": "leashedplayer:neoforge" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": false, + "description": { + "translate": "advancement.leashedplayer.neo_fox.desc" + }, + "frame": "goal", + "hidden": true, + "icon": { + "count": 1, + "id": "leashedplayer:neoforge" + }, + "title": { + "translate": "advancement.leashedplayer.neo_fox" + } + }, + "requirements": [ + [ + "has_neo_fox" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_a.json b/src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_a.json new file mode 100644 index 0000000..d32a2be --- /dev/null +++ b/src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_a.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:tipped_leash_rope_arrow_a_recipe", + "category": "misc" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_b.json b/src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_b.json new file mode 100644 index 0000000..942ad06 --- /dev/null +++ b/src/generated/resources/data/minecraft/recipe/tipped_leash_rope_arrow_b.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:tipped_leash_rope_arrow_b_recipe", + "category": "misc" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/head_armor.json b/src/generated/resources/data/minecraft/tags/item/head_armor.json new file mode 100644 index 0000000..456ea0c --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/head_armor.json @@ -0,0 +1,6 @@ +{ + "values": [ + "leashedplayer:neoforge", + "minecraft:lead" + ] +} \ No newline at end of file diff --git a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java index 1518182..c923bb0 100644 --- a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java @@ -15,18 +15,26 @@ import com.r3944realms.leashedplayer.content.items.repcipe.ModRecipeSerializer; import com.r3944realms.leashedplayer.content.items.repcipe.TippedLeashRopeArrowRecipe; import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; +import com.r3944realms.leashedplayer.utils.Util; import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.Leashable; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Fox; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.alchemy.PotionBrewing; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.DispenserBlock; +import net.minecraft.world.phys.Vec3; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; @@ -56,7 +64,8 @@ public class CommonEventHandler { @SubscribeEvent public static void OnLivingTickEvent(EntityTickEvent.Post event) { Entity entity = event.getEntity(); - if (entity.level().isClientSide()) { + Level level = entity.level(); + if (level.isClientSide()) { return; } if (entity instanceof LivingEntity living) { @@ -76,6 +85,13 @@ public class CommonEventHandler { } } } + if (entity instanceof Fox fox) { + if (fox.getMainHandItem().is(Items.ANVIL)) { + fox.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY); + Util.throwItemTowardsLook(fox, ModItemRegister.NEOFORGE.get(), 1.0f, 0.1f); + fox.playSound(fox.getEatingSound(ItemStack.EMPTY)); + } + } } } } diff --git a/src/main/java/com/r3944realms/leashedplayer/content/effects/type/StunnedEffect.java b/src/main/java/com/r3944realms/leashedplayer/content/effects/type/StunnedEffect.java index e520616..ed3926c 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/effects/type/StunnedEffect.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/effects/type/StunnedEffect.java @@ -2,11 +2,10 @@ package com.r3944realms.leashedplayer.content.effects.type; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.ai.attributes.Attributes; public class StunnedEffect extends MobEffect { - public StunnedEffect(MobEffectCategory pCategory, int pColor) { + public StunnedEffect() { super(MobEffectCategory.HARMFUL, 0XFFFBC5); } } 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 8bf62e8..0546158 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java @@ -46,7 +46,7 @@ public class ModItemRegister { ); public static final Supplier NEOFORGE = ModItemRegister.register("neoforge", - () -> new Item(DistProperties(ModJukeboxSongs.FOX_MUSIC))); + () -> new CanEquipOnHead(DistProperties(ModJukeboxSongs.FOX_MUSIC))); public static Item.Properties DistProperties(ResourceKey song) { return new Item.Properties().stacksTo(1).rarity(Rarity.RARE).jukeboxPlayable(song); diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/type/CanEquipOnHead.java b/src/main/java/com/r3944realms/leashedplayer/content/items/type/CanEquipOnHead.java new file mode 100644 index 0000000..538bf42 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/type/CanEquipOnHead.java @@ -0,0 +1,17 @@ +package com.r3944realms.leashedplayer.content.items.type; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.Equipable; +import net.minecraft.world.item.Item; +import org.jetbrains.annotations.NotNull; + +public class CanEquipOnHead extends Item implements Equipable { + public CanEquipOnHead(Properties pProperties) { + super(pProperties); + } + + @Override + public @NotNull EquipmentSlot getEquipmentSlot() { + return EquipmentSlot.HEAD; + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java index 44eab64..ecc983a 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java @@ -17,6 +17,7 @@ public enum ModAdvancementKey { NO_LEASH("no_leash", LEASH_START), LEASH_TERMINATOR("leash_terminator", LEASH_START), TIPPED_LEASH_ARROW("tipped_leash_arrow", LEASH_ARROW), + NEO_FOX("neo_fox", LEASH_START), ; private final String Name; @Nullable 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 c5e6619..439578d 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -35,7 +35,7 @@ public enum ModLangKeyValue { 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), - NEO_FORGE(ModItemRegister.NEOFORGE, ModPartEnum.ITEM, "NeoForge", "NeoForge", "NeoForge", true), + NEO_FORGE(ModItemRegister.NEOFORGE, ModPartEnum.ITEM, "NeoForge", "NeoForge", "NeoForge", false), TIPPED_LEASH_ROPE_ARROW(TippedLeashRopeArrow.TIPPED_LEASH_ROPE_ARROW_NAME, ModPartEnum.ITEM, "Tipped Leash Rope Arrow Soaked By %1$s", "用%1$s浸泡过的拴绳箭", "蘸有%1$s的拴繩箭", false), //ITEM_DESC DESC_ITEM_LEASH_ROPE_ARROW(LeashRopeArrowItem.descKey, ModPartEnum.DESCRIPTION, "Arrows with ropes attached?","带有拴绳的箭矢?", "帶有拴繩的箭矢?", false), @@ -104,6 +104,7 @@ public enum ModLangKeyValue { TERMINATOR(ModAdvancementKey.LEASH_TERMINATOR.getNameKey(), ModPartEnum.NAME, "The Lead Terminator", "拴绳终结者","拴繩終結者", false), NO_LEASH(ModAdvancementKey.NO_LEASH.getNameKey(), ModPartEnum.NAME, "Don't tie me up", "勿拴我", "請恁勿拴唔", false), TIPPED_LEASH_ARROW(ModAdvancementKey.TIPPED_LEASH_ARROW.getNameKey(), ModPartEnum.NAME, "God said there should be more arrows", "神说要有更多箭矢", "神說要有更多箭矢", false), + NEO_FOX(ModAdvancementKey.NEO_FOX.getNameKey(), ModPartEnum.NAME, "NEOFORGE!", "NEOFORGE!", "NEOFORGE!", false), //ADV_DESC LEASH_START_DESC(ModAdvancementKey.LEASH_START.getDescKey(), ModPartEnum.DESCRIPTION, "Journey to becoming a Leash Expert", "拴绳大师之路", "拴繩大師之路", false), LEASH_LR_ARROW_DESC(ModAdvancementKey.LEASH_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "Maybe you can using it to shoot some mob?", "也许可以用它来发射生物?", "也許可以用它發射生物?", false), @@ -112,9 +113,10 @@ public enum ModLangKeyValue { LEASH_PLAYER_DESC(ModAdvancementKey.LEASHED_FRIEND.getDescKey(),ModPartEnum.DESCRIPTION, "Be Bond by player with lead", "被玩家用拴绳链接", "被玩家用拴繩鏈接", false), FOLLOW_ARROW_DESC(ModAdvancementKey.FOLLOW_LEASH_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "Mc, what are you talking about in physics?", "抱歉,我的世界不存在物理学" , "抱歉,麦块不講物理學",false), FOLLOW_WOLF_DESC(ModAdvancementKey.DOG_RUNNING_PLAYER.getDescKey(), ModPartEnum.DESCRIPTION, "In the park where dogs are not allowed to be walked, the dog decided to walk the human instead", "公园不能遛狗,于是狗站起来遛人", "公園裏不許遛狗,於是狗站起來遛人",false), - NO_LEASH_DESC(ModAdvancementKey.NO_LEASH.getDescKey(), ModPartEnum.NAME, "You cannot be leashed by ANY", "你不会被任何东西拴住", "恁不會被任何拴住", false), + NO_LEASH_DESC(ModAdvancementKey.NO_LEASH.getDescKey(), ModPartEnum.DESCRIPTION, "You cannot be leashed by ANY", "你不会被任何东西拴住", "恁不會被任何拴住", false), TERMINATOR_DESC(ModAdvancementKey.LEASH_TERMINATOR.getDescKey(), ModPartEnum.DESCRIPTION, "I am Lead Terminator!", "我來终结拴绳者!", "吾將終結拴繩!", false), TIPPED_LEASH_ARROW_DESC(ModAdvancementKey.TIPPED_LEASH_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "A dazzling array of Leash Rope arrows", "真是琳琅满目啊", "真是琳琅滿目啊", false), + NEO_FOX_DESC(ModAdvancementKey.NEO_FOX.getDescKey(), ModPartEnum.DESCRIPTION, "It seems can be equipped.", "似乎可以戴头上", "似乎可以戴著", false), //MOB_EFFECT NO_LEASH_EFFECT(ModEffectRegister.getEffectKey(ModEffectRegister.NO_LEASH_EFFECT.get()), ModPartEnum.NAME, "No Leash", "禁拴", "禁拴", false), //POTION 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 eed1e91..4dd0780 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java @@ -143,6 +143,18 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG true ).addCriterion("has_tipped_leash_arrow", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get()) ).parent(hasLeashRopeArrow).save(saver, ModAdvancementKey.TIPPED_LEASH_ARROW.getNameWithNameSpace()); + AdvancementHolder neo_fox = Advancement.Builder.advancement().display( + ModItemRegister.NEOFORGE.get(), + Component.translatable(ModAdvancementKey.NEO_FOX.getNameKey()), + Component.translatable(ModAdvancementKey.NEO_FOX.getDescKey()), + null, + AdvancementType.GOAL, + true, + false, + true + ).addCriterion("has_neo_fox", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.NEOFORGE.get()) + ).parent(hasLeashRopeItem).save(saver, ModAdvancementKey.NEO_FOX.getNameWithNameSpace()); + AdvancementHolder no_leash = Advancement.Builder.advancement().display( Items.BARRIER, diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemTagProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemTagProvider.java index fca2274..704c7fe 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemTagProvider.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModItemTagProvider.java @@ -6,6 +6,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.neoforged.neoforge.common.data.ExistingFileHelper; import org.jetbrains.annotations.NotNull; @@ -24,5 +25,8 @@ public class ModItemTagProvider extends ItemTagsProvider { .add(ModItemRegister.LEASH_ROPE_ARROW.get()) .add(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()) .add(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get()); + this.tag(ItemTags.HEAD_ARMOR) + .add(ModItemRegister.NEOFORGE.get()) + .add(Items.LEAD); } } diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/item/MixinLeadItem.java b/src/main/java/com/r3944realms/leashedplayer/mixin/item/MixinLeadItem.java index f55f0c3..b0038f6 100644 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/item/MixinLeadItem.java +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/item/MixinLeadItem.java @@ -6,13 +6,16 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.Leashable; import net.minecraft.world.entity.decoration.LeashFenceKnotEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Equipable; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.LeadItem; import net.minecraft.world.level.Level; import net.minecraft.world.level.gameevent.GameEvent; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -21,7 +24,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.List; @Mixin(LeadItem.class) -public class MixinLeadItem { +public class MixinLeadItem implements Equipable { /** * 拴住自己的逻辑 */ @@ -54,4 +57,9 @@ public class MixinLeadItem { cir.setReturnValue(InteractionResult.SUCCESS); } } + + @Override + public @NotNull EquipmentSlot getEquipmentSlot() { + return EquipmentSlot.HEAD; + } } diff --git a/src/main/java/com/r3944realms/leashedplayer/utils/Util.java b/src/main/java/com/r3944realms/leashedplayer/utils/Util.java index 39ef08a..5e0caa3 100644 --- a/src/main/java/com/r3944realms/leashedplayer/utils/Util.java +++ b/src/main/java/com/r3944realms/leashedplayer/utils/Util.java @@ -2,6 +2,11 @@ package com.r3944realms.leashedplayer.utils; import com.r3944realms.leashedplayer.LeashedPlayer; import com.r3944realms.leashedplayer.content.gamerules.Gamerules; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; import net.neoforged.fml.loading.FMLPaths; import java.io.File; @@ -37,4 +42,23 @@ public class Util { } } } + public static void throwItemTowardsLook(Entity thrower, Item itemToThrow, float velocity, float inaccuracy) { + ItemEntity thrownItem = new ItemEntity( + thrower.level(), + thrower.getX(), + thrower.getEyeY() - 0.1, + thrower.getZ(), + new ItemStack(itemToThrow) + ); + + Vec3 lookDirection = thrower.getLookAngle(); + + thrownItem.setDeltaMovement( + lookDirection.x * velocity + (thrower.level().random.nextGaussian() * 0.0075 * inaccuracy), + lookDirection.y * velocity + (thrower.level().random.nextGaussian() * 0.0075 * inaccuracy), + lookDirection.z * velocity + (thrower.level().random.nextGaussian() * 0.0075 * inaccuracy) + ); + + thrower.level().addFreshEntity(thrownItem); + } } diff --git a/src/main/resources/assets/leashedplayer/models/item/neoforge.json b/src/main/resources/assets/leashedplayer/models/item/neoforge.json new file mode 100644 index 0000000..528ab26 --- /dev/null +++ b/src/main/resources/assets/leashedplayer/models/item/neoforge.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "leashedplayer:item/neoforge" + }, + "display": { + "head": { + "translation": [0, 0, -7.5], + "scale": [1.25, 1.25, 1.25] + } + } +} \ No newline at end of file