2024/11/26
联动内容#3 增加一些提示内容 添加了按键
This commit is contained in:
parent
52f30a4275
commit
800a60ab97
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21 2024-11-26T17:09:48.5933988 Languages: en_us for mod: leashedplayer
|
||||
57ac9ce831572aed1cf8738231d163e08de00da8 assets/leashedplayer/lang/en_us.json
|
||||
// 1.21 2024-11-27T00:15:38.1934553 Languages: en_us for mod: leashedplayer
|
||||
d32d19599105d6c5575757a7f0344f066445bd15 assets/leashedplayer/lang/en_us.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21 2024-11-26T17:09:48.5933988 Languages: zh_cn for mod: leashedplayer
|
||||
3920364b756e9b539f175e6ac73a363020a232dd assets/leashedplayer/lang/zh_cn.json
|
||||
// 1.21 2024-11-27T00:15:38.1929375 Languages: zh_cn for mod: leashedplayer
|
||||
be8f599c80c4ea7e7f6de238f6acf213fe9827d2 assets/leashedplayer/lang/zh_cn.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21 2024-11-26T17:09:48.5933988 Languages: zh_tw for mod: leashedplayer
|
||||
08058702caab57d64d479cf22d4b5c1e10c4110d assets/leashedplayer/lang/zh_tw.json
|
||||
// 1.21 2024-11-27T00:15:38.1846441 Languages: zh_tw for mod: leashedplayer
|
||||
73006b0556ae8066c61837a9ff35a1b50126f510 assets/leashedplayer/lang/zh_tw.json
|
||||
|
|
|
|||
|
|
@ -99,6 +99,11 @@
|
|||
"leashedplayer.lead_breaker.item.desc": "§7can break the link of leash",
|
||||
"leashedplayer.lead_breaker.item.use_fai": "§cFailed to break §f%1$s§c 's Leashed Link to §f%2$s",
|
||||
"leashedplayer.lead_breaker.item.use_suf": "§aSuccessfully break §f%1$s§a 's Leashed Link to §f%2$s ",
|
||||
"leashedplayer.leash_rope.length.decrease": "§Decrease the §f%s §cLength of Leash Rope§7(§bLength§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.decrease.self": "§cDecrease the Length of Leash Rope§7(§bLength§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.failed": "§cFailed",
|
||||
"leashedplayer.leash_rope.length.increase": "§aIncrease the §f%s §aLength of Leash Rope§7(§bLength§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.increase.self": "§aIncrease the Length of Leash Rope§7(§bLength§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§aPush §f§lShift§a to pick up quickly",
|
||||
"multiplayer.disconnect.addiction": "You've triggered the anti-addiction mechanic, and you'll come back when you rest!",
|
||||
"painting.leashedplayer.group_photo.author": "§9Leisure §4Time §eDock§r",
|
||||
|
|
|
|||
|
|
@ -99,6 +99,11 @@
|
|||
"leashedplayer.lead_breaker.item.desc": "§7可以破坏拴绳链接",
|
||||
"leashedplayer.lead_breaker.item.use_fai": "§c无法剪断§f%2$s§c对§f%1$s§c拴绳链接",
|
||||
"leashedplayer.lead_breaker.item.use_suf": "§a成功剪断§f%2$s§a对§f%1$s§a拴绳链接",
|
||||
"leashedplayer.leash_rope.length.decrease": "§c减少§f%s的拴绳长度§c§7(§b长度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.decrease.self": "§c减少拴绳长度§c§7(§b长度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.failed": "§c失败",
|
||||
"leashedplayer.leash_rope.length.increase": "§a增加§f%s的拴绳长度§a§7(§b长度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.increase.self": "§a增加拴绳长度§a§7(§b长度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§a按下§f§lShift键§a以加快拾取",
|
||||
"multiplayer.disconnect.addiction": "你触发了防沉迷机制,休息会再来吧!",
|
||||
"painting.leashedplayer.group_photo.author": "§9闲趣§4时§e坞§r",
|
||||
|
|
|
|||
|
|
@ -99,6 +99,11 @@
|
|||
"leashedplayer.lead_breaker.item.desc": "§7可以破壞拴繩鏈接",
|
||||
"leashedplayer.lead_breaker.item.use_fai": "§c未能剪斷§f%2$s§c對§f%1$s§c拴繩鏈接",
|
||||
"leashedplayer.lead_breaker.item.use_suf": "§a成功剪斷§f%2$s§a對§f%1$s§a拴繩鏈接",
|
||||
"leashedplayer.leash_rope.length.decrease": "§c減少§f%s§c的拴繩長度§7(§長度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.decrease.self": "§c減少拴繩長度§7(§長度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.failed": "§c失敗",
|
||||
"leashedplayer.leash_rope.length.increase": "§a增加§f%s§a的拴繩長度§7(§長度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope.length.increase.self": "§a增加拴繩長度§7(§長度§7:§e%d§7)",
|
||||
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§a按下§f§lShift鍵§a以加速拾取",
|
||||
"multiplayer.disconnect.addiction": "你觸發了防沉迷機制,休息會再來吧!",
|
||||
"painting.leashedplayer.group_photo.author": "§9閑趣§4時§e塢§r",
|
||||
|
|
|
|||
|
|
@ -9,6 +9,11 @@ import com.r3944realms.leashedplayer.content.gamerules.Server.OpenTOPNeededModeW
|
|||
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.type.ILeashRopeArrow;
|
||||
import com.r3944realms.leashedplayer.content.items.type.INestleRopeArrow;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import com.r3944realms.leashedplayer.network.server.Code;
|
||||
import com.r3944realms.leashedplayer.network.server.DecreaseLeashRopeLength;
|
||||
import com.r3944realms.leashedplayer.network.server.IncreaseLeashRopeLength;
|
||||
import com.r3944realms.leashedplayer.utils.Util;
|
||||
import mcjty.theoneprobe.config.Config;
|
||||
import mcjty.theoneprobe.gui.GuiNote;
|
||||
import net.minecraft.ChatFormatting;
|
||||
|
|
@ -16,6 +21,7 @@ import net.minecraft.client.Minecraft;
|
|||
import net.minecraft.client.gui.screens.ChatScreen;
|
||||
import net.minecraft.client.gui.screens.DisconnectedScreen;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
||||
import net.minecraft.client.renderer.item.ItemProperties;
|
||||
import net.minecraft.client.resources.PlayerSkin;
|
||||
|
|
@ -24,15 +30,22 @@ import net.minecraft.network.DisconnectionDetails;
|
|||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.FastColor;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
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.PotionContents;
|
||||
import net.minecraft.world.item.component.ChargedProjectiles;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModList;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.neoforge.client.event.*;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public abstract class ClientEventHandler {
|
||||
|
|
@ -79,10 +92,44 @@ public abstract class ClientEventHandler {
|
|||
}
|
||||
@SubscribeEvent
|
||||
public static void onKetBoardInput(InputEvent.Key event) {
|
||||
if(ModKeyMapping.KEY_APPLY_TALKAREA_PREFERENCE.isDown()) {
|
||||
assert Minecraft.getInstance().player != null;
|
||||
Minecraft minecraft = Minecraft.getInstance();
|
||||
LocalPlayer player = minecraft.player;
|
||||
assert player != null;
|
||||
if (ModKeyMapping.KEY_APPLY_TALKAREA_PREFERENCE.isDown()) {
|
||||
String prefix = (Command.SHOULD_USE_PREFIX ? Command.PREFIX : "") + " ";
|
||||
Minecraft.getInstance().player.connection.sendCommand(prefix + "talkArea usePreference");
|
||||
player.connection.sendCommand(prefix + "talkArea usePreference");
|
||||
}
|
||||
if (ModKeyMapping.KEY_ADD_LEASH_LENGTH.isDown()) {
|
||||
PlayerLeashable playerLeashable = (PlayerLeashable) player;
|
||||
if (playerLeashable.getLeashDataFromEntityData() == null) {
|
||||
assert minecraft.level != null;
|
||||
List<HitResult> refLookAtEntityHitResult = Util.getRefLookAtEntityHitResult(player, minecraft.level, 32, entity -> entity instanceof LivingEntity);
|
||||
Entity theNearestEntityFromHitResultList = Util.getTheNearestEntityFromHitResultList(player, refLookAtEntityHitResult);
|
||||
if(theNearestEntityFromHitResultList != null) {
|
||||
if (theNearestEntityFromHitResultList instanceof Player refPlayer) {
|
||||
PacketDistributor.sendToServer(new IncreaseLeashRopeLength(Code.OTHER_ST, refPlayer.getStringUUID()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerLeashable.getLeashDataFromEntityData() != null) {
|
||||
PacketDistributor.sendToServer(new IncreaseLeashRopeLength(Code.SELF, player.getStringUUID()));
|
||||
}
|
||||
}
|
||||
if (ModKeyMapping.KEY_SUB_LEASH_LENGTH.isDown()) {
|
||||
PlayerLeashable playerLeashable = (PlayerLeashable) player;
|
||||
if (playerLeashable.getLeashDataFromEntityData() == null) {
|
||||
assert minecraft.level != null;
|
||||
List<HitResult> refLookAtEntityHitResult = Util.getRefLookAtEntityHitResult(player, minecraft.level, 32, entity -> entity instanceof LivingEntity);
|
||||
Entity theNearestEntityFromHitResultList = Util.getTheNearestEntityFromHitResultList(player, refLookAtEntityHitResult);
|
||||
if(theNearestEntityFromHitResultList != null) {
|
||||
if (theNearestEntityFromHitResultList instanceof Player refPlayer) {
|
||||
PacketDistributor.sendToServer(new DecreaseLeashRopeLength(Code.OTHER_ST, refPlayer.getStringUUID()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerLeashable.getLeashDataFromEntityData() != null) {
|
||||
PacketDistributor.sendToServer(new DecreaseLeashRopeLength(Code.SELF, player.getStringUUID()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -152,5 +199,6 @@ public abstract class ClientEventHandler {
|
|||
ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get()
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ 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.common.NeoForge;
|
||||
import net.neoforged.neoforge.event.AnvilUpdateEvent;
|
||||
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
|
||||
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ public class LeashedPlayer {
|
|||
|
||||
private static Double M1;//拴繩掉落距離倍基數
|
||||
private static Double M2;//繩箭拴繩掉落距離倍基數
|
||||
private static Integer M3; //拴绳最小长度
|
||||
private static Integer M4; //拴绳最大长度
|
||||
public LeashedPlayer(IEventBus event) {
|
||||
ModItemRegister.register(event);
|
||||
ModPaintingsRegister.register(event);
|
||||
|
|
@ -56,6 +58,18 @@ public class LeashedPlayer {
|
|||
}
|
||||
return M2;
|
||||
}
|
||||
public static Integer M3() {
|
||||
if(M3 == null) {
|
||||
M3 = LeashPlayerCommonConfig.MinimumLeashLengthCanBeSet.get();
|
||||
}
|
||||
return M3;
|
||||
}
|
||||
public static Integer M4() {
|
||||
if(M4 == null) {
|
||||
M4 = LeashPlayerCommonConfig.MaximumLeashLengthCanBeSet.get();
|
||||
}
|
||||
return M4;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ import com.r3944realms.leashedplayer.content.items.type.SpectralLeashRopeArrowIt
|
|||
import com.r3944realms.leashedplayer.content.items.type.TippedLeashRopeArrow;
|
||||
import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister;
|
||||
import com.r3944realms.leashedplayer.datagen.provider.attributes.ModPaintingVariants;
|
||||
import com.r3944realms.leashedplayer.network.server.Code;
|
||||
import com.r3944realms.leashedplayer.network.server.DecreaseLeashRopeLength;
|
||||
import com.r3944realms.leashedplayer.network.server.IncreaseLeashRopeLength;
|
||||
import com.r3944realms.leashedplayer.utils.Enum.LanguageEnum;
|
||||
import com.r3944realms.leashedplayer.utils.Enum.ModPartEnum;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
|
@ -99,6 +102,11 @@ public enum ModLangKeyValue {
|
|||
MESSAGE_LEASH_BREAKER_USE_SUF(LeadBreakerItem.MESSAGE_USE_SUF, ModPartEnum.MESSAGE, "§aSuccessfully break §f%1$s§a 's Leashed Link to §f%2$s ", "§a成功剪断§f%2$s§a对§f%1$s§a拴绳链接", "§a成功剪斷§f%2$s§a對§f%1$s§a拴繩鏈接", false),
|
||||
MESSAGE_LEASH_BREAKER_USE_FAI(LeadBreakerItem.MESSAGE_USE_FAI, ModPartEnum.MESSAGE, "§cFailed to break §f%1$s§c 's Leashed Link to §f%2$s", "§c无法剪断§f%2$s§c对§f%1$s§c拴绳链接", "§c未能剪斷§f%2$s§c對§f%1$s§c拴繩鏈接", false),
|
||||
MESSAGE_LEASH_NOT_SUPPORT_TO_NOT_PLAYER_ENTITY(ModKeyMapping.NOT_SUPPORT_TO_NOT_PLAYER_ENTITY, ModPartEnum.MESSAGE, "Only work on Players", "只在玩家身上有效", "僅對玩家有效", false),
|
||||
MESSAGE_LEASH_ADD_LEASH_LENGTH(IncreaseLeashRopeLength.INCREASE_LEASH_ROPE_LENGTH, ModPartEnum.MESSAGE, "§aIncrease the §f%s §aLength of Leash Rope§7(§bLength§7:§e%d§7)", "§a增加§f%s的拴绳长度§a§7(§b长度§7:§e%d§7)", "§a增加§f%s§a的拴繩長度§7(§長度§7:§e%d§7)", false),
|
||||
MESSAGE_LEASH_SUB_LEASH_LENGTH(DecreaseLeashRopeLength.DECREASE_LEASH_ROPE_LENGTH, ModPartEnum.MESSAGE, "§Decrease the §f%s §cLength of Leash Rope§7(§bLength§7:§e%d§7)", "§c减少§f%s的拴绳长度§c§7(§b长度§7:§e%d§7)", "§c減少§f%s§c的拴繩長度§7(§長度§7:§e%d§7)", false),
|
||||
MESSAGE_LEASH_ADD_SELF_LEASH_LENGTH(IncreaseLeashRopeLength.INCREASE_SELF_LEASH_ROPE_LENGTH, ModPartEnum.MESSAGE, "§aIncrease the Length of Leash Rope§7(§bLength§7:§e%d§7)", "§a增加拴绳长度§a§7(§b长度§7:§e%d§7)", "§a增加拴繩長度§7(§長度§7:§e%d§7)", false),
|
||||
MESSAGE_LEASH_SUB_SELF_LEASH_LENGTH(DecreaseLeashRopeLength.DECREASE_SELF_LEASH_ROPE_LENGTH, ModPartEnum.MESSAGE, "§cDecrease the Length of Leash Rope§7(§bLength§7:§e%d§7)", "§c减少拴绳长度§c§7(§b长度§7:§e%d§7)", "§c減少拴繩長度§7(§長度§7:§e%d§7)", false),
|
||||
MESSAGE_LEASH_FAILED_SET_LENGTH(Code.LEASH_LENGTH_FAILED_SET, ModPartEnum.MESSAGE, "§cFailed", "§c失败", "§c失敗", false),
|
||||
//GAME_RULE_NAME
|
||||
DEFAULT_AREA_TALK_NAME(DefaultTalkArea.NAME_KEY, ModPartEnum.NAME, "Default Area Talk", "默认聊天区域可见半径", "默認聊天區域可見半徑",false),
|
||||
TELEPORT_WITH_LEASHED_PLAYERS_NAME(TeleportWithLeashedPlayers.NAME_KEY, ModPartEnum.NAME, "Teleport leashed player with player holder", "被拴玩家随玩家持有者传送", "被拴玩家随玩家持有者傳送" ,false),
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ import java.util.Objects;
|
|||
import java.util.function.Consumer;
|
||||
|
||||
@Mixin(Player.class)
|
||||
public abstract class MixinPlayer extends LivingEntity implements PlayerLeashable, ILivingEntityExtension {
|
||||
public abstract class MixinPlayer extends LivingEntity implements PlayerLeashable, ILivingEntityExtension {
|
||||
|
||||
@Unique
|
||||
protected int Pl$LeashKeepTick;//保存状态,当超过断裂绳长时若LeashKeepTick大于0,则不断裂
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.r3944realms.leashedplayer.network;
|
|||
import com.r3944realms.leashedplayer.LeashedPlayer;
|
||||
import com.r3944realms.leashedplayer.network.client.BooleanGameRuleValueChangeData;
|
||||
import com.r3944realms.leashedplayer.network.client.UpdatePlayerMovement;
|
||||
import com.r3944realms.leashedplayer.network.server.DecreaseLeashRopeLength;
|
||||
import com.r3944realms.leashedplayer.network.server.IncreaseLeashRopeLength;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
|
||||
|
|
@ -24,6 +26,16 @@ public class LeashedPlayerNetwork {
|
|||
BooleanGameRuleValueChangeData.STREAM_CODEC,
|
||||
BooleanGameRuleValueChangeData::handle
|
||||
);
|
||||
registrar.playToServer(
|
||||
IncreaseLeashRopeLength.TYPE,
|
||||
IncreaseLeashRopeLength.STREAM_CODEC,
|
||||
IncreaseLeashRopeLength::handle
|
||||
);
|
||||
registrar.playToServer(
|
||||
DecreaseLeashRopeLength.TYPE,
|
||||
DecreaseLeashRopeLength.STREAM_CODEC,
|
||||
DecreaseLeashRopeLength::handle
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
package com.r3944realms.leashedplayer.network.server;
|
||||
|
||||
public enum Code {
|
||||
OTHER_ST,
|
||||
OTHER_WE,
|
||||
SELF;
|
||||
public static final String LEASH_LENGTH_FAILED_SET = "leashedplayer.leash_rope.length.failed";
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package com.r3944realms.leashedplayer.network.server;
|
||||
|
||||
import com.r3944realms.leashedplayer.LeashedPlayer;
|
||||
import com.r3944realms.leashedplayer.modInterface.ILivingEntityExtension;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public record DecreaseLeashRopeLength(Code code, String playerUUID) implements CustomPacketPayload {
|
||||
public static final CustomPacketPayload.Type<DecreaseLeashRopeLength> TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID,"sub_leash_rope_length"));
|
||||
public static final StreamCodec<FriendlyByteBuf, DecreaseLeashRopeLength> STREAM_CODEC =
|
||||
StreamCodec.composite(
|
||||
NeoForgeStreamCodecs.enumCodec(Code.class), DecreaseLeashRopeLength::code,
|
||||
ByteBufCodecs.STRING_UTF8, DecreaseLeashRopeLength::playerUUID,
|
||||
DecreaseLeashRopeLength::new
|
||||
);
|
||||
public static final String DECREASE_LEASH_ROPE_LENGTH = "leashedplayer.leash_rope.length.decrease",
|
||||
DECREASE_SELF_LEASH_ROPE_LENGTH = DECREASE_LEASH_ROPE_LENGTH + ".self";
|
||||
|
||||
public void handle(IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
Player player = context.player();
|
||||
ServerLevel level = (ServerLevel) player.level();
|
||||
Player playerByUUID = level.getPlayerByUUID(UUID.fromString(playerUUID));
|
||||
if (playerByUUID != null) {
|
||||
ILivingEntityExtension entityExtension = (ILivingEntityExtension) playerByUUID;
|
||||
Entity leashDataEntity = PlayerLeashable.getLeashDataEntity((ServerPlayer) playerByUUID, level);
|
||||
if ((leashDataEntity != null && code == Code.OTHER_ST && leashDataEntity == player ) || (leashDataEntity != null && code == Code.OTHER_ST)) {
|
||||
float newValue = Math.max(Math.min(entityExtension.getLeashLength() - 1, LeashedPlayer.M4()), LeashedPlayer.M3());
|
||||
entityExtension.setLeashLength(newValue);
|
||||
((ServerPlayer) playerByUUID).sendSystemMessage(Component.translatable(DECREASE_LEASH_ROPE_LENGTH, playerByUUID.getDisplayName(), newValue), true);
|
||||
} else if (code == Code.SELF) {
|
||||
float newValue = Math.max(Math.min(entityExtension.getLeashLength() - 1, LeashedPlayer.M4()), LeashedPlayer.M3());
|
||||
entityExtension.setLeashLength(newValue);
|
||||
((ServerPlayer) playerByUUID).sendSystemMessage(Component.translatable(DECREASE_SELF_LEASH_ROPE_LENGTH, newValue), true);
|
||||
} else {
|
||||
((ServerPlayer) playerByUUID).sendSystemMessage(Component.translatable(Code.LEASH_LENGTH_FAILED_SET), true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@Override
|
||||
public @NotNull Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package com.r3944realms.leashedplayer.network.server;
|
||||
|
||||
import com.r3944realms.leashedplayer.LeashedPlayer;
|
||||
import com.r3944realms.leashedplayer.modInterface.ILivingEntityExtension;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public record IncreaseLeashRopeLength(Code code, String playerUUID) implements CustomPacketPayload {
|
||||
public static final CustomPacketPayload.Type<IncreaseLeashRopeLength> TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID,"add_leash_rope_length"));
|
||||
public static final StreamCodec<FriendlyByteBuf, IncreaseLeashRopeLength> STREAM_CODEC =
|
||||
StreamCodec.composite(
|
||||
NeoForgeStreamCodecs.enumCodec(Code.class), IncreaseLeashRopeLength::code,
|
||||
ByteBufCodecs.STRING_UTF8, IncreaseLeashRopeLength::playerUUID,
|
||||
IncreaseLeashRopeLength::new
|
||||
);
|
||||
public static final String INCREASE_LEASH_ROPE_LENGTH = "leashedplayer.leash_rope.length.increase",
|
||||
INCREASE_SELF_LEASH_ROPE_LENGTH = INCREASE_LEASH_ROPE_LENGTH + ".self";
|
||||
|
||||
|
||||
public void handle(IPayloadContext context) {
|
||||
context.enqueueWork(() -> {
|
||||
Player player = context.player();
|
||||
ServerLevel level = (ServerLevel) player.level();
|
||||
Player playerByUUID = level.getPlayerByUUID(UUID.fromString(playerUUID));
|
||||
if (playerByUUID != null) {
|
||||
ILivingEntityExtension entityExtension = (ILivingEntityExtension) playerByUUID;
|
||||
Entity leashDataEntity = PlayerLeashable.getLeashDataEntity((ServerPlayer) playerByUUID, level);
|
||||
if ((leashDataEntity != null && code == Code.OTHER_ST && leashDataEntity == player ) || (leashDataEntity != null && code == Code.OTHER_ST)) {
|
||||
float newValue = Math.max(Math.min(entityExtension.getLeashLength() + 1, LeashedPlayer.M4()), LeashedPlayer.M3());
|
||||
entityExtension.setLeashLength(newValue);
|
||||
((ServerPlayer) playerByUUID).sendSystemMessage(Component.translatable(INCREASE_LEASH_ROPE_LENGTH, playerByUUID.getDisplayName(), newValue), true);
|
||||
} else if (code == Code.SELF) {
|
||||
float newValue = Math.max(Math.min(entityExtension.getLeashLength() + 1, LeashedPlayer.M4()), LeashedPlayer.M3());
|
||||
entityExtension.setLeashLength(newValue);
|
||||
((ServerPlayer) playerByUUID).sendSystemMessage(Component.translatable(INCREASE_SELF_LEASH_ROPE_LENGTH, newValue), true);
|
||||
} else {
|
||||
((ServerPlayer) playerByUUID).sendSystemMessage(Component.translatable(Code.LEASH_LENGTH_FAILED_SET), true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@Override
|
||||
public @NotNull Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
}
|
||||
|
|
@ -6,10 +6,17 @@ import net.minecraft.world.entity.Entity;
|
|||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraft.world.level.ClipContext;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.*;
|
||||
import net.neoforged.fml.loading.FMLPaths;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static com.r3944realms.leashedplayer.utils.Logger.logger;
|
||||
|
||||
|
|
@ -61,4 +68,34 @@ public class Util {
|
|||
|
||||
thrower.level().addFreshEntity(thrownItem);
|
||||
}
|
||||
|
||||
public static List<HitResult> getRefLookAtEntityHitResult(Entity looker, Level level, float distance, Function<Entity, Boolean> condition) {
|
||||
Vec3 startPosition = looker.getEyePosition();
|
||||
Vec3 endPosition = looker.getLookAngle().normalize().scale(distance).add(startPosition);
|
||||
BlockHitResult clip = level.clip(new ClipContext(startPosition, endPosition, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, looker));
|
||||
endPosition = clip.getLocation();
|
||||
AABB range = looker.getBoundingBox().expandTowards(endPosition.subtract(startPosition));
|
||||
List<HitResult> hits = new ArrayList<>();
|
||||
List<? extends Entity> entities = level.getEntities(looker, range, condition::apply);
|
||||
for (Entity entity : entities) {
|
||||
Vec3 vec3 = entity.getBoundingBox().clip(startPosition, endPosition).orElse(null);
|
||||
if(vec3 != null) {
|
||||
EntityHitResult entityHitResult = new EntityHitResult(entity, vec3);
|
||||
hits.add(entityHitResult);
|
||||
}
|
||||
}
|
||||
return hits;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Entity getTheNearestEntityFromHitResultList(Entity looker, List<HitResult> hitResults) {
|
||||
if(!hitResults.isEmpty()) {
|
||||
hitResults.sort(Comparator.comparingDouble(e -> e.getLocation().distanceTo(looker.getEyePosition())));
|
||||
HitResult hitResult = hitResults.getFirst();
|
||||
if (hitResult instanceof EntityHitResult entityHitResult)
|
||||
return entityHitResult.getEntity();
|
||||
else return null;
|
||||
}
|
||||
else return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user