diff --git a/Lobby/src/main/java/de/fanta/lobby/Config.java b/Lobby/src/main/java/de/fanta/lobby/Config.java index b25d85a..d4f7bce 100644 --- a/Lobby/src/main/java/de/fanta/lobby/Config.java +++ b/Lobby/src/main/java/de/fanta/lobby/Config.java @@ -108,6 +108,7 @@ piglin.set("uuid", data.getEntityUUID().toString()); piglin.set("gpLocation", data.getGlobalPortLocationName()); piglin.set("displayName", data.getServerDisplayName()); + piglin.set("hangable", data.isHangable()); plugin.saveConfig(); } diff --git a/Lobby/src/main/java/de/fanta/lobby/JoinEntityData.java b/Lobby/src/main/java/de/fanta/lobby/JoinEntityData.java index f758c16..3fb6e3d 100644 --- a/Lobby/src/main/java/de/fanta/lobby/JoinEntityData.java +++ b/Lobby/src/main/java/de/fanta/lobby/JoinEntityData.java @@ -17,10 +17,11 @@ private EventStatus eventStatus; private int playerCount; private int maxPlayers; + private boolean isHangable; private final int mapVersion; - public JoinEntityData(String serverName, @Nullable Integer mapVersion, UUID entityUUID, String globalPortLocationName, String serverDisplayName, ServerStatus serverStatus, EventStatus eventStatus, int playerCount, int maxPlayers) { + public JoinEntityData(String serverName, @Nullable Integer mapVersion, UUID entityUUID, String globalPortLocationName, String serverDisplayName, ServerStatus serverStatus, EventStatus eventStatus, int playerCount, int maxPlayers, boolean isHangable) { this.serverName = serverName; this.mapVersion = mapVersion == null ? 0 : mapVersion; this.entityUUID = entityUUID; @@ -31,6 +32,7 @@ this.eventStatus = eventStatus; this.playerCount = playerCount; this.maxPlayers = maxPlayers; + this.isHangable = isHangable; } public String getServerName() { @@ -85,6 +87,10 @@ return mapVersion; } + public boolean isHangable() {return isHangable;} + + public void setHangable(boolean isHangable) {this.isHangable = isHangable;} + public Component createCustomEntityName() { Component statusComponent = serverStatus == ServerStatus.ONLINE ? Component.text(" ONLINE ", Color.GREEN) : serverStatus == ServerStatus.OFFLINE ? Component.text(" OFFLINE ", Color.RED) : serverStatus == ServerStatus.RUNNING ? Component.text(" RUNNING ", Color.ORANGE) : Component.text(" "); Component playerCountString = Component.text("(" + playerCount + "/" + maxPlayers + ")", Color.BLUE); diff --git a/Lobby/src/main/java/de/fanta/lobby/Lobby.java b/Lobby/src/main/java/de/fanta/lobby/Lobby.java index 35ee732..117a496 100644 --- a/Lobby/src/main/java/de/fanta/lobby/Lobby.java +++ b/Lobby/src/main/java/de/fanta/lobby/Lobby.java @@ -28,6 +28,7 @@ import de.fanta.lobby.commands.PiglinCommand.ListPiglinCommand; import de.fanta.lobby.commands.PiglinCommand.RemoveEntityCommand; import de.fanta.lobby.commands.PiglinCommand.SetEntitySpawnLocationCommand; +import de.fanta.lobby.commands.PiglinCommand.SetHangablePiglinCommand; import de.fanta.lobby.commands.PiglinCommand.ToggleArenaCommand; import de.fanta.lobby.listeners.AnvilGuiListener; import de.fanta.lobby.listeners.ChallengesEventListener; @@ -159,6 +160,7 @@ router.addCommandMapping(new Entitytphere(this), "tphere"); router.addCommandMapping(new ListPiglinCommand(this), "list"); router.addCommandMapping(new InfoPiglinCommand(this), "info"); + router.addCommandMapping(new SetHangablePiglinCommand(this), "sethangable"); router.addCommandMapping(new SetEntitySpawnLocationCommand(this), "setlocation"); router.addCommandMapping(new ToggleArenaCommand(this, true), "enable"); router.addCommandMapping(new ToggleArenaCommand(this, false), "disable"); @@ -262,7 +264,7 @@ } public void addPiglin(UUID piglinUUID, String serverName, @Nullable Integer mapVersion, String gpLocationName, String serverDisplayName, boolean saveToConfig) { - JoinEntityData entityData = new JoinEntityData(serverName, mapVersion, piglinUUID, gpLocationName, serverDisplayName, JoinEntityData.ServerStatus.OFFLINE, JoinEntityData.EventStatus.NORMAL, 0, 0); + JoinEntityData entityData = new JoinEntityData(serverName, mapVersion, piglinUUID, gpLocationName, serverDisplayName, JoinEntityData.ServerStatus.OFFLINE, JoinEntityData.EventStatus.NORMAL, 0, 0, false); this.entityData.put(serverName, entityData); this.entityServerMapping.put(piglinUUID, serverName); @@ -356,6 +358,11 @@ switch (data.getServerStatus()) { case ONLINE -> { piglin.getEquipment().clear(); + if (data.isHangable()) { + Location location = piglin.getLocation().clone(); + location.setPitch(0); + piglin.teleport(location); + } if (nmsUtils != null) { nmsUtils.getEntityUtils().setPiglinDancing(piglin, true); } @@ -364,8 +371,13 @@ if (nmsUtils != null) { nmsUtils.getEntityUtils().setPiglinDancing(piglin, false); } - - piglin.getEquipment().setItemInOffHand(new ItemStack(Material.GOLD_INGOT)); + if (data.isHangable()) { + Location location = piglin.getLocation().clone(); + location.setPitch(45); + piglin.teleport(location); + } else { + piglin.getEquipment().setItemInOffHand(new ItemStack(Material.GOLD_INGOT)); + } } case RUNNING -> { piglin.getEquipment().clear(); diff --git a/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/InfoPiglinCommand.java b/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/InfoPiglinCommand.java index 51303c8..bd12667 100644 --- a/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/InfoPiglinCommand.java +++ b/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/InfoPiglinCommand.java @@ -2,15 +2,11 @@ import de.cubeside.connection.GlobalPlayer; import de.cubeside.connection.GlobalServer; -import de.fanta.challengeutils.Color; import de.fanta.lobby.JoinEntityData; import de.fanta.lobby.Lobby; import de.iani.cubesideutils.StringUtil; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.event.ClickEvent; -import net.kyori.adventure.text.event.HoverEvent; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -45,6 +41,7 @@ plugin.getComponentUtil().sendNormalMessage(player, "GlobalServer Name: " + server); plugin.getComponentUtil().sendNormalMessage(player, "Port Punkt: " + entityData.getGlobalPortLocationName()); plugin.getComponentUtil().sendNormalMessage(player, "Spielerzahl: " + entityData.getPlayerCount() + "/" + entityData.getMaxPlayers()); + plugin.getComponentUtil().sendNormalMessage(player, "Piglin hangable: " + (entityData.isHangable()? "true" : "false")); GlobalServer globalServer = plugin.getGlobalDataHelper().getServer(server); if (globalServer != null) { Collection globalPlayers = globalServer.getPlayers(); diff --git a/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/SetHangablePiglinCommand.java b/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/SetHangablePiglinCommand.java new file mode 100644 index 0000000..571fe16 --- /dev/null +++ b/Lobby/src/main/java/de/fanta/lobby/commands/PiglinCommand/SetHangablePiglinCommand.java @@ -0,0 +1,81 @@ +package de.fanta.lobby.commands.PiglinCommand; + +import de.fanta.lobby.JoinEntityData; +import de.fanta.lobby.Lobby; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import java.util.Collection; +import java.util.List; + +public class SetHangablePiglinCommand extends SubCommand { + + private final Lobby plugin; + + public SetHangablePiglinCommand(Lobby plugin) {this.plugin = plugin;} + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + plugin.getComponentUtil().sendErrorMessage(sender, "Du musst ein Spieler sein!"); + return true; + } + + if (!args.hasNext()) { + return false; + } + + if (player.getTargetEntity(10) == null) { + plugin.getComponentUtil().sendWarningMessage(player, "Du musst ein Entity anschauen."); + return true; + } + + Entity entity = player.getTargetEntity(10); + if (!plugin.isJoinEntity(entity)) { + plugin.getComponentUtil().sendErrorMessage(player, "Nur Join Entities können hangable sein."); + return true; + } + + String serverName = plugin.getServerNameForEntity(entity.getUniqueId()); + if (serverName == null) { + return true; + } + JoinEntityData data = plugin.getEntityData(serverName); + if (data == null) { + return true; + } + + String argsNext = args.getNext(); + if (argsNext.equalsIgnoreCase("true")) { + data.setHangable(true); + plugin.getPluginConfig().savePiglin(data); + plugin.getComponentUtil().sendNormalMessage(player, "Das Join Entity von " + serverName + " ist nun hangable."); + } else if (argsNext.equalsIgnoreCase("false")) { + data.setHangable(false); + plugin.getPluginConfig().savePiglin(data); + plugin.getComponentUtil().sendNormalMessage(player, "Das Join Entity von " + serverName + " ist nun nicht mehr hangable."); + } else { + return false; + } + return true; + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + return List.of("true", "false"); + } + + @Override + public String getRequiredPermission() { + return "lobby.piglin.hangable"; + } + + @Override + public String getUsage() { + return ""; + } +}