commit
3918fdb763
|
|
@ -1,4 +1,4 @@
|
|||
# 版本 0.0.3.1-Alpha-2 提前介绍 【注意:本解釋簡繁混寫,因爲趕時間,所以並不怎麽規範,請諒解】
|
||||
# 版本 0.0.3.4 提前介绍c[最终版本对于0.0.4] 【注意:本解釋簡繁混寫,因爲趕時間,所以並不怎麽規範,請諒解】
|
||||
## 简介
|
||||
现在开始你可以用拴绳拴住玩家,也可以拴住自己了,不如尝试拴住彼此来通关我的世界吧(
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
// 1.21.1 2024-09-08T14:20:00.5319153 Registries
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?",
|
||||
|
|
|
|||
|
|
@ -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": "带有拴绳的箭矢?",
|
||||
|
|
|
|||
|
|
@ -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": "帶有拴繩的箭矢?",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,29 +8,29 @@ public class LeashPlayerCommonConfig {
|
|||
public static final ModConfigSpec.ConfigValue<String> LeashedPlayerModCommandPrefix;
|
||||
public static final ModConfigSpec.BooleanValue EnableLeashPlayerCommandPrefix;
|
||||
public static ModConfigSpec.IntValue MinimumLeashLengthCanBeSet, MaximumLeashLengthCanBeSet, TheLeashArrowMaxLifeTime;
|
||||
public static ModConfigSpec.ConfigValue<Float> 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();
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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<LeashPlayerTrigger.TriggerInstance> {
|
||||
|
||||
@Override
|
||||
public @NotNull Codec<TriggerInstance> codec() {
|
||||
return TriggerInstance.CODEC;
|
||||
}
|
||||
public void trigger(ServerPlayer pPlayer, Entity pHolderEntity) {
|
||||
this.trigger(pPlayer, pl -> pl.matches(pPlayer, pHolderEntity));
|
||||
}
|
||||
|
||||
public record TriggerInstance(Optional<ContextAwarePredicate> player, Optional<EntityPredicate> holder) implements SimpleCriterionTrigger.SimpleInstance {
|
||||
public static final Codec<TriggerInstance> 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<TriggerInstance> LeashSelf() {
|
||||
// return ModCriteriaTriggers.LEASH_PLAYER_TRIGGER.get().createCriterion(new TriggerInstance(Optional.empty(), Optional.empty()));
|
||||
// }
|
||||
public static Criterion<TriggerInstance> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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<CriterionTrigger<?>> TRIGGERS = DeferredRegister.create(Registries.TRIGGER_TYPE, LeashedPlayer.MOD_ID);
|
||||
public static final DeferredHolder<CriterionTrigger<?>, LeashPlayerTrigger> LEASH_PLAYER_TRIGGER =
|
||||
TRIGGERS.register("leash_player", LeashPlayerTrigger::new);
|
||||
public static void register(IEventBus eventBus) {
|
||||
TRIGGERS.register(eventBus);
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -16,19 +16,21 @@ import java.util.concurrent.CompletableFuture;
|
|||
public class ModDataGeneratorHandler {
|
||||
@SubscribeEvent
|
||||
public static void genData(GatherDataEvent event) {
|
||||
CompletableFuture<HolderLookup.Provider> HolderFolder = event.getLookupProvider();
|
||||
CompletableFuture<HolderLookup.Provider> 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<ModLanguageProvider>) 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<HolderLookup.Provider> future) {
|
||||
event.getGenerator().addProvider(
|
||||
event.includeServer(),
|
||||
(DataProvider.Factory<ModDataPackBuiltInEntriesProvider>) pOutput -> new ModDataPackBuiltInEntriesProvider(pOutput, future)
|
||||
);
|
||||
}private static void ModAdvancementProvider(GatherDataEvent event, CompletableFuture<HolderLookup.Provider> pLookUpProvider, ExistingFileHelper helper) {
|
||||
event.getGenerator().addProvider(
|
||||
event.includeServer(),
|
||||
(DataProvider.Factory<ModAdvancementProvider>) pOutput -> new ModAdvancementProvider(pOutput, pLookUpProvider, helper));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AdvancementHolder> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<HolderLookup.Provider> registries, ExistingFileHelper existingFileHelper) {
|
||||
super(output, registries, existingFileHelper, List.of(new ModAdvancementGenerator()));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<HolderLookup.Provider> registries) {
|
||||
super(output, registries, BUILDER, Set.of(LeashedPlayer.MOD_ID));
|
||||
CompletableFuture<HolderLookup.Provider> registryProvider = getRegistryProvider();
|
||||
}
|
||||
}
|
||||
|
|
@ -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 格) ,
|
||||
// 则取消拴绳关系,并掉落拴绳
|
||||
|
|
|
|||
|
|
@ -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<Entity> entities = level.getEntities(
|
||||
null,
|
||||
new AABB(
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ public abstract class MixinPlayerRenderer extends LivingEntityRenderer<AbstractC
|
|||
if (playerByUUID != null) {
|
||||
renderLeash(pEntity, pPartialTicks, pPoseStack, pBuffer, playerByUUID);
|
||||
} else {
|
||||
float breakDistanceTime = (leashDataFromEntityData.leashHolder instanceof LeashRopeArrow) ? LeashedPlayer.M1() * LeashedPlayer.M2() : LeashedPlayer.M1();
|
||||
float MaxLeashLength = ((ILivingEntityExtension) pEntity).getLeashLength() * breakDistanceTime;
|
||||
double breakDistanceTime = (leashDataFromEntityData.leashHolder instanceof LeashRopeArrow) ? LeashedPlayer.M1() * LeashedPlayer.M2() : LeashedPlayer.M1();
|
||||
double MaxLeashLength = ((ILivingEntityExtension) pEntity).getLeashLength() * breakDistanceTime;
|
||||
List<Entity> entities = level.getEntities(
|
||||
null,
|
||||
new AABB(
|
||||
|
|
|
|||
|
|
@ -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 <E extends Entity & Leashable> void setLeashedTo(E pEntity, Entity pLeashHolder, boolean pBroadcastPacket) {
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 227 B |
Loading…
Reference in New Issue
Block a user