From 107ef3dc7d0a760ed0b09f366781e0f11a78254b Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Fri, 1 Nov 2024 00:13:27 +0800 Subject: [PATCH] 2024/11/01 Fix some BUG and Add new Item to break lead rope --- .../0aef4464247e697f9a7226f384437b478152c21c | 3 +- .../1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 | 2 +- .../211976637bfb5e111401ad2bfb58570ef2fb3dff | 4 +- .../a1129211d3ad6d65c101bb152ae8c66c8256bccb | 4 +- .../da5d1419e6989284234546978c1a8a79f621dba7 | 4 +- .../e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 | 3 +- .../ed628fd843215c1bf29a07b9cbd1b26a6af0636d | 4 +- .../assets/leashedplayer/lang/en_us.json | 3 + .../assets/leashedplayer/lang/zh_cn.json | 3 + .../assets/leashedplayer/lang/zh_tw.json | 3 + .../models/item/amethyst_shears.json | 6 ++ .../advancement/leash_terminator.json | 34 ++++++++ .../recipes/misc/amethyst_shears.json | 32 +++++++ .../leashedplayer/recipe/amethyst_shears.json | 16 ++++ .../leashedplayer/ClientEventHandler.java | 3 +- .../leashedplayer/CommonEventHandler.java | 2 + .../content/items/ModCreativeTab.java | 1 + .../content/items/ModItemRegister.java | 8 +- .../content/items/type/LeadBreakerItem.java | 67 +++++++++++++++ .../content/misc/LeadBreakItemBehavior.java | 78 ++++++++++++++++++ .../paintings/ModPaintingsRegister.java | 2 +- .../ModAdvancementKey.java | 1 + .../LanguageAndOtherData/ModLangKeyValue.java | 4 + .../generator/ModAdvancementGenerator.java | 12 +++ .../datagen/provider/ModRecipeProvider.java | 7 ++ .../MixinServerGamePacketListenerImpl.java | 3 +- .../r3944realms/leashedplayer/utils/Lazy.java | 25 ++++++ .../lead_rope_pottery_pattern.png | Bin 0 -> 452 bytes .../textures/item/amethyst_shears.png | Bin 0 -> 347 bytes .../textures/item/lead_rope_pottery_sherd.png | Bin 0 -> 384 bytes 30 files changed, 320 insertions(+), 14 deletions(-) create mode 100644 src/generated/resources/assets/leashedplayer/models/item/amethyst_shears.json create mode 100644 src/generated/resources/data/leashedplayer/advancement/leash_terminator.json create mode 100644 src/generated/resources/data/leashedplayer/advancement/recipes/misc/amethyst_shears.json create mode 100644 src/generated/resources/data/leashedplayer/recipe/amethyst_shears.json create mode 100644 src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java create mode 100644 src/main/java/com/r3944realms/leashedplayer/content/misc/LeadBreakItemBehavior.java create mode 100644 src/main/java/com/r3944realms/leashedplayer/utils/Lazy.java create mode 100644 src/main/resources/assets/leashedplayer/textures/entity/decorated_pot/lead_rope_pottery_pattern.png create mode 100644 src/main/resources/assets/leashedplayer/textures/item/amethyst_shears.png create mode 100644 src/main/resources/assets/leashedplayer/textures/item/lead_rope_pottery_sherd.png diff --git a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c index 443e9fd..400d27a 100644 --- a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c +++ b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c @@ -1,4 +1,5 @@ -// 1.21.3 2024-10-27T23:14:21.0486567 Item Models: leashedplayer +// 1.21.3 2024-10-31T23:28:04.7117269 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 diff --git a/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 b/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 index d7c30d8..b793cfd 100644 --- a/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 +++ b/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 @@ -1,2 +1,2 @@ -// 1.21.3 2024-10-27T23:14:21.0349914 Tags for minecraft:item mod id leashedplayer +// 1.21.3 2024-10-31T20:50:40.9982605 Tags for minecraft:item mod id leashedplayer 36c1cccc1dfa448620c4e9cbc4a7d73986ff9e47 data/minecraft/tags/item/arrows.json diff --git a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff index 18311bc..da9be63 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21.3 2024-10-27T23:14:21.0486567 Languages: en_us for mod: leashedplayer -4dc2ca922a540c7133a4a6867dfcd8bfec5a1db4 assets/leashedplayer/lang/en_us.json +// 1.21.3 2024-10-31T23:28:04.7137271 Languages: en_us for mod: leashedplayer +05969780f698fcb4d6b63800dcdb76e4b0cad090 assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index 78a5f8e..e902f5a 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21.3 2024-10-27T23:14:21.047502 Languages: zh_cn for mod: leashedplayer -35bc6c3001138c5306d1ee9d55ef3dfbfd417e08 assets/leashedplayer/lang/zh_cn.json +// 1.21.3 2024-10-31T23:28:04.710726 Languages: zh_cn for mod: leashedplayer +98ca8da6ea1688abc5d4beda986cfe0406255f1c assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/da5d1419e6989284234546978c1a8a79f621dba7 b/src/generated/resources/.cache/da5d1419e6989284234546978c1a8a79f621dba7 index f9a9dc5..a71742d 100644 --- a/src/generated/resources/.cache/da5d1419e6989284234546978c1a8a79f621dba7 +++ b/src/generated/resources/.cache/da5d1419e6989284234546978c1a8a79f621dba7 @@ -1,6 +1,8 @@ -// 1.21.3 2024-10-28T12:36:36.0959778 LeashedPlayer Recipes +// 1.21.3 2024-10-31T23:50:18.2165227 LeashedPlayer Recipes +13ebe9a580731296eb10c05d1844657d58e07cc1 data/leashedplayer/advancement/recipes/misc/amethyst_shears.json 1b45d1ad8dc73f1787c97777ad13d9771c9e0ad1 data/leashedplayer/advancement/recipes/misc/leash_rope_arrow.json a26d63c2360b32df0b636a5dec96dd919139e022 data/leashedplayer/advancement/recipes/misc/spectral_leash_rope_arrow.json +af1f65626735f1001426e0984217139e15649725 data/leashedplayer/recipe/amethyst_shears.json db45be6e2bbddc49e60a6c1b12e2ef44afad30d8 data/leashedplayer/recipe/leash_rope_arrow.json db37bd69a700eaae69bff48c77ed49ca55fb9bf1 data/leashedplayer/recipe/spectral_leash_rope_arrow.json 935d8732ca65dd73e4668a197cda60480053fbcd data/minecraft/advancement/recipes/misc/leash_rope_arrow_shape.json diff --git a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index 4daeaa7..ca1925e 100644 --- a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,4 +1,4 @@ -// 1.21.3 2024-10-27T23:14:21.0497079 Advancements +// 1.21.3 2024-10-31T23:28:04.7147278 Advancements 4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json @@ -6,4 +6,5 @@ bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_a 25f6b476b194a27c0fe0e75d74ac3a7ff4054789 data/leashedplayer/advancement/leashed_self.json a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_arrow.json 133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json +2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json 4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index edce4e1..21f795a 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21.3 2024-10-27T23:14:21.0467812 Languages: zh_tw for mod: leashedplayer -c6df14a1f53a3e892ebc6b396b552ff27f1a7580 assets/leashedplayer/lang/zh_tw.json +// 1.21.3 2024-10-31T23:28:04.7097257 Languages: zh_tw for mod: leashedplayer +be94545852f60710429320d1e25f77d633940f36 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 c15def4..6a9d06f 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -9,6 +9,8 @@ "advancement.leashedplayer.leash_arrow.desc": "Maybe you can using it to shoot some mob?", "advancement.leashedplayer.leash_start": "The Power of Traction", "advancement.leashedplayer.leash_start.desc": "Journey to becoming a Leash Expert", + "advancement.leashedplayer.leash_terminator": "The Lead Terminator", + "advancement.leashedplayer.leash_terminator.desc": "I am Lead Terminator!", "advancement.leashedplayer.leashed_friend": "Be bound by Rope", "advancement.leashedplayer.leashed_friend.desc": "Be Bond by player with lead", "advancement.leashedplayer.leashed_self": "Stable Connection", @@ -28,6 +30,7 @@ "gamerule.LP.TeleportWithLeashedPlayers": "Teleport leashed player with player holder", "gamerule.LP.TeleportWithLeashedPlayers.description": "Holder will teleport with their leashed players ", "item.leash_rope_arrow.description": "Arrows with ropes attached?", + "item.leashedplayer.amethyst_shears": "Amethyst Shears", "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.leash_rope_arrow": "Leash Rope Arrow", "item.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 22ed54e..91a4f97 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -9,6 +9,8 @@ "advancement.leashedplayer.leash_arrow.desc": "也许可以用它来发射生物?", "advancement.leashedplayer.leash_start": "牵引之力", "advancement.leashedplayer.leash_start.desc": "拴绳大师之路", + "advancement.leashedplayer.leash_terminator": "拴绳终结者", + "advancement.leashedplayer.leash_terminator.desc": "我來终结拴绳者!", "advancement.leashedplayer.leashed_friend": "拴绳链接", "advancement.leashedplayer.leashed_friend.desc": "被玩家用拴绳链接", "advancement.leashedplayer.leashed_self": "稳固联结", @@ -28,6 +30,7 @@ "gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者传送", "gamerule.LP.TeleportWithLeashedPlayers.description": "传送时将被拴玩家与持有者一起传送", "item.leash_rope_arrow.description": "带有拴绳的箭矢?", + "item.leashedplayer.amethyst_shears": "紫水晶剪刀", "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.leash_rope_arrow": "拴绳箭", "item.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 8495ddc..d9617f4 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -9,6 +9,8 @@ "advancement.leashedplayer.leash_arrow.desc": "也許可以用它發射生物?", "advancement.leashedplayer.leash_start": "牽引之力", "advancement.leashedplayer.leash_start.desc": "拴繩大師之路", + "advancement.leashedplayer.leash_terminator": "拴繩終結者", + "advancement.leashedplayer.leash_terminator.desc": "吾將終結拴繩!", "advancement.leashedplayer.leashed_friend": "拴繩鏈接", "advancement.leashedplayer.leashed_friend.desc": "被玩家用拴繩鏈接", "advancement.leashedplayer.leashed_self": "穩固聯結", @@ -28,6 +30,7 @@ "gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者傳送", "gamerule.LP.TeleportWithLeashedPlayers.description": "將被拴玩家將隨持有者一起傳送", "item.leash_rope_arrow.description": "帶有拴繩的箭矢?", + "item.leashedplayer.amethyst_shears": "紫水晶剪刀", "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.leash_rope_arrow": "拴繩箭", "item.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭", diff --git a/src/generated/resources/assets/leashedplayer/models/item/amethyst_shears.json b/src/generated/resources/assets/leashedplayer/models/item/amethyst_shears.json new file mode 100644 index 0000000..1691725 --- /dev/null +++ b/src/generated/resources/assets/leashedplayer/models/item/amethyst_shears.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "leashedplayer:item/amethyst_shears" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/leash_terminator.json b/src/generated/resources/data/leashedplayer/advancement/leash_terminator.json new file mode 100644 index 0000000..2538212 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/leash_terminator.json @@ -0,0 +1,34 @@ +{ + "parent": "leashedplayer:leash_start", + "criteria": { + "has_amethyst_shears": { + "conditions": { + "items": [ + { + "items": "leashedplayer:amethyst_shears" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "description": { + "translate": "advancement.leashedplayer.leash_terminator.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "leashedplayer:amethyst_shears" + }, + "title": { + "translate": "advancement.leashedplayer.leash_terminator" + } + }, + "requirements": [ + [ + "has_amethyst_shears" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/recipes/misc/amethyst_shears.json b/src/generated/resources/data/leashedplayer/advancement/recipes/misc/amethyst_shears.json new file mode 100644 index 0000000..d85cecd --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/recipes/misc/amethyst_shears.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_amethyst_shard": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "leashedplayer:amethyst_shears" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_amethyst_shard" + ] + ], + "rewards": { + "recipes": [ + "leashedplayer:amethyst_shears" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/recipe/amethyst_shears.json b/src/generated/resources/data/leashedplayer/recipe/amethyst_shears.json new file mode 100644 index 0000000..e1ed284 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/recipe/amethyst_shears.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": "minecraft:amethyst_shard", + "%": "minecraft:stick" + }, + "pattern": [ + "#%", + "%#" + ], + "result": { + "count": 1, + "id": "leashedplayer:amethyst_shears" + } +} \ 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 03331cb..7ed6b90 100644 --- a/src/main/java/com/r3944realms/leashedplayer/ClientEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/ClientEventHandler.java @@ -4,6 +4,7 @@ import com.r3944realms.leashedplayer.client.renders.LeashRendererUtil; import com.r3944realms.leashedplayer.client.renders.entities.LeashRopeArrowRenderer; import com.r3944realms.leashedplayer.client.renders.entities.SpectralLeashRopeArrowRenderer; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; +import com.r3944realms.leashedplayer.content.items.ModCreativeTab; import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.content.items.type.ILeashRopeArrow; import com.r3944realms.leashedplayer.modInterface.IPlayerRenderStateExtension; @@ -11,6 +12,7 @@ import net.minecraft.client.renderer.entity.state.PlayerRenderState; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.core.component.DataComponents; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Items; import net.minecraft.world.item.component.ChargedProjectiles; import net.neoforged.api.distmarker.Dist; @@ -18,7 +20,6 @@ import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; -import net.neoforged.neoforge.client.event.RenderLivingEvent; import net.neoforged.neoforge.client.event.RenderPlayerEvent; diff --git a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java index 70d0ea0..6d3b436 100644 --- a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java @@ -8,6 +8,7 @@ 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.items.ModItemRegister; +import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; import net.minecraft.commands.CommandSourceStack; import net.minecraft.world.effect.MobEffectInstance; @@ -73,6 +74,7 @@ public class CommonEventHandler { public static void onCommonSetup(FMLCommonSetupEvent event) { DispenserBlock.registerProjectileBehavior(ModItemRegister.LEASH_ROPE_ARROW.get()); DispenserBlock.registerProjectileBehavior(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()); + DispenserBlock.registerBehavior(ModItemRegister.AMETHYST_SHEARS.get(), new LeadBreakItemBehavior()); } } diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/ModCreativeTab.java b/src/main/java/com/r3944realms/leashedplayer/content/items/ModCreativeTab.java index d9b117e..109c43c 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/ModCreativeTab.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/ModCreativeTab.java @@ -30,6 +30,7 @@ public class ModCreativeTab { pOutput.accept(Items.CROSSBOW); pOutput.accept(ModItemRegister.LEASH_ROPE_ARROW.get()); pOutput.accept(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()); + pOutput.accept(ModItemRegister.AMETHYST_SHEARS.get()); HolderLookup.RegistryLookup potionRegistryLookup = CommonHooks.resolveLookup(Registries.POTION); if(potionRegistryLookup != null) { potionRegistryLookup.listElements() 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 6c22755..46b6d4a 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java @@ -1,14 +1,18 @@ package com.r3944realms.leashedplayer.content.items; import com.r3944realms.leashedplayer.LeashedPlayer; +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.Rarity; +import net.minecraft.world.item.ShearsItem; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredRegister; @@ -25,7 +29,9 @@ public class ModItemRegister { ); public static final Supplier SPECTRAL_LEASH_ROPE_ARROW = ModItemRegister.register("spectral_leash_rope_arrow", () -> new SpectralLeashRopeArrowItem(new Item.Properties().stacksTo(16))); - + public static final Supplier AMETHYST_SHEARS = ModItemRegister.register("amethyst_shears", + () -> new LeadBreakerItem(new Item.Properties().durability(100).component(DataComponents.TOOL, ShearsItem.createToolProperties()) + .stacksTo(1).setId(ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "amethyst_shears"))))); public static final Supplier FABRIC = ModItemRegister.register("fabric", () -> new TestItem(new Item.Properties().stacksTo(1) .setId(ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "fabric"))))); diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java b/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java new file mode 100644 index 0000000..5c89428 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java @@ -0,0 +1,67 @@ +package com.r3944realms.leashedplayer.content.items.type; + +import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow; +import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Leashable; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ShearsItem; +import net.minecraft.world.item.component.Tool; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class LeadBreakerItem extends ShearsItem { + + public LeadBreakerItem(Properties properties) { + super(properties); + } + + public static Tool createToolProperties() { + HolderGetter holdergetter = BuiltInRegistries.acquireBootstrapRegistrationLookup(BuiltInRegistries.BLOCK); + return new Tool( + List.of( + Tool.Rule.minesAndDrops(HolderSet.direct(Blocks.COBWEB.builtInRegistryHolder()), 18.0F), + Tool.Rule.overrideSpeed(holdergetter.getOrThrow(BlockTags.LEAVES), 25.0F), + Tool.Rule.overrideSpeed(holdergetter.getOrThrow(BlockTags.WOOL), 8.0F), + Tool.Rule.overrideSpeed(HolderSet.direct(Blocks.VINE.builtInRegistryHolder(), Blocks.GLOW_LICHEN.builtInRegistryHolder()), 4.0F) + ), + 1.0F, + 1 + ); + } + @Override + public @NotNull InteractionResult interactLivingEntity(@NotNull ItemStack stack, @NotNull Player player, @NotNull LivingEntity entity, net.minecraft.world.@NotNull InteractionHand hand) { + if(!entity.level().isClientSide) { + if (entity instanceof PlayerLeashable playerLeashable) { + if (playerLeashable.isLeashed()){ + playerLeashable.dropLeash(true, !(playerLeashable.getLeashHolder() instanceof LeashRopeArrow)); + if (playerLeashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) { + leashRopeArrow.setOwner(null); + } + if (!player.isCreative()) stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand)); + return InteractionResult.SUCCESS; + } else return InteractionResult.PASS; + } else if (entity instanceof Leashable leashable) { + if (leashable.isLeashed()){ + leashable.dropLeash(true, !(leashable.getLeashHolder() instanceof LeashRopeArrow)); + if (leashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) { + leashRopeArrow.setOwner(null); + } + if (!player.isCreative()) stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand)); + return InteractionResult.SUCCESS; + } else return InteractionResult.PASS; + } + } + return InteractionResult.PASS; + } + +} diff --git a/src/main/java/com/r3944realms/leashedplayer/content/misc/LeadBreakItemBehavior.java b/src/main/java/com/r3944realms/leashedplayer/content/misc/LeadBreakItemBehavior.java new file mode 100644 index 0000000..a950661 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/misc/LeadBreakItemBehavior.java @@ -0,0 +1,78 @@ +package com.r3944realms.leashedplayer.content.misc; + +import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow; +import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; +import net.minecraft.core.BlockPos; +import net.minecraft.core.dispenser.BlockSource; +import net.minecraft.core.dispenser.OptionalDispenseItemBehavior; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.Leashable; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.BeehiveBlock; +import net.minecraft.world.level.block.DispenserBlock; +import net.minecraft.world.level.block.entity.BeehiveBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.NotNull; + +public class LeadBreakItemBehavior extends OptionalDispenseItemBehavior { + @Override + protected @NotNull ItemStack execute(@NotNull BlockSource blockSource, @NotNull ItemStack item) { + ServerLevel serverLevel = blockSource.level(); + if(!serverLevel.isClientSide()) { + BlockPos blockPos = blockSource.pos().relative(blockSource.state().getValue(DispenserBlock.FACING)); + this.setSuccess(tryShearBeehive(serverLevel, blockPos) || tryShearLivingEntity(serverLevel, blockPos, item)); + if (this.isSuccess()) { + item.hurtAndBreak(1, serverLevel, null, p_348118_ -> { + }); + } + } + return item; + } + private static boolean tryShearBeehive(ServerLevel level, BlockPos pos) { + BlockState blockstate = level.getBlockState(pos); + if (blockstate.is(BlockTags.BEEHIVES, p_202454_ -> p_202454_.hasProperty(BeehiveBlock.HONEY_LEVEL) && p_202454_.getBlock() instanceof BeehiveBlock)) { + int i = blockstate.getValue(BeehiveBlock.HONEY_LEVEL); + if (i >= 5) { + level.playSound(null, pos, SoundEvents.BEEHIVE_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); + BeehiveBlock.dropHoneycomb(level, pos); + ((BeehiveBlock)blockstate.getBlock()) + .releaseBeesAndResetHoneyLevel(level, blockstate, pos, null, BeehiveBlockEntity.BeeReleaseStatus.BEE_RELEASED); + level.gameEvent(null, GameEvent.SHEAR, pos); + return true; + } + } + + return false; + } + + private static boolean tryShearLivingEntity(ServerLevel level, BlockPos pos, ItemStack item) { + for (LivingEntity livingentity : level.getEntitiesOfClass(LivingEntity.class, new AABB(pos), EntitySelector.NO_SPECTATORS)) { + if (livingentity instanceof PlayerLeashable playerLeashable) { + if (playerLeashable.isLeashed()){ + playerLeashable.dropLeash(true, !(playerLeashable.getLeashHolder() instanceof LeashRopeArrow)); + if (playerLeashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) { + leashRopeArrow.setOwner(null); + } + return true; + } else return false; + } else if (livingentity instanceof Leashable leashable) { + if (leashable.isLeashed()) { + leashable.dropLeash(true, !(leashable.getLeashHolder() instanceof LeashRopeArrow)); + if (leashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) { + leashRopeArrow.setOwner(null); + } + return true; + } else return false; + } + } + return false; + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java index 2cb87e4..016831c 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java @@ -18,7 +18,7 @@ public class ModPaintingsRegister { DeferredRegister.create(Registries.PAINTING_VARIANT, LeashedPlayer.MOD_ID); public static final Supplier GROUP_PHOTO = PAINTING_VARIANT.register("group_photo", () -> new PaintingVariant(1920, 1080, getAssetId("group_photo"), Optional.of(Component.translatable(ModPaintingVariants.getPaintingVariantTitleKey(ModPaintingVariants.GROUP_PHOTO))), Optional.of(Component.translatable(ModPaintingVariants.getPaintingVariantAuthorKey(ModPaintingVariants.GROUP_PHOTO))))); - private static @NotNull ResourceLocation getAssetId( String paint_name) { + private static @NotNull ResourceLocation getAssetId(String paint_name) { return ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "textures/painting/"+paint_name+".png"); } 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 5261230..4d331d4 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java @@ -15,6 +15,7 @@ public enum ModAdvancementKey { FOLLOW_LEASH_ARROW("follow_arrow", LEASH_ARROW), DOG_RUNNING_PLAYER("dog_running_player", LEASH_ARROW), NO_LEASH("no_leash", LEASH_START), + LEASH_TERMINATOR("leash_terminator", 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 4fb2e43..2f44323 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -29,6 +29,8 @@ public enum ModLangKeyValue { ITEM_LEASH_ROPE_ARROW(ModItemRegister.LEASH_ROPE_ARROW, ModPartEnum.ITEM, "Leash Rope Arrow", "拴绳箭", "拴繩箭", true), 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), + // LEAD_ROPE_POTTERY_SHERD(ModItemRegister.LEAD_ROPE_POTTERY_SHERD, ModPartEnum.ITEM, "Lead Rope Pottery Sherd", "拴绳纹样陶片", "拴繩紋樣陶片", true), //ITEM_DESC DESC_ITEM_LEASH_ROPE_ARROW(LeashRopeArrowItem.descKey, ModPartEnum.DESCRIPTION, "Arrows with ropes attached?","带有拴绳的箭矢?", "帶有拴繩的箭矢?", false), //PAINTING @@ -74,6 +76,7 @@ public enum ModLangKeyValue { FOLLOW_ARROW(ModAdvancementKey.FOLLOW_LEASH_ARROW.getNameKey(), ModPartEnum.NAME, "Launch!!!", "启航!!!" , "啓航!!!",false), FOLLOW_WOLF(ModAdvancementKey.DOG_RUNNING_PLAYER.getNameKey(), ModPartEnum.NAME, "It's Walking human time.", "遛“人”时间", "遛“人”時間",false), NO_LEASH(ModAdvancementKey.NO_LEASH.getNameKey(), ModPartEnum.NAME, "Don't tie me up", "勿拴我", "請恁勿拴唔", false), + TERMINATOR(ModAdvancementKey.LEASH_TERMINATOR.getNameKey(), ModPartEnum.NAME, "The Lead Terminator", "拴绳终结者","拴繩終結者", 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), @@ -82,6 +85,7 @@ 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), + TERMINATOR_DESC(ModAdvancementKey.LEASH_TERMINATOR.getDescKey(), ModPartEnum.DESCRIPTION, "I am Lead Terminator!", "我來终结拴绳者!", "吾將終結拴繩!", false), NO_LEASH_DESC(ModAdvancementKey.NO_LEASH.getDescKey(), ModPartEnum.NAME, "You cannot be leashed by ANY", "你不会被任何东西拴住", "恁不會被任何拴住", false), //MOB_EFFECT NO_LEASH_EFFECT(ModEffectRegister.getEffectKey(ModEffectRegister.NO_LEASH_EFFECT.get()), ModPartEnum.NAME, "No Leash", "禁拴", "禁拴", false), 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 888c240..ed60c16 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java @@ -123,6 +123,18 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG ) ) .parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASHED_FRIEND.getNameWithNameSpace()); + AdvancementHolder lead_rope_terminator = Advancement.Builder.advancement().display( + ModItemRegister.AMETHYST_SHEARS.get(), + Component.translatable(ModAdvancementKey.LEASH_TERMINATOR.getNameKey()), + Component.translatable(ModAdvancementKey.LEASH_TERMINATOR.getDescKey()), + null, + AdvancementType.TASK, + true, + true, + true + ).addCriterion("has_amethyst_shears", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.AMETHYST_SHEARS.get()) + ).parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASH_TERMINATOR.getNameWithNameSpace()); + AdvancementHolder no_leash = Advancement.Builder.advancement().display( Items.BARRIER, Component.translatable(ModAdvancementKey.NO_LEASH.getNameKey()), diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModRecipeProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModRecipeProvider.java index 802d5ac..0d7e8eb 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModRecipeProvider.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModRecipeProvider.java @@ -38,6 +38,13 @@ public class ModRecipeProvider extends RecipeProvider { .unlockedBy("has_lead",has(Items.LEAD)) .unlockedBy("has_glowstone_dust",has(Items.GLOWSTONE_DUST)) .save(this.output,"leash_rope_arrow_shape"); + this.shaped(RecipeCategory.MISC, ModItemRegister.AMETHYST_SHEARS.get(),1) + .pattern("#%") + .pattern("%#") + .define('#', Items.AMETHYST_SHARD) + .define('%', Items.STICK) + .unlockedBy("has_amethyst_shard",has(Items.AMETHYST_SHARD)) + .save(this.output); } public static class Runner extends RecipeProvider.Runner { diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java b/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java index ee70469..a420a91 100644 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java @@ -1,6 +1,7 @@ package com.r3944realms.leashedplayer.mixin.server; import com.r3944realms.leashedplayer.content.gamerules.GameruleRegistry; +import com.r3944realms.leashedplayer.content.gamerules.Server.DisablePlayerMoveCheck; import com.r3944realms.leashedplayer.content.gamerules.Server.TeleportWithLeashedPlayers; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; @@ -60,7 +61,7 @@ public class MixinServerGamePacketListenerImpl { @SuppressWarnings("DiscouragedShift") @Inject(method = {"handleMovePlayer"}, at = @At(value = "INVOKE",target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V", ordinal = 0, shift = At.Shift.BEFORE), cancellable = true) private void handleMovePlayer(ServerboundMovePlayerPacket pPacket, CallbackInfo ci) { - if(GameruleRegistry.getGameruleBoolValue(this.player.serverLevel(), TeleportWithLeashedPlayers.ID)) + if(GameruleRegistry.getGameruleBoolValue(this.player.serverLevel(), DisablePlayerMoveCheck.ID)) ci.cancel(); } } diff --git a/src/main/java/com/r3944realms/leashedplayer/utils/Lazy.java b/src/main/java/com/r3944realms/leashedplayer/utils/Lazy.java new file mode 100644 index 0000000..afcda4d --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/utils/Lazy.java @@ -0,0 +1,25 @@ +package com.r3944realms.leashedplayer.utils; + +import java.util.function.Supplier; + +public class Lazy implements Supplier { + + private final Supplier delegate; + private T value; + + public Lazy(Supplier delegate) { + + this.delegate = delegate; + } + + @Override + public T get() { + + if (this.value == null) { + + this.value = this.delegate.get(); + } + + return this.value; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/leashedplayer/textures/entity/decorated_pot/lead_rope_pottery_pattern.png b/src/main/resources/assets/leashedplayer/textures/entity/decorated_pot/lead_rope_pottery_pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..5cc4f7ee6f2a758ba8285d9e6e1ed55fc1deab87 GIT binary patch literal 452 zcmV;#0XzPQP)Px$en~_@R5*>Dlg&!QKoo^Plhn3Js5D|LSWqe5h%UPH5qt!fKAB4&!6y)xUDTb3 zRVtW@7Q-aXbP{z@Gfn#A!UKWH;hZz~UhZrFT%MnO^AB8HU2j+b;Z)&xCa!A%P}{1k zH3gqB0RFQCzyh>+@DTpWLaHUJV4SE#bB<@?c;-A{I22S$B`uDXqVJCZ5K#oc>ERv| zmCVBYgjlJ0z#@9X5#3gUx?Kfe98Ku^V@{g&C9RRaHTzuK*2WAS&*k>DR9030000Px$6-h)vR5*=eU>Niu-&Fhm`30Z<|2zHc|G(4E{`Y2``A?GOeE-!Lnu#(b-&Fg5 zx3d}C_VWuq!!`dq{S0mZ6E4l>QX&jbcuE=cwLdfT&ws{Xn83@}n|0=YVWJd@S{7WI zx7~Zd@Pp?*L;rk5hT>@^D4H)`<;86PGFWrGjB(9zh_ee5r5G+=Ooope;_p{4F*KtX@bC1q|4gP*j4*@#-OPe(WME*xs+j>f5VsyigzWM2 t`xrRB;Ma&1gjja{53%ebKB*20000&#o3#%8`7;0j002ovPDHLkV1i^Cp*H{k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/leashedplayer/textures/item/lead_rope_pottery_sherd.png b/src/main/resources/assets/leashedplayer/textures/item/lead_rope_pottery_sherd.png new file mode 100644 index 0000000000000000000000000000000000000000..615d02aa167f00c5bbb8768f75d7a8a33e3a8432 GIT binary patch literal 384 zcmV-`0e}99P)Px$I!Q!9R5*>Tld)=qKoEw1gCeXVNKgYY*BG0?6*g8O#Wm^gUG6FJF4w2Y16-5h zAP~eRNs*02gQ(nMI8y{=_gt?@rrKrp`{&=;S>TVM980biaW|E_d)O!dpdN#-yi;jz z^YT8dRUY6ErCEVAD-bv~&MiX_sK57Pfr_<=XJ>e#p99zn0f41zQa2}us