diff --git a/README.md b/README.md index 46b8756..6401c92 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 版本 0.0.3.1-Alpha-2 提前介绍 【注意:本解釋簡繁混寫,因爲趕時間,所以並不怎麽規範,請諒解】 +# 版本 0.0.3.4 提前介绍c[最终版本对于0.0.4] 【注意:本解釋簡繁混寫,因爲趕時間,所以並不怎麽規範,請諒解】 ## 简介 现在开始你可以用拴绳拴住玩家,也可以拴住自己了,不如尝试拴住彼此来通关我的世界吧( diff --git a/gradle.properties b/gradle.properties index b5e827d..ae00048 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,7 @@ mod_name=Leashed Player # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=0.0.3.1 +mod_version=0.0.3.4 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 new file mode 100644 index 0000000..428a5dd --- /dev/null +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -0,0 +1 @@ +// 1.21.1 2024-09-08T14:20:00.5319153 Registries diff --git a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff index a42be1e..d7c910a 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21.1 2024-09-05T21:38:59.0514122 Languages: en_us for mod: leashedplayer -06d246d0f55a53cc97a63426253e9328cf4a189d assets/leashedplayer/lang/en_us.json +// 1.21.1 2024-09-09T15:57:30.9531898 Languages: en_us for mod: leashedplayer +c51f1722b91e85159f4c60282bf43a1c934b151a assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index abe4631..a5e9836 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21.1 2024-09-05T21:38:59.0494103 Languages: zh_cn for mod: leashedplayer -283bed8b7a38bb5927f126c4002a772cd64fc274 assets/leashedplayer/lang/zh_cn.json +// 1.21.1 2024-09-09T16:00:58.2714402 Languages: zh_cn for mod: leashedplayer +bd4d6fe17ea35390bf61a642df42cb2e7bc60beb assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 new file mode 100644 index 0000000..4103c82 --- /dev/null +++ b/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 @@ -0,0 +1,7 @@ +// 1.21.1 2024-09-09T15:52:23.955795 Advancements +f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json +bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json +29911bbed5a1b7ede2b08d82e6716cd9463bc061 data/leashedplayer/advancement/leashed_friend.json +25f6b476b194a27c0fe0e75d74ac3a7ff4054789 data/leashedplayer/advancement/leashed_self.json +3daef978c8533b3cab963642193faf7181a8f220 data/leashedplayer/advancement/leash_arrow.json +133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index 5c6c5f7..c1ecacf 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21.1 2024-09-05T21:38:59.0474148 Languages: zh_tw for mod: leashedplayer -056a2c46a8ee17f5326e70d397cd3c8b2950df2d assets/leashedplayer/lang/zh_tw.json +// 1.21.1 2024-09-09T16:00:58.2694396 Languages: zh_tw for mod: leashedplayer +ecf1d6cec85b001be6584c37134a76d5d75e65c0 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 7107d57..ea0b601 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -1,8 +1,22 @@ { + "advancement.leashedplayer.dog_running_player": "It's Walking human time.", + "advancement.leashedplayer.dog_running_player.desc": "In the park where dogs are not allowed to be walked, the dog decided to walk the human instead", + "advancement.leashedplayer.follow_arrow": "Launch!!!", + "advancement.leashedplayer.follow_arrow.desc": "Mc, what are you talking about in physics?", + "advancement.leashedplayer.leash_arrow": "Arrow with a Tether?", + "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.leashed_friend": "Bond by Rope", + "advancement.leashedplayer.leashed_friend.desc": "bond player with lead", + "advancement.leashedplayer.leashed_self": "Stable Connection", + "advancement.leashedplayer.leashed_self.desc": "“Restrain oneself with a rope", "creativetab.leashedplayer.leashedplayer_tab": "Leashed Player", "entity.leashedplayer.leash_rope_arrow": "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.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", "gamerule.LP.TeleportWithLeashedPlayers.description": "Holder will teleport with their leashed players ", "item.leash_rope_arrow.description": "Arrows with ropes attached?", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 4dcf6e8..f07be80 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -1,8 +1,22 @@ { + "advancement.leashedplayer.dog_running_player": "遛“人”时间", + "advancement.leashedplayer.dog_running_player.desc": "公园不能遛狗,于是狗站起来遛人", + "advancement.leashedplayer.follow_arrow": "启航!!!", + "advancement.leashedplayer.follow_arrow.desc": "抱歉,我的世界不存在物理学", + "advancement.leashedplayer.leash_arrow": "拴绳之箭?", + "advancement.leashedplayer.leash_arrow.desc": "也许可以用它来发射生物?", + "advancement.leashedplayer.leash_start": "牵引之力", + "advancement.leashedplayer.leash_start.desc": "拴绳大师之路", + "advancement.leashedplayer.leashed_friend": "拴绳链接", + "advancement.leashedplayer.leashed_friend.desc": "用拴绳链接玩家", + "advancement.leashedplayer.leashed_self": "稳固联结", + "advancement.leashedplayer.leashed_self.desc": "用拴绳拴住自己", "creativetab.leashedplayer.leashedplayer_tab": "可拴玩家", "entity.leashedplayer.leash_rope_arrow": "拴绳箭", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失则创建拴绳结", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "如果在栅栏处缺失拴绳结,则创建它", + "gamerule.LP.KeepLeashNotDropTime": "保持拴绳不掉落的时间", + "gamerule.LP.KeepLeashNotDropTime.description": "当距离过远时,保持新建拴绳不掉落的时间 (刻)", "gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者传送", "gamerule.LP.TeleportWithLeashedPlayers.description": "传送时将被拴玩家与持有者一起传送", "item.leash_rope_arrow.description": "带有拴绳的箭矢?", diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 6563e99..7dd489d 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -1,8 +1,22 @@ { + "advancement.leashedplayer.dog_running_player": "遛“人”時間", + "advancement.leashedplayer.dog_running_player.desc": "公園裏不許遛狗,於是狗站起來遛人", + "advancement.leashedplayer.follow_arrow": "啓航!!!", + "advancement.leashedplayer.follow_arrow.desc": "抱歉,麦块不講物理學", + "advancement.leashedplayer.leash_arrow": "拴繩之箭?", + "advancement.leashedplayer.leash_arrow.desc": "也許可以用它發射生物?", + "advancement.leashedplayer.leash_start": "牽引之力", + "advancement.leashedplayer.leash_start.desc": "拴繩大師之路", + "advancement.leashedplayer.leashed_friend": "拴繩鏈接", + "advancement.leashedplayer.leashed_friend.desc": "用拴繩鏈接玩家", + "advancement.leashedplayer.leashed_self": "穩固聯結", + "advancement.leashedplayer.leashed_self.desc": "用栓繩拴住自己", "creativetab.leashedplayer.leashedplayer_tab": "可拴玩家", "entity.leashedplayer.leash_rope_arrow": "拴繩箭", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失則創建拴繩結", "gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "如果在柵欄処缺失拴繩結,則創建它", + "gamerule.LP.KeepLeashNotDropTime": "保持其不掉落的時間", + "gamerule.LP.KeepLeashNotDropTime.description": "儅距離過遠時,保持其不掉落的時間(刻)", "gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者傳送", "gamerule.LP.TeleportWithLeashedPlayers.description": "將被拴玩家將隨持有者一起傳送", "item.leash_rope_arrow.description": "帶有拴繩的箭矢?", diff --git a/src/generated/resources/data/leashedplayer/advancement/dog_running_player.json b/src/generated/resources/data/leashedplayer/advancement/dog_running_player.json new file mode 100644 index 0000000..6eb7ba1 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/dog_running_player.json @@ -0,0 +1,33 @@ +{ + "parent": "leashedplayer:leash_arrow", + "criteria": { + "leash_by_wo_do": { + "conditions": { + "holder": { + "type": "minecraft:wolf" + } + }, + "trigger": "leashedplayer:leash_player" + } + }, + "display": { + "description": { + "translate": "advancement.leashedplayer.dog_running_player.desc" + }, + "frame": "challenge", + "hidden": true, + "icon": { + "count": 1, + "id": "minecraft:bone" + }, + "title": { + "translate": "advancement.leashedplayer.dog_running_player" + } + }, + "requirements": [ + [ + "leash_by_wo_do" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/follow_arrow.json b/src/generated/resources/data/leashedplayer/advancement/follow_arrow.json new file mode 100644 index 0000000..1220537 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/follow_arrow.json @@ -0,0 +1,33 @@ +{ + "parent": "leashedplayer:leash_arrow", + "criteria": { + "leash_arrow": { + "conditions": { + "holder": { + "type": "leashedplayer:leash_rope_arrow" + } + }, + "trigger": "leashedplayer:leash_player" + } + }, + "display": { + "announce_to_chat": false, + "description": { + "translate": "advancement.leashedplayer.follow_arrow.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "leashedplayer:leash_rope_arrow" + }, + "title": { + "translate": "advancement.leashedplayer.follow_arrow" + } + }, + "requirements": [ + [ + "leash_arrow" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json b/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json new file mode 100644 index 0000000..e8db300 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/leash_arrow.json @@ -0,0 +1,35 @@ +{ + "parent": "leashedplayer:leash_start", + "criteria": { + "has_leash_rope_item": { + "conditions": { + "items": [ + { + "items": "leashedplayer:leash_rope_arrow" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": false, + "description": { + "translate": "advancement.leashedplayer.leashed_friend.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "leashedplayer:leash_rope_arrow" + }, + "title": { + "translate": "advancement.leashedplayer.leash_arrow" + } + }, + "requirements": [ + [ + "has_leash_rope_item" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/leash_start.json b/src/generated/resources/data/leashedplayer/advancement/leash_start.json new file mode 100644 index 0000000..84f43a5 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/leash_start.json @@ -0,0 +1,35 @@ +{ + "criteria": { + "has_leash_rope_item": { + "conditions": { + "items": [ + { + "items": "minecraft:lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": false, + "background": "leashedplayer:textures/gui/advancements/backgrounds/leashed_player.png", + "description": { + "translate": "advancement.leashedplayer.leash_start.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "minecraft:lead" + }, + "title": { + "translate": "advancement.leashedplayer.leash_start" + } + }, + "requirements": [ + [ + "has_leash_rope_item" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/leashed_friend.json b/src/generated/resources/data/leashedplayer/advancement/leashed_friend.json new file mode 100644 index 0000000..ddd1651 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/leashed_friend.json @@ -0,0 +1,32 @@ +{ + "parent": "leashedplayer:leash_start", + "criteria": { + "leash_other_player": { + "conditions": { + "holder": { + "type": "minecraft:player" + } + }, + "trigger": "leashedplayer:leash_player" + } + }, + "display": { + "description": { + "translate": "advancement.leashedplayer.leashed_friend.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "minecraft:lead" + }, + "title": { + "translate": "advancement.leashedplayer.leashed_friend" + } + }, + "requirements": [ + [ + "leash_other_player" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/advancement/leashed_self.json b/src/generated/resources/data/leashedplayer/advancement/leashed_self.json new file mode 100644 index 0000000..4767686 --- /dev/null +++ b/src/generated/resources/data/leashedplayer/advancement/leashed_self.json @@ -0,0 +1,32 @@ +{ + "parent": "leashedplayer:leash_start", + "criteria": { + "leash_self": { + "conditions": { + "holder": { + "type": "minecraft:leash_knot" + } + }, + "trigger": "leashedplayer:leash_player" + } + }, + "display": { + "description": { + "translate": "advancement.leashedplayer.leashed_self.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "minecraft:player_head" + }, + "title": { + "translate": "advancement.leashedplayer.leashed_self" + } + }, + "requirements": [ + [ + "leash_self" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java b/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java index 2b57aa0..ec9dc8f 100644 --- a/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java +++ b/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java @@ -1,6 +1,7 @@ package com.r3944realms.leashedplayer; import com.r3944realms.leashedplayer.config.LeashPlayerCommonConfig; +import com.r3944realms.leashedplayer.content.criteriaTriggers.ModCriteriaTriggers; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.items.ModCreativeTab; import com.r3944realms.leashedplayer.content.items.ModItemRegister; @@ -14,12 +15,13 @@ import static com.r3944realms.leashedplayer.utils.Logger.logger; @Mod(LeashedPlayer.MOD_ID) public class LeashedPlayer { public static final String MOD_ID = "leashedplayer"; - private static Float M1;//拴繩掉落距離倍基數 - private static Float M2;//繩箭拴繩掉落距離倍基數 + private static Double M1;//拴繩掉落距離倍基數 + private static Double M2;//繩箭拴繩掉落距離倍基數 public LeashedPlayer(IEventBus event) { ModItemRegister.register(event); ModEntityRegister.register(event); ModCreativeTab.register(event); + ModCriteriaTriggers.register(event); initiation(); } private void initiation() { @@ -28,14 +30,13 @@ public class LeashedPlayer { Util.configFileCreate(new String[]{leashedPlayerCommonConfig}); ModLoadingContext.get().getActiveContainer().registerConfig(ModConfig.Type.COMMON, LeashPlayerCommonConfig.SPEC, MOD_ID + "/" + leashedPlayerCommonConfig + "/LeashPlayer.toml"); } - public static Float M1() { + public static Double M1() { if(M1 == null) { M1 = LeashPlayerCommonConfig.TheLeashBreakLengthTimesBase.get(); - } return M1; } - public static Float M2() { + public static Double M2() { if(M2 == null) { M2 = LeashPlayerCommonConfig.TheMultipleThatLeashRopeArrowBreakLength.get(); } diff --git a/src/main/java/com/r3944realms/leashedplayer/config/LeashPlayerCommonConfig.java b/src/main/java/com/r3944realms/leashedplayer/config/LeashPlayerCommonConfig.java index a033597..99299bb 100644 --- a/src/main/java/com/r3944realms/leashedplayer/config/LeashPlayerCommonConfig.java +++ b/src/main/java/com/r3944realms/leashedplayer/config/LeashPlayerCommonConfig.java @@ -8,29 +8,29 @@ public class LeashPlayerCommonConfig { public static final ModConfigSpec.ConfigValue LeashedPlayerModCommandPrefix; public static final ModConfigSpec.BooleanValue EnableLeashPlayerCommandPrefix; public static ModConfigSpec.IntValue MinimumLeashLengthCanBeSet, MaximumLeashLengthCanBeSet, TheLeashArrowMaxLifeTime; - public static ModConfigSpec.ConfigValue TheMultipleThatLeashRopeArrowBreakLength, TheLeashBreakLengthTimesBase; + public static ModConfigSpec.DoubleValue TheMultipleThatLeashRopeArrowBreakLength, TheLeashBreakLengthTimesBase; static { BUILDER.comment("Leash Player Config"); - + BUILDER.comment("Leash Player Command"); BUILDER.push("Command"); - EnableLeashPlayerCommandPrefix = BUILDER.comment("The prefix of this mod's commands"," [ Default: true] ").define("Enable Leash Player Command", true); - LeashedPlayerModCommandPrefix = BUILDER.comment("The prefix of this mod's commands"," [ Default:'lp'] ").define("LeashedPlayerModCommandPrefix", "lp"); + EnableLeashPlayerCommandPrefix = BUILDER.comment("The prefix of this mod's commands"," [ Default: true] ").define("EnableLeashPlayerCommand", true); + LeashedPlayerModCommandPrefix = BUILDER.comment("The prefix of this mod's commands"," [ Default:'lp'] ").define("LeashedPlayerModCommandPrefix", "lp"); BUILDER.pop(); - - BUILDER.push("Leash Rope Arrow"); - TheMultipleThatLeashRopeArrowBreakLength = BUILDER.comment("How many times is the length of the arrow rope based on BreakLength TimeBase", "[ Default : 5.0f, Invalid Range:[1.0f, 10.0f] ]").define("TheMultipleArrowBreak", 5.0f, o -> (o instanceof Float f) && f >= 2.0f && f <= 10.0f); - TheLeashArrowMaxLifeTime = BUILDER.comment("If the LeashArrowEntity's life is bigger than this value ,it will be discrad", "[ Default : 2400, Invalid Range:[1200 , 10240]").defineInRange("TheLeashArrowMaxLifeTime",2400, 1200, 10240); + BUILDER.comment("Leash Player Arrow"); + BUILDER.push("LeashRopeArrow"); + TheMultipleThatLeashRopeArrowBreakLength = BUILDER.comment("How many times is the length of the arrow rope based on BreakLength TimeBase", "[ Default : 5.0f, Invalid Range:[2.0f, 10.0f] ]").defineInRange("TheMultipleArrowBreak", 5.0f, 2.0f , 10.0f); + TheLeashArrowMaxLifeTime = BUILDER.comment("If the LeashArrowEntity's life is bigger than this value ,it will be discarded", "[ Default : 2400, Invalid Range:[1200 , 10240]]").defineInRange("TheLeashArrowMaxLifeTime",2400, 1200, 10240); BUILDER.pop(); - + BUILDER.comment("Leash Player Misc"); BUILDER.push("Misc"); - - BUILDER.push("LeashLength"); - TheLeashBreakLengthTimesBase = BUILDER.comment("When it exceeds how many times, the leash will drop","[ Default:2.0f, Invalid Range:[2.0f, 5.0f] ]").define("BreakLengthTimeBase", 2.0f, o -> (o instanceof Float f) && f >= 2.0f && f <= 5.0f); - MinimumLeashLengthCanBeSet = BUILDER.comment("The minimum integer's length of Leash", "[ Default:5, Invalid Range:[2,10] ]").defineInRange("MinLeashLength", 5, 2, 10); - MaximumLeashLengthCanBeSet = BUILDER.comment("The maximum integer's length of Leash", "[ Default:1024, Invalid Range:[32, 1024] ]").defineInRange("MaxLeashLength", 1024, 32, 1024); - + BUILDER.comment("Leash Player Length"); + BUILDER.push("LeashLength"); + TheLeashBreakLengthTimesBase = BUILDER.comment("When it exceeds how many times, the leash will drop"," [ Default:2.0f, Invalid Range:[2.0f, 5.0f] ]").defineInRange("BreakLengthTimeBase", 2.0f, 2.0f ,5.0f); + MinimumLeashLengthCanBeSet = BUILDER.comment("The minimum integer's length of Leash", " [ Default:5, Invalid Range:[2,10] ]").defineInRange("MinLeashLength", 5, 2, 10); + MaximumLeashLengthCanBeSet = BUILDER.comment("The maximum integer's length of Leash", " [ Default:1024, Invalid Range:[32, 1024] ]").defineInRange("MaxLeashLength", 1024, 32, 1024); + BUILDER.pop().pop(); diff --git a/src/main/java/com/r3944realms/leashedplayer/content/commands/LeashCommand.java b/src/main/java/com/r3944realms/leashedplayer/content/commands/LeashCommand.java index ec0285b..3a023ec 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/commands/LeashCommand.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/commands/LeashCommand.java @@ -340,11 +340,11 @@ public class LeashCommand { ) ) ) - .then(Commands.argument("targetPlayers", EntityArgument.players()).executes(getRefPlayerLeashLength) - .then(Commands.literal("get").executes(getRefPlayerLeashLength)) + .then(Commands.argument("targetPlayers", EntityArgument.players()).executes(getRefPlayersLeashLength) + .then(Commands.literal("get").executes(getRefPlayersLeashLength)) .then(Commands.literal("set").requires(cs -> cs.hasPermission(2)) .then( - Commands.argument("leashLength", FloatArgumentType.floatArg(MIN_VALUE, MAX_VALUE)).executes(setRefPlayerLengthLeashLength) + Commands.argument("leashLength", FloatArgumentType.floatArg(MIN_VALUE, MAX_VALUE)).executes(setRefPlayersLengthLeashLength) ) ) ) @@ -368,7 +368,7 @@ public class LeashCommand { ) .then(Commands.argument("targetPlayers", EntityArgument.players()).executes(getRefPlayersLeashData) .then(Commands.literal("get") - .executes(getRefPlayerLeashData) + .executes(getRefPlayersLeashData) ) .then(Commands.literal("set").requires(cs -> cs.hasPermission(2)) .then(Commands.argument("holderEntity", EntityArgument.entity()) diff --git a/src/main/java/com/r3944realms/leashedplayer/content/criteriaTriggers/LeashPlayerTrigger.java b/src/main/java/com/r3944realms/leashedplayer/content/criteriaTriggers/LeashPlayerTrigger.java new file mode 100644 index 0000000..b7b758e --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/criteriaTriggers/LeashPlayerTrigger.java @@ -0,0 +1,47 @@ +package com.r3944realms.leashedplayer.content.criteriaTriggers; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; +import net.minecraft.advancements.Criterion; +import net.minecraft.advancements.critereon.ContextAwarePredicate; +import net.minecraft.advancements.critereon.EntityPredicate; +import net.minecraft.advancements.critereon.SimpleCriterionTrigger; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class LeashPlayerTrigger extends SimpleCriterionTrigger { + + @Override + public @NotNull Codec codec() { + return TriggerInstance.CODEC; + } + public void trigger(ServerPlayer pPlayer, Entity pHolderEntity) { + this.trigger(pPlayer, pl -> pl.matches(pPlayer, pHolderEntity)); + } + + public record TriggerInstance(Optional player, Optional holder) implements SimpleCriterionTrigger.SimpleInstance { + public static final Codec CODEC = + RecordCodecBuilder.create(instance -> + instance.group( + EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), + EntityPredicate.CODEC.optionalFieldOf("holder").forGetter(TriggerInstance::holder) + ) + .apply(instance, TriggerInstance::new)); +// public static Criterion LeashSelf() { +// return ModCriteriaTriggers.LEASH_PLAYER_TRIGGER.get().createCriterion(new TriggerInstance(Optional.empty(), Optional.empty())); +// } + public static Criterion LeashPlayer(EntityPredicate.Builder holder) { + return ModCriteriaTriggers.LEASH_PLAYER_TRIGGER.get().createCriterion(new TriggerInstance(Optional.empty(), Optional.of(holder.build()))); + } + + public boolean matches(ServerPlayer player, Entity holder) { + PlayerLeashable ppl = (PlayerLeashable) player; + return ppl.isLeashed() && holder.equals(PlayerLeashable.getLeashDataEntity(player, player.serverLevel())) && this.holder.isPresent() && this.holder.get().matches(player, holder); + } + } + +} diff --git a/src/main/java/com/r3944realms/leashedplayer/content/criteriaTriggers/ModCriteriaTriggers.java b/src/main/java/com/r3944realms/leashedplayer/content/criteriaTriggers/ModCriteriaTriggers.java new file mode 100644 index 0000000..bacf918 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/criteriaTriggers/ModCriteriaTriggers.java @@ -0,0 +1,17 @@ +package com.r3944realms.leashedplayer.content.criteriaTriggers; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import net.minecraft.advancements.CriterionTrigger; +import net.minecraft.core.registries.Registries; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class ModCriteriaTriggers { + public static final DeferredRegister> TRIGGERS = DeferredRegister.create(Registries.TRIGGER_TYPE, LeashedPlayer.MOD_ID); + public static final DeferredHolder, LeashPlayerTrigger> LEASH_PLAYER_TRIGGER = + TRIGGERS.register("leash_player", LeashPlayerTrigger::new); + public static void register(IEventBus eventBus) { + TRIGGERS.register(eventBus); + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java new file mode 100644 index 0000000..51a7f16 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModAdvancementKey.java @@ -0,0 +1,38 @@ +package com.r3944realms.leashedplayer.datagen.LanguageAndOtherData; + + + +import com.r3944realms.leashedplayer.LeashedPlayer; + +import javax.annotation.Nullable; + +public enum ModAdvancementKey { + LEASH_START("leash_start", null), + LEASHED_FRIEND("leashed_friend", LEASH_START), + LEASHED_SELF("leashed_self", LEASH_START), + LEASH_ARROW("leash_arrow", LEASH_START), + FOLLOW_LEASH_ARROW("follow_arrow", LEASH_ARROW), + DOG_RUNNING_PLAYER("dog_running_player", LEASH_ARROW), + ; + private final String Name; + @Nullable + private final ModAdvancementKey Parent; + ModAdvancementKey(String name, @Nullable ModAdvancementKey parent) { + this.Name = name; + this.Parent = parent; + } + + public @Nullable ModAdvancementKey getParent() { + return Parent; + } + public String getNameKey() { + return "advancement." + LeashedPlayer.MOD_ID + "." + Name; + } + + public String getDescKey() { + return this.getNameKey() + ".desc"; + } + public String getNameWithNameSpace() { + return LeashedPlayer.MOD_ID + ":" + this.Name; + } +} 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 659a2d4..80b08a8 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -49,6 +49,20 @@ public enum ModLangKeyValue { TELEPORT_WITH_LEASHED_DESCRIPTION(TeleportWithLeashedPlayers.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Holder will teleport with their leashed players ", "传送时将被拴玩家与持有者一起传送", "將被拴玩家將隨持有者一起傳送" ,false), CREATE_LEASH_FENCE_KNOT_ENTITY_IF_ABSENT_DESCRIPTION(CreateLeashFenceKnotEntityIfAbsent.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Create LeashKnot Entity if it's absent on fence", "如果在栅栏处缺失拴绳结,则创建它", "如果在柵欄処缺失拴繩結,則創建它", false), KEEP_LEASH_NOT_DROP_TIME_DESCRIPTION(KeepLeashNotDropTime.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION,"The time of Keep new leash which has far distance alive (Tick)", "当距离过远时,保持新建拴绳不掉落的时间 (刻)", "儅距離過遠時,保持其不掉落的時間(刻)", false), + //ADV_NAME + LEASH_START(ModAdvancementKey.LEASH_START.getNameKey(), ModPartEnum.NAME, "The Power of Traction", "牵引之力", "牽引之力", false), + LEASH_LR_ARROW(ModAdvancementKey.LEASH_ARROW.getNameKey(), ModPartEnum.NAME, "Arrow with a Tether?" , "拴绳之箭?", "拴繩之箭?", false), + LEASH_SELF(ModAdvancementKey.LEASHED_SELF.getNameKey(), ModPartEnum.NAME, "Stable Connection", "稳固联结" ,"穩固聯結", false), + LEASH_PLAYER(ModAdvancementKey.LEASHED_FRIEND.getNameKey(),ModPartEnum.NAME, "Bond 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), + //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), + LEASH_SELF_DESC(ModAdvancementKey.LEASHED_SELF.getDescKey(), ModPartEnum.DESCRIPTION, "“Restrain oneself with a rope", "用拴绳拴住自己" ,"用栓繩拴住自己", false), + LEASH_PLAYER_DESC(ModAdvancementKey.LEASHED_FRIEND.getDescKey(),ModPartEnum.DESCRIPTION, "bond 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), ; private final Supplier supplier; private String key; diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java b/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java index d9ce1f5..9238222 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java @@ -16,19 +16,21 @@ import java.util.concurrent.CompletableFuture; public class ModDataGeneratorHandler { @SubscribeEvent public static void genData(GatherDataEvent event) { - CompletableFuture HolderFolder = event.getLookupProvider(); + CompletableFuture holderFolder = event.getLookupProvider(); ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); /*Language Provider ENGLISH CHINESE(SIM/TRA)*/ - addLanguage(event, LanguageEnum.English, "en_us"); - addLanguage(event, LanguageEnum.SimpleChinese, "zh_cn"); - addLanguage(event, LanguageEnum.TraditionalChinese, "zh_tw"); - addLanguage(event, LanguageEnum.LiteraryChinese, "lzh"); + addLanguage(event, LanguageEnum.English); + addLanguage(event, LanguageEnum.SimpleChinese); + addLanguage(event, LanguageEnum.TraditionalChinese); + addLanguage(event, LanguageEnum.LiteraryChinese); + ModDataPackBuiltInEntriesProvider(event, holderFolder); ItemModelGenerator(event, existingFileHelper); - RecipeGenerator(event, HolderFolder); + RecipeGenerator(event, holderFolder); ModTagsProvider(event, event.getLookupProvider(), existingFileHelper); + ModAdvancementProvider(event, holderFolder, existingFileHelper); } - private static void addLanguage(GatherDataEvent event, LanguageEnum language, String lan_regex){ + private static void addLanguage(GatherDataEvent event, LanguageEnum language){ event.getGenerator().addProvider( event.includeClient(), (DataProvider.Factory) pOutput -> new ModLanguageProvider(pOutput, LeashedPlayer.MOD_ID, language) @@ -58,4 +60,16 @@ public class ModDataGeneratorHandler { new ModItemTagProvider(pOutput, completableFuture, modBlockTagProvider.contentsGetter(), helper) ); } + + private static void ModDataPackBuiltInEntriesProvider(GatherDataEvent event, CompletableFuture future) { + event.getGenerator().addProvider( + event.includeServer(), + (DataProvider.Factory) pOutput -> new ModDataPackBuiltInEntriesProvider(pOutput, future) + ); + }private static void ModAdvancementProvider(GatherDataEvent event, CompletableFuture pLookUpProvider, ExistingFileHelper helper) { + event.getGenerator().addProvider( + event.includeServer(), + (DataProvider.Factory) pOutput -> new ModAdvancementProvider(pOutput, pLookUpProvider, helper)); + } + } diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java new file mode 100644 index 0000000..6129df6 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/generator/ModAdvancementGenerator.java @@ -0,0 +1,112 @@ +package com.r3944realms.leashedplayer.datagen.generator; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import com.r3944realms.leashedplayer.content.criteriaTriggers.LeashPlayerTrigger; +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.core.HolderLookup; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Items; +import net.neoforged.neoforge.common.data.AdvancementProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Consumer; + + +public class ModAdvancementGenerator implements AdvancementProvider.AdvancementGenerator { + private final ResourceLocation ADV_BG = ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "textures/gui/advancements/backgrounds/leashed_player.png"); + @Override + public void generate(HolderLookup.@NotNull Provider registries, @NotNull Consumer saver, @NotNull ExistingFileHelper existingFileHelper) { + AdvancementHolder hasLeashRopeItem = Advancement.Builder.advancement().display( + Items.LEAD, + Component.translatable(ModAdvancementKey.LEASH_START.getNameKey()), + Component.translatable(ModAdvancementKey.LEASH_START.getDescKey()), + ADV_BG, + AdvancementType.TASK, + true, + false, + true + ).addCriterion("has_leash_rope_item", InventoryChangeTrigger.TriggerInstance.hasItems(Items.LEAD)) + .save(saver, ModAdvancementKey.LEASH_START.getNameWithNameSpace()); + + AdvancementHolder hasLeashRopeArrow = Advancement.Builder.advancement().display( + ModItemRegister.LEASH_ROPE_ARROW.get(), + Component.translatable(ModAdvancementKey.LEASH_ARROW.getNameKey()), + Component.translatable(ModAdvancementKey.LEASHED_FRIEND.getDescKey()), + null, + AdvancementType.TASK, + true, + false, + true + ).addCriterion("has_leash_rope_item", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.LEASH_ROPE_ARROW.get())) + .parent(hasLeashRopeItem) + .save(saver, ModAdvancementKey.LEASH_ARROW.getNameWithNameSpace()); + + AdvancementHolder leashedMySelf = Advancement.Builder.advancement().display( + Items.PLAYER_HEAD, + Component.translatable(ModAdvancementKey.LEASHED_SELF.getNameKey()), + Component.translatable(ModAdvancementKey.LEASHED_SELF.getDescKey()), + null, + AdvancementType.TASK, + true, + true, + true + ).addCriterion("leash_self", LeashPlayerTrigger.TriggerInstance.LeashPlayer( + EntityPredicate.Builder.entity().entityType(EntityTypePredicate.of(EntityType.LEASH_KNOT)) + )) + .parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASHED_SELF.getNameWithNameSpace()); + AdvancementHolder followLeashRopeArrow = Advancement.Builder.advancement().display( + ModItemRegister.LEASH_ROPE_ARROW.get(), + Component.translatable(ModAdvancementKey.FOLLOW_LEASH_ARROW.getNameKey()), + Component.translatable(ModAdvancementKey.FOLLOW_LEASH_ARROW.getDescKey()), + null, + AdvancementType.TASK, + true, + false, + true + ).addCriterion("leash_arrow", LeashPlayerTrigger.TriggerInstance.LeashPlayer( + EntityPredicate.Builder.entity().entityType(EntityTypePredicate.of(ModEntityRegister.LEASH_ROPE_ARROW.get())) + )) + .parent(hasLeashRopeArrow) + .save(saver, ModAdvancementKey.FOLLOW_LEASH_ARROW.getNameWithNameSpace()); + AdvancementHolder dogRunPlayer = Advancement.Builder.advancement().display( + Items.BONE, + Component.translatable(ModAdvancementKey.DOG_RUNNING_PLAYER.getNameKey()), + Component.translatable(ModAdvancementKey.DOG_RUNNING_PLAYER.getDescKey()), + null, + AdvancementType.CHALLENGE, + true, + true, + true + ).addCriterion("leash_by_wo_do", LeashPlayerTrigger.TriggerInstance.LeashPlayer( + EntityPredicate.Builder.entity().entityType(EntityTypePredicate.of(EntityType.WOLF)) + )) + .parent(hasLeashRopeArrow).save(saver, ModAdvancementKey.DOG_RUNNING_PLAYER.getNameWithNameSpace()); + + AdvancementHolder leashedOther = Advancement.Builder.advancement().display( + Items.LEAD, + Component.translatable(ModAdvancementKey.LEASHED_FRIEND.getNameKey()), + Component.translatable(ModAdvancementKey.LEASHED_FRIEND.getDescKey()), + null, + AdvancementType.TASK, + true, + true, + true + ).addCriterion("leash_other_player", + LeashPlayerTrigger.TriggerInstance.LeashPlayer( + EntityPredicate.Builder.entity().entityType(EntityTypePredicate.of(EntityType.PLAYER)) + ) + ) + .parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASHED_FRIEND.getNameWithNameSpace()); + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModAdvancementProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModAdvancementProvider.java new file mode 100644 index 0000000..2068616 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModAdvancementProvider.java @@ -0,0 +1,24 @@ +package com.r3944realms.leashedplayer.datagen.provider; + +import com.r3944realms.leashedplayer.datagen.generator.ModAdvancementGenerator; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.AdvancementProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class ModAdvancementProvider extends AdvancementProvider { + /** + * Constructs an advancement provider using the generators to write the + * advancements to a file. + * + * @param output the target directory of the data generator + * @param registries a future of a lookup for registries and their objects + * @param existingFileHelper a helper used to find whether a file exists + */ + public ModAdvancementProvider(PackOutput output, CompletableFuture registries, ExistingFileHelper existingFileHelper) { + super(output, registries, existingFileHelper, List.of(new ModAdvancementGenerator())); + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java new file mode 100644 index 0000000..37d568a --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java @@ -0,0 +1,19 @@ +package com.r3944realms.leashedplayer.datagen.provider; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +public class ModDataPackBuiltInEntriesProvider extends DatapackBuiltinEntriesProvider { + public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + ; + public ModDataPackBuiltInEntriesProvider(PackOutput output, CompletableFuture registries) { + super(output, registries, BUILDER, Set.of(LeashedPlayer.MOD_ID)); + CompletableFuture registryProvider = getRegistryProvider(); + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/both/MixinPlayer.java b/src/main/java/com/r3944realms/leashedplayer/mixin/both/MixinPlayer.java index 9d4fc19..7a8c294 100644 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/both/MixinPlayer.java +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/both/MixinPlayer.java @@ -158,7 +158,7 @@ public abstract class MixinPlayer extends LivingEntity implements PlayerLeashabl float leashLengthSelf = iEntityExtension.getLeashLength(); leashLength = leashLengthSelf > LeashCommand.MIN_VALUE ? leashLengthSelf : LeashCommand.MIN_VALUE; if (entity != null) { - float breakDistanceTime = (entity instanceof LeashRopeArrow) ? LeashedPlayer.M1() * LeashedPlayer.M2() : LeashedPlayer.M1(); + double breakDistanceTime = (entity instanceof LeashRopeArrow) ? LeashedPlayer.M1() * LeashedPlayer.M2() : LeashedPlayer.M1(); if(!isAlive() || !entity.isAlive() ||( distanceTo(entity) > Math.max(leashLength * breakDistanceTime, LeashCommand.MIN_VALUE * breakDistanceTime) && keepLeashTick == 0)){ //玩家死亡 或 持有者不存在 或 距离大于设定值的 breakDistanceTime 倍且keepTick <=0(长度的 breakDistanceTime 倍若低于 LeashCommand.MIN_VALUE 格,则选 LeashCommand.MIN_VALUE 格) , // 则取消拴绳关系,并掉落拴绳 diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinLevelRenderer.java b/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinLevelRenderer.java index 4cbb440..9c7292f 100644 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinLevelRenderer.java +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinLevelRenderer.java @@ -93,7 +93,7 @@ public abstract class MixinLevelRenderer { if (playerByUUID != null) { playerRendererExtension.renderLeashForCamera(pCamera, partialTickTime, poseStack, multibuffersource$buffersource, playerByUUID); } else { - float MaxLeashLength = ((ILivingEntityExtension) abstractClientPlayer).getLeashLength() * LeashedPlayer.M1() * LeashedPlayer.M2(); + double MaxLeashLength = ((ILivingEntityExtension) abstractClientPlayer).getLeashLength() * LeashedPlayer.M1() * LeashedPlayer.M2(); List entities = level.getEntities( null, new AABB( diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinPlayerRenderer.java b/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinPlayerRenderer.java index 18947a6..4a8d989 100644 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinPlayerRenderer.java +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/client/MixinPlayerRenderer.java @@ -63,8 +63,8 @@ public abstract class MixinPlayerRenderer extends LivingEntityRenderer entities = level.getEntities( null, new AABB( diff --git a/src/main/java/com/r3944realms/leashedplayer/modInterface/PlayerLeashable.java b/src/main/java/com/r3944realms/leashedplayer/modInterface/PlayerLeashable.java index 9e154be..3542e7d 100644 --- a/src/main/java/com/r3944realms/leashedplayer/modInterface/PlayerLeashable.java +++ b/src/main/java/com/r3944realms/leashedplayer/modInterface/PlayerLeashable.java @@ -1,5 +1,6 @@ package com.r3944realms.leashedplayer.modInterface; +import com.r3944realms.leashedplayer.content.criteriaTriggers.ModCriteriaTriggers; import net.minecraft.core.BlockPos; import net.minecraft.network.protocol.game.ClientboundSetEntityLinkPacket; import net.minecraft.server.level.ServerLevel; @@ -40,6 +41,9 @@ public interface PlayerLeashable extends Leashable { */ default void setLeashedTo(@NotNull Entity pLeashHolder, boolean pBroadcastPacket) { setLeashedTo((Entity & Leashable)this, pLeashHolder, pBroadcastPacket); + if(this instanceof ServerPlayer){ + ModCriteriaTriggers.LEASH_PLAYER_TRIGGER.get().trigger((ServerPlayer) this, pLeashHolder); + } } static void setLeashedTo(E pEntity, Entity pLeashHolder, boolean pBroadcastPacket) { diff --git a/src/main/resources/assets/leashedplayer/textures/gui/advancements/backgrounds/leashed_player.png b/src/main/resources/assets/leashedplayer/textures/gui/advancements/backgrounds/leashed_player.png new file mode 100644 index 0000000..43dac53 Binary files /dev/null and b/src/main/resources/assets/leashedplayer/textures/gui/advancements/backgrounds/leashed_player.png differ