From 8bee1d09f195948cb021b0e38f12562fa71d2b20 Mon Sep 17 00:00:00 2001 From: MelodicAlbuild Date: Tue, 2 Jun 2026 17:13:08 -0500 Subject: [PATCH 1/4] feat: update hyssentials to target 0.5.3 --- gradle.properties | 2 +- .../commands/home/SetHomeCommand.java | 8 ++--- .../commands/spawn/SetSpawnCommand.java | 20 +++++------ .../commands/spawn/SpawnCommand.java | 8 ++--- .../commands/teleport/TpCommand.java | 14 ++++---- .../commands/teleport/TphereCommand.java | 15 ++++---- .../commands/tpa/TpacceptCommand.java | 16 ++++----- .../commands/warp/SetWarpCommand.java | 8 ++--- .../hyssentials/data/LocationData.java | 34 +++++++------------ .../hyssentials/gui/PlayerRankAssignGui.java | 2 +- .../hyssentials/manager/HomeManager.java | 6 ++-- .../manager/TeleportWarmupManager.java | 14 ++++---- .../hyssentials/manager/WarpManager.java | 6 ++-- .../system/PlayerDeathBackSystem.java | 6 ++-- src/main/resources/manifest.json | 2 +- 15 files changed, 75 insertions(+), 86 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7901ebf..3fcca33 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,4 +7,4 @@ plugin_description=Essential commands for Hytale servers - TPA, homes, warps, sp plugin_author=HytaleModding plugin_website=https://github.com/HytaleModding plugin_main_entrypoint=dev.hytalemodding.hyssentials.HyssentialsPlugin -server_version=2026.02.17-255364b8e +server_version=0.5.3 diff --git a/src/main/java/dev/hytalemodding/hyssentials/commands/home/SetHomeCommand.java b/src/main/java/dev/hytalemodding/hyssentials/commands/home/SetHomeCommand.java index e702425..fddb541 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/commands/home/SetHomeCommand.java +++ b/src/main/java/dev/hytalemodding/hyssentials/commands/home/SetHomeCommand.java @@ -2,8 +2,8 @@ import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg; import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes; @@ -51,13 +51,13 @@ protected void execute(@Nonnull CommandContext context, @Nonnull Store { @@ -72,9 +72,9 @@ protected void execute(@Nonnull CommandContext context, @Nonnull Store { // Use proper body and head rotation like vanilla Hytale Teleport teleport = new Teleport(targetWorld, targetPos, targetBodyRot) diff --git a/src/main/java/dev/hytalemodding/hyssentials/commands/teleport/TphereCommand.java b/src/main/java/dev/hytalemodding/hyssentials/commands/teleport/TphereCommand.java index 22931ec..6f8d5bb 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/commands/teleport/TphereCommand.java +++ b/src/main/java/dev/hytalemodding/hyssentials/commands/teleport/TphereCommand.java @@ -2,8 +2,8 @@ import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.NameMatching; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg; @@ -60,16 +60,15 @@ protected void execute(@Nonnull CommandContext context, @Nonnull Store { TransformComponent targetTransform = targetStore.getComponent(targetRef, TransformComponent.getComponentType()); HeadRotation targetHeadRot = targetStore.getComponent(targetRef, HeadRotation.getComponentType()); if (targetTransform != null) { - Vector3d targetPos = targetTransform.getPosition().clone(); - Vector3f targetRot = targetHeadRot != null ? targetHeadRot.getRotation().clone() : new Vector3f(0, 0, 0); + Vector3d targetPos = new Vector3d(targetTransform.getPosition()); + Rotation3f targetRot = targetHeadRot != null ? targetHeadRot.getRotation().clone() : new Rotation3f(0, 0, 0); backManager.saveLocation(targetPlayer.getUuid(), LocationData.from(targetWorld.getName(), targetPos, targetRot)); } // Use proper body and head rotation like vanilla Hytale diff --git a/src/main/java/dev/hytalemodding/hyssentials/commands/tpa/TpacceptCommand.java b/src/main/java/dev/hytalemodding/hyssentials/commands/tpa/TpacceptCommand.java index 41abec2..4a08f1d 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/commands/tpa/TpacceptCommand.java +++ b/src/main/java/dev/hytalemodding/hyssentials/commands/tpa/TpacceptCommand.java @@ -2,8 +2,8 @@ import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand; import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation; @@ -71,12 +71,12 @@ protected void execute(@Nonnull CommandContext context, @Nonnull Store ref, @Nonnull UICommandBuilder cmd, private void buildPlayerList(UICommandBuilder cmd, UIEventBuilder events, Store store) { cmd.clear("#PlayerList"); - List allPlayers = Universe.get().getPlayers(); + Collection allPlayers = Universe.get().getPlayers(); visiblePlayers.clear(); for (PlayerRef player : allPlayers) { diff --git a/src/main/java/dev/hytalemodding/hyssentials/manager/HomeManager.java b/src/main/java/dev/hytalemodding/hyssentials/manager/HomeManager.java index a791a20..3c30119 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/manager/HomeManager.java +++ b/src/main/java/dev/hytalemodding/hyssentials/manager/HomeManager.java @@ -1,7 +1,7 @@ package dev.hytalemodding.hyssentials.manager; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.world.World; import dev.hytalemodding.hyssentials.data.LocationData; @@ -25,7 +25,7 @@ public HomeManager(@Nonnull DataManager dataManager, @Nonnull RankManager rankMa } public boolean setHome(@Nonnull UUID playerUuid, @Nonnull String name, @Nonnull World world, - @Nonnull Vector3d position, @Nonnull Vector3f rotation, int effectiveMaxHomes) { + @Nonnull Vector3d position, @Nonnull Rotation3f rotation, int effectiveMaxHomes) { Map homes = playerHomes.computeIfAbsent(playerUuid, k -> new ConcurrentHashMap<>()); String lowerName = name.toLowerCase(); if (!homes.containsKey(lowerName) && homes.size() >= effectiveMaxHomes) { diff --git a/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java b/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java index 88ebdf4..619ab2c 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java +++ b/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java @@ -4,8 +4,8 @@ import com.hypixel.hytale.component.Store; import com.hypixel.hytale.logger.HytaleLogger; import com.hypixel.hytale.math.util.ChunkUtil; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation; import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport; @@ -75,7 +75,7 @@ public void startWarmup( return; } - Vector3d startPos = transform.getPosition().clone(); + Vector3d startPos = new Vector3d(transform.getPosition()); String destName = displayName != null ? displayName : String.format("%.1f, %.1f, %.1f", destination.x(), destination.y(), destination.z()); playerRef.sendMessage(ChatUtil.parse(Messages.INFO_WARMUP_STARTED, destName, warmupSeconds)); @@ -101,7 +101,7 @@ public void startWarmup( TransformComponent currentTransform = store.getComponent(ref, TransformComponent.getComponentType()); if (currentTransform != null) { Vector3d currentPos = currentTransform.getPosition(); - double distance = startPos.distanceTo(currentPos); + double distance = startPos.distance(currentPos); if (distance > MOVEMENT_THRESHOLD) { playerRef.sendMessage(ChatUtil.parse(Messages.INFO_WARMUP_CANCELLED)); @@ -133,7 +133,7 @@ private ScheduledFuture scheduleMovementCheck(UUID playerUuid, Vector3d start TransformComponent transform = store.getComponent(ref, TransformComponent.getComponentType()); if (transform != null) { Vector3d currentPos = transform.getPosition(); - double distance = startPos.distanceTo(currentPos); + double distance = startPos.distance(currentPos); if (distance > MOVEMENT_THRESHOLD) { cancelWarmup(playerUuid, true); @@ -166,8 +166,8 @@ private void executeTeleport( TransformComponent transform = store.getComponent(ref, TransformComponent.getComponentType()); HeadRotation headRotation = store.getComponent(ref, HeadRotation.getComponentType()); if (transform != null) { - Vector3d currentPos = transform.getPosition().clone(); - Vector3f currentRot = headRotation != null ? headRotation.getRotation().clone() : new Vector3f(0, 0, 0); + Vector3d currentPos = new Vector3d(transform.getPosition()); + Rotation3f currentRot = headRotation != null ? headRotation.getRotation().clone() : new Rotation3f(0, 0, 0); backManager.saveLocation(playerUuid, LocationData.from(currentWorld.getName(), currentPos, currentRot)); } Teleport teleport = new Teleport(finalWorld, destination.toPosition(), destination.toBodyRotation()) diff --git a/src/main/java/dev/hytalemodding/hyssentials/manager/WarpManager.java b/src/main/java/dev/hytalemodding/hyssentials/manager/WarpManager.java index 7903812..bcd391d 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/manager/WarpManager.java +++ b/src/main/java/dev/hytalemodding/hyssentials/manager/WarpManager.java @@ -1,7 +1,7 @@ package dev.hytalemodding.hyssentials.manager; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.universe.world.World; import dev.hytalemodding.hyssentials.data.LocationData; import java.util.Collections; @@ -21,7 +21,7 @@ public WarpManager(@Nonnull DataManager dataManager) { } public void setWarp(@Nonnull String name, @Nonnull World world, - @Nonnull Vector3d position, @Nonnull Vector3f rotation) { + @Nonnull Vector3d position, @Nonnull Rotation3f rotation) { warps.put(name.toLowerCase(), LocationData.from(world.getName(), position, rotation)); dataManager.saveWarps(warps); } diff --git a/src/main/java/dev/hytalemodding/hyssentials/system/PlayerDeathBackSystem.java b/src/main/java/dev/hytalemodding/hyssentials/system/PlayerDeathBackSystem.java index e081418..f4ca54d 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/system/PlayerDeathBackSystem.java +++ b/src/main/java/dev/hytalemodding/hyssentials/system/PlayerDeathBackSystem.java @@ -6,8 +6,8 @@ import com.hypixel.hytale.component.Store; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.system.RefChangeSystem; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.math.vector.Rotation3f; +import org.joml.Vector3d; import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation; import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent; @@ -51,7 +51,7 @@ public void onComponentAdded(@Nonnull Ref ref, @Nonnull DeathCompon } HeadRotation headRotation = commandBuffer.getComponent(ref, HeadRotation.getComponentType()); Vector3d position = transform.getPosition(); - Vector3f rotation = headRotation != null ? headRotation.getRotation() : new Vector3f(0, 0, 0); + Rotation3f rotation = headRotation != null ? headRotation.getRotation() : new Rotation3f(0, 0, 0); World world = commandBuffer.getExternalData().getWorld(); backManager.saveLocation(playerRef.getUuid(), LocationData.from(world.getName(), position, rotation)); } diff --git a/src/main/resources/manifest.json b/src/main/resources/manifest.json index b3e2fb0..5a5a5cf 100644 --- a/src/main/resources/manifest.json +++ b/src/main/resources/manifest.json @@ -19,6 +19,6 @@ "OptionalDependencies": { "com.leclowndu93150:ChatCustomization": "*" }, - "ServerVersion": "2026.02.18-f3b8fff95", + "ServerVersion": "^0.5.3", "Main": "dev.hytalemodding.hyssentials.HyssentialsPlugin" } \ No newline at end of file From 9331a056ff91e20dd9c7da9f2f9c5a433bc6fccc Mon Sep 17 00:00:00 2001 From: MelodicAlbuild Date: Tue, 2 Jun 2026 17:13:25 -0500 Subject: [PATCH 2/4] fix: ensure rank permissions when player enters a new world --- .../hytalemodding/hyssentials/HyssentialsPlugin.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/hytalemodding/hyssentials/HyssentialsPlugin.java b/src/main/java/dev/hytalemodding/hyssentials/HyssentialsPlugin.java index 799fbe4..cbdc8bd 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/HyssentialsPlugin.java +++ b/src/main/java/dev/hytalemodding/hyssentials/HyssentialsPlugin.java @@ -130,7 +130,7 @@ protected void setup() { this.getEventRegistry().register(PlayerConnectEvent.class, this::onPlayerConnect); this.getEventRegistry().register(PlayerDisconnectEvent.class, this::onPlayerDisconnect); - this.getEventRegistry().registerGlobal(AddPlayerToWorldEvent.class, this.joinMessageManager::onPlayerEnterWorld); + this.getEventRegistry().registerGlobal(AddPlayerToWorldEvent.class, this::onPlayerEnterWorld); this.getEventRegistry().registerGlobal(DrainPlayerFromWorldEvent.class, this.joinMessageManager::onPlayerLeaveWorld); } @@ -194,6 +194,15 @@ private boolean playerHasAnyRank(@Nonnull PlayerRef player) { return false; } + private void onPlayerEnterWorld(@Nonnull AddPlayerToWorldEvent event) { + joinMessageManager.onPlayerEnterWorld(event); + + PlayerRef player = event.getHolder().getComponent(PlayerRef.getComponentType()); + if (player != null) { + rankManager.ensureGrantedPermissions(player.getUuid()); + } + } + private void onPlayerDisconnect(@Nonnull PlayerDisconnectEvent event) { joinMessageManager.onPlayerDisconnect(event); vanishManager.onPlayerLeave(event.getPlayerRef().getUuid()); From ffe5529d4145cd98724a9a097e3c5e8e6b89fe52 Mon Sep 17 00:00:00 2001 From: MelodicAlbuild Date: Tue, 2 Jun 2026 17:13:58 -0500 Subject: [PATCH 3/4] fix: /fly command not disabling flight on second use --- .../dev/hytalemodding/hyssentials/commands/admin/FlyCommand.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/dev/hytalemodding/hyssentials/commands/admin/FlyCommand.java b/src/main/java/dev/hytalemodding/hyssentials/commands/admin/FlyCommand.java index e7eed62..3744eda 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/commands/admin/FlyCommand.java +++ b/src/main/java/dev/hytalemodding/hyssentials/commands/admin/FlyCommand.java @@ -45,6 +45,7 @@ protected void execute(@Nonnull CommandContext context, @Nonnull Store Date: Tue, 2 Jun 2026 17:14:15 -0500 Subject: [PATCH 4/4] fix: reset movement speed when teleporting a mounted player --- .../hyssentials/manager/TeleportWarmupManager.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java b/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java index 619ab2c..d6b415f 100644 --- a/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java +++ b/src/main/java/dev/hytalemodding/hyssentials/manager/TeleportWarmupManager.java @@ -9,10 +9,12 @@ import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation; import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport; +import com.hypixel.hytale.server.core.entity.entities.player.movement.MovementManager; import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.Universe; import com.hypixel.hytale.server.core.universe.world.World; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import com.hypixel.hytale.builtin.mounts.MountedComponent; import dev.hytalemodding.hyssentials.data.LocationData; import dev.hytalemodding.hyssentials.lang.Messages; import dev.hytalemodding.hyssentials.util.ChatUtil; @@ -170,6 +172,16 @@ private void executeTeleport( Rotation3f currentRot = headRotation != null ? headRotation.getRotation().clone() : new Rotation3f(0, 0, 0); backManager.saveLocation(playerUuid, LocationData.from(currentWorld.getName(), currentPos, currentRot)); } + MountedComponent mounted = store.getComponent(ref, MountedComponent.getComponentType()); + if (mounted != null) { + store.removeComponent(ref, MountedComponent.getComponentType()); + MovementManager movementManager = store.getComponent(ref, MovementManager.getComponentType()); + if (movementManager != null) { + movementManager.applyDefaultSettings(); + movementManager.update(playerRef.getPacketHandler()); + } + } + Teleport teleport = new Teleport(finalWorld, destination.toPosition(), destination.toBodyRotation()) .setHeadRotation(destination.toHeadRotation()); store.addComponent(ref, Teleport.getComponentType(), teleport);