diff --git a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c index a0e565b..ffc6767 100644 --- a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c +++ b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c @@ -1,4 +1,4 @@ -// 1.21.1 2024-10-05T22:32:01.8406652 Item Models: leashedplayer +// 1.21 2024-10-23T13:15:06.1102778 Item Models: leashedplayer 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/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 index 1375903..fa93094 100644 --- a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -1,2 +1,2 @@ -// 1.21.1 2024-10-21T20:49:37.2148772 Registries +// 1.21 2024-10-23T13:15:06.1082841 Registries 6f79a674215db9f9d2820b1c7f052c60ce729fee data/leashedplayer/painting_variant/group_photo.json diff --git a/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 b/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 index 778555c..0dabe2b 100644 --- a/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 +++ b/src/generated/resources/.cache/1749bb0c3e8c52cfb2d8ed2140e4678c71e770f5 @@ -1,2 +1,2 @@ -// 1.21.1 2024-10-05T22:32:01.8406652 Tags for minecraft:item mod id leashedplayer +// 1.21 2024-10-23T13:15:06.1012494 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 2c9b9bc..eaa23cd 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21.1 2024-10-21T20:49:37.2158765 Languages: en_us for mod: leashedplayer -dc78768edb63e137acf5074f92a68563e1b28406 assets/leashedplayer/lang/en_us.json +// 1.21 2024-10-23T14:43:16.8619078 Languages: en_us for mod: leashedplayer +4dc2ca922a540c7133a4a6867dfcd8bfec5a1db4 assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/456392f19d2beac1e6e71432fcc2128b993c47e1 b/src/generated/resources/.cache/456392f19d2beac1e6e71432fcc2128b993c47e1 index 5f9be9b..c85a2ed 100644 --- a/src/generated/resources/.cache/456392f19d2beac1e6e71432fcc2128b993c47e1 +++ b/src/generated/resources/.cache/456392f19d2beac1e6e71432fcc2128b993c47e1 @@ -1 +1 @@ -// 1.21.1 2024-09-05T15:23:52.4543401 Tags for minecraft:block mod id leashedplayer +// 1.21 2024-10-23T13:15:06.1052755 Tags for minecraft:block mod id leashedplayer diff --git a/src/generated/resources/.cache/818caf9537d536e2a9ffeae84514691689356c22 b/src/generated/resources/.cache/818caf9537d536e2a9ffeae84514691689356c22 index 45382fa..5920da0 100644 --- a/src/generated/resources/.cache/818caf9537d536e2a9ffeae84514691689356c22 +++ b/src/generated/resources/.cache/818caf9537d536e2a9ffeae84514691689356c22 @@ -1,2 +1,2 @@ -// 1.21.1 2024-10-21T20:49:37.2108769 Tags for minecraft:painting_variant mod id leashedplayer +// 1.21 2024-10-23T13:15:06.1052755 Tags for minecraft:painting_variant mod id leashedplayer e081a053d7c2f2d3238cf38436185ef23d234505 data/minecraft/tags/painting_variant/placeable.json diff --git a/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 b/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 index ab35f3c..dfd28dc 100644 --- a/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 +++ b/src/generated/resources/.cache/853329c6e706e45295e80307b8a95a5709025422 @@ -1,2 +1,2 @@ -// 1.21.1 2024-09-05T10:26:39.4122865 Languages: lzh for mod: leashedplayer +// 1.21 2024-10-23T13:15:06.1042677 Languages: lzh for mod: leashedplayer bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f assets/leashedplayer/lang/lzh.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index 4ca692a..045e4a7 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.21.1 2024-10-05T22:33:13.2484086 Recipes +// 1.21 2024-10-23T13:15:06.1092763 Recipes 1b45d1ad8dc73f1787c97777ad13d9771c9e0ad1 data/leashedplayer/advancement/recipes/misc/leash_rope_arrow.json 974d74538b3e172946f2e169036b453b6eb6bc0a data/leashedplayer/recipe/leash_rope_arrow.json c0e05f359296d3e28573fa1b205ac44736376622 data/minecraft/advancement/recipes/misc/spectral_leash_rope_arrow_with_glowstone_dust.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index ef09831..97fa50f 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21.1 2024-10-21T20:49:37.2148772 Languages: zh_cn for mod: leashedplayer -6bf33a9eeda115951df58977924696be03f6f1bf assets/leashedplayer/lang/zh_cn.json +// 1.21 2024-10-23T14:43:16.860909 Languages: zh_cn for mod: leashedplayer +35bc6c3001138c5306d1ee9d55ef3dfbfd417e08 assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 index 5748058..907f395 100644 --- a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -1,4 +1,4 @@ -// 1.21.1 2024-10-06T00:40:59.6903049 Advancements +// 1.21 2024-10-23T14:19:10.2054361 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,3 +6,4 @@ 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 +4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index 54b989e..7d99a80 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21.1 2024-10-21T20:49:37.2138769 Languages: zh_tw for mod: leashedplayer -d44d60e27eacfee6c34a8b9a5fcdd164f25cb5a5 assets/leashedplayer/lang/zh_tw.json +// 1.21 2024-10-23T14:43:16.8589078 Languages: zh_tw for mod: leashedplayer +c6df14a1f53a3e892ebc6b396b552ff27f1a7580 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 61b1a4b..c15def4 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -13,11 +13,16 @@ "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.no_leash": "Don't tie me up", + "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.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", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "Create LeashKnot Entity if it's absent on fence", + "gamerule.LP.DisablePlayerMoveCheck": "Disable Player Move Check", + "gamerule.LP.DisablePlayerMoveCheck.description": "Disable the player's movement Check And Correct it.", "gamerule.LP.KeepLeashNotDropTime": "Keep leash alive Time", "gamerule.LP.KeepLeashNotDropTime.description": "The time of Keep new leash which has far distance alive (Tick)", "gamerule.LP.TeleportWithLeashedPlayers": "Teleport leashed player with player holder", @@ -26,6 +31,10 @@ "item.leashedplayer.fabric": "Fabric", "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", + "item.minecraft.potion.effect.no_leash": "No Leash Potion", + "item.minecraft.splash_potion.effect.no_leash": "Splash No Leash Potion", + "item.minecraft.tipped_arrow.effect.no_leash": "Arrow of No Leash", "leashedplayer.command.leash.message.leash.data.clear": "%1$s's LeashData(LeashHolderEntity: %2$s) now is clear", "leashedplayer.command.leash.message.leash.data.clear.leash.clear.failed.no_data": "%1$s has no LeashData can be clear", "leashedplayer.command.leash.message.leash.data.null": "%1$s has no LeashDataEntity", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 7c79b45..22ed54e 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -13,11 +13,16 @@ "advancement.leashedplayer.leashed_friend.desc": "被玩家用拴绳链接", "advancement.leashedplayer.leashed_self": "稳固联结", "advancement.leashedplayer.leashed_self.desc": "用拴绳拴住自己", + "advancement.leashedplayer.no_leash": "勿拴我", + "advancement.leashedplayer.no_leash.desc": "你不会被任何东西拴住", "creativetab.leashedplayer.leashedplayer_tab": "可拴玩家", + "effect.leashedplayer.no_leash": "禁拴", "entity.leashedplayer.leash_rope_arrow": "拴绳箭", "entity.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失则创建拴绳结", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "如果在栅栏处缺失拴绳结,则创建它", + "gamerule.LP.DisablePlayerMoveCheck": "禁止检查玩家移动", + "gamerule.LP.DisablePlayerMoveCheck.description": "禁止检查玩家移动并且纠正它", "gamerule.LP.KeepLeashNotDropTime": "保持拴绳不掉落的时间", "gamerule.LP.KeepLeashNotDropTime.description": "当距离过远时,保持新建拴绳不掉落的时间 (刻)", "gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者传送", @@ -26,6 +31,10 @@ "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.leash_rope_arrow": "拴绳箭", "item.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭", + "item.minecraft.lingering_potion.effect.no_leash": "滞留型禁拴药水", + "item.minecraft.potion.effect.no_leash": "禁拴药水", + "item.minecraft.splash_potion.effect.no_leash": "喷溅型禁拴药水", + "item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭", "leashedplayer.command.leash.message.leash.data.clear": "%1$s的拴绳数据(拴绳持有者实体:%2$s)现在已清除", "leashedplayer.command.leash.message.leash.data.clear.leash.clear.failed.no_data": "%1$s沒有拴绳数据可清除", "leashedplayer.command.leash.message.leash.data.null": "%1$s沒有拴绳数据实体", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 0e3dded..8495ddc 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -13,11 +13,16 @@ "advancement.leashedplayer.leashed_friend.desc": "被玩家用拴繩鏈接", "advancement.leashedplayer.leashed_self": "穩固聯結", "advancement.leashedplayer.leashed_self.desc": "用栓繩拴住自己", + "advancement.leashedplayer.no_leash": "請恁勿拴唔", + "advancement.leashedplayer.no_leash.desc": "恁不會被任何拴住", "creativetab.leashedplayer.leashedplayer_tab": "可拴玩家", + "effect.leashedplayer.no_leash": "禁拴", "entity.leashedplayer.leash_rope_arrow": "拴繩箭", "entity.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失則創建拴繩結", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "如果在柵欄処缺失拴繩結,則創建它", + "gamerule.LP.DisablePlayerMoveCheck": "禁止檢查玩家移動", + "gamerule.LP.DisablePlayerMoveCheck.description": "禁止檢查玩家移動並糾正他它", "gamerule.LP.KeepLeashNotDropTime": "保持其不掉落的時間", "gamerule.LP.KeepLeashNotDropTime.description": "儅距離過遠時,保持其不掉落的時間(刻)", "gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者傳送", @@ -26,6 +31,10 @@ "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.leash_rope_arrow": "拴繩箭", "item.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭", + "item.minecraft.lingering_potion.effect.no_leash": "滯留型禁拴藥水", + "item.minecraft.potion.effect.no_leash": "禁拴藥水", + "item.minecraft.splash_potion.effect.no_leash": "噴濺型禁拴藥水", + "item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭", "leashedplayer.command.leash.message.leash.data.clear": "%1$s的拴繩數據(拴繩持有者實體:%2$s)現在已清除", "leashedplayer.command.leash.message.leash.data.clear.leash.clear.failed.no_data": "%1$s沒有拴繩數據實體可被清除", "leashedplayer.command.leash.message.leash.data.null": "%1$s沒有拴繩數據實體", diff --git a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java index f9ba600..aafb3af 100644 --- a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java @@ -4,13 +4,30 @@ import com.mojang.brigadier.CommandDispatcher; import com.r3944realms.leashedplayer.content.commands.LeashCommand; import com.r3944realms.leashedplayer.content.commands.MotionCommand; 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.items.ModItemRegister; +import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; import net.minecraft.commands.CommandSourceStack; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Leashable; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionBrewing; +import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.level.block.DispenserBlock; import net.neoforged.bus.api.SubscribeEvent; 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.living.MobEffectEvent; +import net.neoforged.neoforge.event.tick.EntityTickEvent; public class CommonEventHandler { @@ -23,7 +40,30 @@ public class CommonEventHandler { MotionCommand.register(dispatcher); TickCommand.register(dispatcher); } - + @SubscribeEvent + public static void OnRegisterPotionBrewing(RegisterBrewingRecipesEvent event) { + PotionBrewing.Builder builder = event.getBuilder(); + builder.addMix(Potions.WATER, Items.SLIME_BALL, ModPotionRegister.NO_LEASH); + } + @SubscribeEvent + public static void OnLivingTickEvent(EntityTickEvent.Post event) { + Entity entity = event.getEntity(); + if (entity.level().isClientSide()) { + return; + } + if (entity instanceof LivingEntity living) { + MobEffectInstance effect = living.getEffect(ModEffectRegister.NO_LEASH_EFFECT); + if(effect != null && effect.getDuration() > 0){ + if (entity instanceof PlayerLeashable player) { + if (player.getLeashHolder() != null) + player.dropLeash(true, !(player.getLeashHolder() instanceof LeashRopeArrow)); + } else if (entity instanceof Leashable leashable) { + if (leashable.getLeashHolder() != null) + leashable.dropLeash(true, !(leashable.getLeashHolder() instanceof LeashRopeArrow)); + } + } + } + } } @EventBusSubscriber(modid = LeashedPlayer.MOD_ID, bus = EventBusSubscriber.Bus.MOD) public static class Mod extends CommonEventHandler { diff --git a/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java b/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java index deeb692..a6b6d8e 100644 --- a/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java +++ b/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java @@ -2,10 +2,12 @@ package com.r3944realms.leashedplayer; import com.r3944realms.leashedplayer.config.LeashPlayerCommonConfig; import com.r3944realms.leashedplayer.content.criteriaTriggers.ModCriteriaTriggers; +import com.r3944realms.leashedplayer.content.effects.ModEffectRegister; +import com.r3944realms.leashedplayer.content.effects.ModPotionRegister; 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.paintings.paintings.ModPaintingsRegister; +import com.r3944realms.leashedplayer.content.paintings.ModPaintingsRegister; import com.r3944realms.leashedplayer.utils.Util; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModLoadingContext; @@ -21,6 +23,8 @@ public class LeashedPlayer { public LeashedPlayer(IEventBus event) { ModItemRegister.register(event); ModPaintingsRegister.register(event); + ModEffectRegister.register(event); + ModPotionRegister.register(event); ModEntityRegister.register(event); ModCreativeTab.register(event); ModCriteriaTriggers.register(event); diff --git a/src/main/java/com/r3944realms/leashedplayer/content/effects/ModEffectRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/effects/ModEffectRegister.java new file mode 100644 index 0000000..c72ce79 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/effects/ModEffectRegister.java @@ -0,0 +1,32 @@ +package com.r3944realms.leashedplayer.content.effects; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +public class ModEffectRegister { + public static DeferredRegister MOB_EFFECT = DeferredRegister.create(Registries.MOB_EFFECT, LeashedPlayer.MOD_ID); + public static DeferredHolder NO_LEASH_EFFECT = register( + "no_leash", + () -> new MobEffect(MobEffectCategory.NEUTRAL, 12063764) + ); + public static DeferredHolder register(String name, Supplier effect) { + return MOB_EFFECT.register(name, effect); + } + + public static String getEffectKey(MobEffect effect) { + return effect.getDescriptionId(); + } + public static String getModEffectKey(DeferredHolder effect) { + return getEffectKey(effect.get()); + } + public static void register(IEventBus eventBus) { + MOB_EFFECT.register(eventBus); + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/content/effects/ModPotionRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/effects/ModPotionRegister.java new file mode 100644 index 0000000..e409d3b --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/effects/ModPotionRegister.java @@ -0,0 +1,41 @@ +package com.r3944realms.leashedplayer.content.effects; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.item.alchemy.Potion; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +public class ModPotionRegister { + public static DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, LeashedPlayer.MOD_ID); + public static final DeferredHolder NO_LEASH = register("no_leash", + () -> new Potion("no_leash", new MobEffectInstance(ModEffectRegister.NO_LEASH_EFFECT, 7200, 0)) + ); + public static DeferredHolder register(String Name, Supplier supplier) { + return POTIONS.register(Name, supplier); + } + /** + * + * @param name the Name of Potion + * @param type (char)
[
0 & 3 ~ 255 : potion
1 : lingering_potion
2 : splash_potion
] + * @return Language Key + */ + public static String getPotionNameKey(String name, char type) { + return "item.minecraft." + + (type == 1 ? "lingering_potion" : + (type == 2 ? "splash_potion" : "potion") + ) + + ".effect." + name; + } + public static String getTippedArrowNameKey(String Name) { + return "item.minecraft.tipped_arrow.effect." + Name; + } + + public static void register(IEventBus eventBus) { + POTIONS.register(eventBus); + } +} 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 18d4111..8c0349f 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/ModCreativeTab.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/ModCreativeTab.java @@ -1,14 +1,20 @@ package com.r3944realms.leashedplayer.content.items; import com.r3944realms.leashedplayer.LeashedPlayer; +import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.common.CommonHooks; +import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredRegister; import org.jetbrains.annotations.NotNull; +import java.util.Objects; import java.util.function.Supplier; public class ModCreativeTab { @@ -21,8 +27,17 @@ public class ModCreativeTab { .icon(() -> ModItemRegister.LEASH_ROPE_ARROW.get().getDefaultInstance()) .displayItems(((pParameters, pOutput) -> { pOutput.accept(Items.LEAD); + pOutput.accept(Items.BOW); + pOutput.accept(Items.CROSSBOW); pOutput.accept(ModItemRegister.LEASH_ROPE_ARROW.get()); pOutput.accept(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()); + HolderLookup.RegistryLookup potionRegistryLookup = CommonHooks.resolveLookup(Registries.POTION); + if(potionRegistryLookup != null) { + potionRegistryLookup.listElements() + .filter(p_337926_ -> Objects.requireNonNull(p_337926_.getKey()).location().getNamespace().equals(LeashedPlayer.MOD_ID)) + .map(p_330083_ -> PotionContents.createItemStack(Items.POTION, p_330083_)) + .forEach(pOutput::accept); + } })).build()); public static String getCreativeMod(@NotNull String tabs) { return LEASHED_PLAYER_TAB_STRING + "." + tabs; diff --git a/src/main/java/com/r3944realms/leashedplayer/content/paintings/paintings/ModPaintingsRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java similarity index 94% rename from src/main/java/com/r3944realms/leashedplayer/content/paintings/paintings/ModPaintingsRegister.java rename to src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java index 505d523..940052e 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/paintings/paintings/ModPaintingsRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/paintings/ModPaintingsRegister.java @@ -1,4 +1,4 @@ -package com.r3944realms.leashedplayer.content.paintings.paintings; +package com.r3944realms.leashedplayer.content.paintings; import com.r3944realms.leashedplayer.LeashedPlayer; import net.minecraft.core.registries.Registries; 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 ea04ba4..5261230 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java @@ -14,6 +14,7 @@ public enum ModAdvancementKey { ADVANCEMENT_LEASH_ARROW("advancement_leash_arrow", LEASH_ARROW), FOLLOW_LEASH_ARROW("follow_arrow", LEASH_ARROW), DOG_RUNNING_PLAYER("dog_running_player", LEASH_ARROW), + NO_LEASH("no_leash", 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 99bbcad..4fb2e43 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -2,6 +2,8 @@ package com.r3944realms.leashedplayer.datagen.LanguageAndOtherData; import com.r3944realms.leashedplayer.content.commands.LeashCommand; import com.r3944realms.leashedplayer.content.commands.MotionCommand; +import com.r3944realms.leashedplayer.content.effects.ModEffectRegister; +import com.r3944realms.leashedplayer.content.effects.ModPotionRegister; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.gamerules.Server.CreateLeashFenceKnotEntityIfAbsent; import com.r3944realms.leashedplayer.content.gamerules.Server.DisablePlayerMoveCheck; @@ -71,6 +73,7 @@ public enum ModLangKeyValue { LEASH_PLAYER(ModAdvancementKey.LEASHED_FRIEND.getNameKey(),ModPartEnum.NAME, "Be bound by Rope", "拴绳链接", "拴繩鏈接" , false), 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), //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), @@ -79,6 +82,15 @@ 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), + //MOB_EFFECT + NO_LEASH_EFFECT(ModEffectRegister.getEffectKey(ModEffectRegister.NO_LEASH_EFFECT.get()), ModPartEnum.NAME, "No Leash", "禁拴", "禁拴", false), + //POTION + NO_LEASH_POTION(ModPotionRegister.getPotionNameKey("no_leash", (char) 0), ModPartEnum.NAME, "No Leash Potion", "禁拴药水", "禁拴藥水", false), + NO_LEASH_POTION_SPLASH(ModPotionRegister.getPotionNameKey("no_leash", (char) 2), ModPartEnum.NAME, "Splash No Leash Potion", "喷溅型禁拴药水", "噴濺型禁拴藥水", false), + NO_LEASH_POTION_LINGERING(ModPotionRegister.getPotionNameKey("no_leash", (char) 1), ModPartEnum.NAME, "Splash No Leash Potion", "滞留型禁拴药水", "滯留型禁拴藥水", false), + //ARROW + NO_LEASH_ARROW(ModPotionRegister.getTippedArrowNameKey("no_leash"), ModPartEnum.ITEM, "Arrow of No Leash", "禁拴之箭", "禁拴之箭", false), ; private final Supplier supplier; private String key; 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 7655adb..2d758fd 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java @@ -2,15 +2,14 @@ package com.r3944realms.leashedplayer.datagen.generator; import com.r3944realms.leashedplayer.LeashedPlayer; import com.r3944realms.leashedplayer.content.criteriaTriggers.LeashPlayerTrigger; +import com.r3944realms.leashedplayer.content.effects.ModEffectRegister; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.datagen.LanguageAndOtherData.ModAdvancementKey; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.AdvancementType; -import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.EntityTypePredicate; -import net.minecraft.advancements.critereon.InventoryChangeTrigger; +import net.minecraft.advancements.critereon.*; import net.minecraft.core.HolderLookup; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -121,5 +120,21 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG ) ) .parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASHED_FRIEND.getNameWithNameSpace()); + AdvancementHolder no_leash = Advancement.Builder.advancement().display( + Items.BARRIER, + Component.translatable(ModAdvancementKey.NO_LEASH.getNameKey()), + Component.translatable(ModAdvancementKey.NO_LEASH.getDescKey()), + null, + AdvancementType.GOAL, + true, + true, + true + ).addCriterion("no_leash", + EffectsChangedTrigger.TriggerInstance.hasEffects( + MobEffectsPredicate.Builder.effects() + .and(ModEffectRegister.NO_LEASH_EFFECT) + ) + ).parent(hasLeashRopeItem).save(saver, ModAdvancementKey.NO_LEASH.getNameWithNameSpace()); } + } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 1976920..07f5955 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -13,4 +13,6 @@ public net.minecraft.world.level.GameRules$VisitorCaller #Interface #private -> public public net.minecraft.world.entity.Leashable$LeashData delayedLeashHolderId # delayedLeashHolderId #private -> protect -protected net.minecraft.world.entity.projectile.AbstractArrow life # life \ No newline at end of file +protected net.minecraft.world.entity.projectile.AbstractArrow life # life +#protect -> public +public net.minecraft.world.effect.MobEffect (Lnet/minecraft/world/effect/MobEffectCategory;I)V # MobEffect \ No newline at end of file diff --git a/src/main/resources/assets/leashedplayer/textures/mob_effect/no_leash.png b/src/main/resources/assets/leashedplayer/textures/mob_effect/no_leash.png new file mode 100644 index 0000000..e515854 Binary files /dev/null and b/src/main/resources/assets/leashedplayer/textures/mob_effect/no_leash.png differ