Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
da1639f
fix: fix profile worldtime default value and handle offline players i…
lokspel May 18, 2026
8f035e8
Merge branch 'ZoneDevelopement:dev' into dev
lokspel May 18, 2026
6dcf467
fix: resolve party chat permission error caused by missing break
lokspel May 18, 2026
0490640
Merge remote-tracking branch 'origin/dev' into dev
lokspel May 18, 2026
8711fed
Merge branch 'ZoneDevelopement:dev' into dev
lokspel May 18, 2026
1fa95c3
fix: not-won round symbols rendering as filled on scoreboard
lokspel May 18, 2026
2ccbd30
Prevent throwing ender peal if cooldown is 0.0 in the start of the match
lokspel May 18, 2026
5c61583
Merge branch 'ZoneDevelopement:dev' into dev
lokspel May 18, 2026
4dfc461
Merge branch 'ZoneDevelopement:dev' into dev
lokspel May 18, 2026
4c179ff
fix: shade MariaDB driver to prevent classpath conflict with other pl…
lokspel May 18, 2026
7bfda7e
fix: remove players from live match on rejoin if they disconnected du…
lokspel May 18, 2026
f8a1a8a
Refactor Profile
lokspel May 18, 2026
defbc9e
Merge branch 'ZoneDevelopement:dev' into dev
lokspel May 18, 2026
9fe5265
Refactor Profile
lokspel May 18, 2026
bc4b1db
Merge remote-tracking branch 'origin/dev' into dev
lokspel May 18, 2026
8c9bcd0
Fix for https://github.com/ZoneDevelopement/ZonePractice-Pro/issues/536
lokspel May 18, 2026
14a0504
Merge branch 'ZoneDevelopement:dev' into dev
lokspel May 19, 2026
06eff90
Full MiniMessage support
lokspel May 19, 2026
b7e11c5
hex/legacy color code support
lokspel May 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import dev.nandi0813.practice.manager.profile.Profile;
import dev.nandi0813.practice.manager.profile.ProfileManager;
import dev.nandi0813.practice.manager.profile.group.Group;
import dev.nandi0813.practice.util.StringUtil;
import org.bukkit.entity.Player;

public class ZonePracticeApiImpl extends ZonePracticeApi {
Expand All @@ -28,8 +27,8 @@ public String getPlayerDivision(Player player, DivisionName divisionName) {
if (profile.getStats().getDivision() == null) return null;

return switch (divisionName) {
case FULL -> StringUtil.CC(profile.getStats().getDivision().getFullName());
case SHORT -> StringUtil.CC(profile.getStats().getDivision().getShortName());
case FULL -> profile.getStats().getDivision().getFullName();
case SHORT -> profile.getStats().getDivision().getShortName();
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public static void run(Player player, String label, String[] args) {
.replace("%arena%", arena.getName())
.replace("%type%", arena.getType().getName())
.replace("%icon%", arena.getIcon() != null ? LanguageManager.getString("COMMAND.ARENA.ARGUMENTS.INFO.STATUS-NAMES.SET") : LanguageManager.getString("COMMAND.ARENA.ARGUMENTS.INFO.STATUS-NAMES.NOT-SET"))
.replace("%displayName%", StringUtil.legacyColorToMiniMessage(arena.getDisplayName()))
.replace("%displayName%", arena.getDisplayName())
.replace("%ladders%", (ladderNames.isEmpty() ? StringUtil.CC("<red>NULL") : ladderNames.toString().replace("]", "").replace("[", "")))
.replace("%corner1%", ArenaUtil.convertLocation(arena.getCorner1()))
.replace("%corner2%", ArenaUtil.convertLocation(arena.getCorner2()))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package dev.nandi0813.practice.command.staff.arguments;

import dev.nandi0813.practice.util.StringUtil;
import dev.nandi0813.practice.util.Common;
import org.bukkit.entity.Player;

public enum FollowArg {
;

public static void run(Player player, String label, String[] args) {
if (!player.hasPermission("zpp.staffmode.follow")) {
player.sendMessage(StringUtil.CC("&cYou don't have permission."));
Common.sendMMMessage(player, "<red>You don't have permission.");
return;
}

player.sendMessage(StringUtil.CC("&cCurrently not a feature of the plugin."));
Common.sendMMMessage(player, "<red>Currently not a feature of the plugin.");

/*
if (args.length == 2)
Expand All @@ -28,13 +28,13 @@ public static void run(Player player, String label, String[] args) {

}
else
player.sendMessage(StringUtil.CC("&cPlayer is not online."));
Common.sendMMMessage(player, "<red>Player is not online.");
}
else
player.sendMessage(StringUtil.CC("&cYou can only use this command in staff mode."));
Common.sendMMMessage(player, "<red>You can only use this command in staff mode.");
}
else
player.sendMessage(StringUtil.CC("&c/" + label + " follow <player>"));
Common.sendMMMessage(player, "<red>/" + label + " follow <yellow><player>"));
*/
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import dev.nandi0813.practice.util.Common;
import dev.nandi0813.practice.util.PAPIUtil;
import dev.nandi0813.practice.util.SoftDependUtil;
import dev.nandi0813.practice.util.StringUtil;
import io.papermc.paper.event.player.AsyncChatEvent;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
Expand Down Expand Up @@ -133,7 +134,7 @@ private void applyRenderer(AsyncChatEvent e, String miniMessageString) {
if (SoftDependUtil.isPAPI_ENABLED && viewer instanceof Player viewerPlayer) {
return PAPIUtil.runThroughFormat(viewerPlayer, miniMessageString);
}
return ZonePractice.getMiniMessage().deserialize(miniMessageString);
return ZonePractice.getMiniMessage().deserialize(StringUtil.legacyToMiniMessage(miniMessageString));
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public void onInteract(PlayerInteractEvent event) {
DisplayArena displayArena = session.getArena();

if (displayArena == null) {
player.sendMessage(Common.colorize("&cArena not found!"));
player.sendMessage(Common.colorize("<red>Arena not found!"));
setupManager.stopSetup(player);
return;
}
Expand Down Expand Up @@ -125,7 +125,7 @@ private void handleModeSwitch(Player player, ArenaSetupManager.SetupSession sess
return;
}
setupManager.updateWand(player);
player.sendMessage(Common.colorize("&eSwitched to: &f" + session.getCurrentMode().getDisplayName()));
player.sendMessage(Common.colorize("<yellow>Switched to: <white>" + session.getCurrentMode().getDisplayName()));
}

private void handleStandardPositions(Player player, Arena arena, Action action, PlayerInteractEvent event) {
Expand All @@ -145,7 +145,7 @@ private void handleStandardPositions(Player player, Arena arena, Action action,
if (action == Action.LEFT_CLICK_BLOCK) {
// Check minimum distance from position 2
if (arena.getPosition2() != null && arena.getPosition2().distance(loc) < 1.0) {
player.sendMessage(Common.colorize("&cSpawn positions must be at least 1 block apart!"));
player.sendMessage(Common.colorize("<red>Spawn positions must be at least 1 block apart!"));
return;
}
arena.setPosition1(loc);
Expand All @@ -154,7 +154,7 @@ private void handleStandardPositions(Player player, Arena arena, Action action,
} else {
// Check minimum distance from position 1
if (arena.getPosition1() != null && arena.getPosition1().distance(loc) < 1.0) {
player.sendMessage(Common.colorize("&cSpawn positions must be at least 1 block apart!"));
player.sendMessage(Common.colorize("<red>Spawn positions must be at least 1 block apart!"));
return;
}
arena.setPosition2(loc);
Expand Down Expand Up @@ -183,8 +183,8 @@ private void handleFFAPositions(Player player, FFAArena ffaArena, Action action,
// Check minimum distance from all existing spawns (must be at least 1 block apart)
for (Location existingSpawn : ffaArena.getFfaPositions()) {
if (existingSpawn.distance(loc) < 1.0) {
player.sendMessage(Common.colorize("&cSpawn positions must be at least 1 block apart from each other!"));
player.sendMessage(Common.colorize("&7Too close to an existing spawn position."));
player.sendMessage(Common.colorize("<red>Spawn positions must be at least 1 block apart from each other!"));
player.sendMessage(Common.colorize("<gray>Too close to an existing spawn position."));
return;
}
}
Expand All @@ -203,9 +203,9 @@ private void handleFFAPositions(Player player, FFAArena ffaArena, Action action,
ffaArena.getFfaPositions().remove(index);
SpawnMarkerManager.getInstance().updateMarkers(ffaArena);
updateGui(ffaArena);
player.sendMessage(Common.colorize("&cRemoved last FFA spawn point. Remaining: " + index));
player.sendMessage(Common.colorize("<red>Removed last FFA spawn point. Remaining: " + index));
} else {
player.sendMessage(Common.colorize("&cNo spawn points to remove."));
player.sendMessage(Common.colorize("<red>No spawn points to remove."));
}
}
}
Expand Down Expand Up @@ -330,7 +330,7 @@ private void handleBuildMax(Player player, DisplayArena arena, Action action) {
if (action.name().contains("LEFT")) {
arena.setBuildMax(false);
arena.setBuildMaxValue(ConfigManager.getInt("MATCH-SETTINGS.BUILD-LIMIT-DEFAULT"));
player.sendMessage(Common.colorize("&cBuild Height Limit disabled for " + arena.getName()));
player.sendMessage(Common.colorize("<red>Build Height Limit disabled for " + arena.getName()));
return;
}

Expand All @@ -352,7 +352,7 @@ private void handleDeadZone(Player player, DisplayArena arena, Action action) {

if (action.name().contains("LEFT")) {
arena.setDeadZone(false);
player.sendMessage(Common.colorize("&cDead Zone disabled for " + arena.getName()));
player.sendMessage(Common.colorize("<red>Dead Zone disabled for " + arena.getName()));
return;
}

Expand Down Expand Up @@ -550,34 +550,34 @@ public void onMarkerInteract(PlayerInteractAtEntityEvent event) {

// Check if player is in setup mode
if (!setupManager.isSettingUp(player)) {
player.sendMessage(Common.colorize("&cYou must be in setup mode to remove spawn markers."));
player.sendMessage(Common.colorize("<red>You must be in setup mode to remove spawn markers."));
return;
}

// Find which arena this marker belongs to
DisplayArena arena = SpawnMarkerManager.getInstance().getArenaForMarker(mannequin);
if (arena == null) {
player.sendMessage(Common.colorize("&cCould not find arena for this marker."));
player.sendMessage(Common.colorize("<red>Could not find arena for this marker."));
return;
}

// ONLY allow for FFA arenas
if (!(arena instanceof FFAArena ffaArena)) {
player.sendMessage(Common.colorize("&cDirect marker removal only works for FFA arenas."));
player.sendMessage(Common.colorize("&7Use left/right click on blocks to set standard arena spawn positions."));
player.sendMessage(Common.colorize("<red>Direct marker removal only works for FFA arenas."));
player.sendMessage(Common.colorize("<gray>Use left/right click on blocks to set standard arena spawn positions."));
return;
}

// Check if player is setting up this arena
ArenaSetupManager.SetupSession session = setupManager.getSession(player);
if (session == null || !session.getArena().equals(arena)) {
player.sendMessage(Common.colorize("&cYou are not currently setting up this arena."));
player.sendMessage(Common.colorize("<red>You are not currently setting up this arena."));
return;
}

// Check if in correct mode
if (session.getCurrentMode() != SetupMode.FFA_POSITIONS) {
player.sendMessage(Common.colorize("&cSwitch to FFA Positions mode to remove spawn markers."));
player.sendMessage(Common.colorize("<red>Switch to FFA Positions mode to remove spawn markers."));
return;
}

Expand All @@ -587,9 +587,9 @@ public void onMarkerInteract(PlayerInteractAtEntityEvent event) {
SpawnMarkerManager.getInstance().updateMarkers(arena);
updateGui(arena);

player.sendMessage(Common.colorize("&cRemoved FFA spawn. Remaining: " + ffaArena.getFfaPositions().size()));
player.sendMessage(Common.colorize("<red>Removed FFA spawn. Remaining: " + ffaArena.getFfaPositions().size()));
} else {
player.sendMessage(Common.colorize("&cFailed to remove spawn marker."));
player.sendMessage(Common.colorize("<red>Failed to remove spawn marker."));
}
}

Expand Down Expand Up @@ -629,9 +629,9 @@ public void onMarkerDamage(EntityDamageByEntityEvent event) {
ffaArena.getFfaPositions().remove(index);
SpawnMarkerManager.getInstance().updateMarkers(ffaArena);
updateGui(ffaArena);
player.sendMessage(Common.colorize("&cRemoved last FFA spawn point. Remaining: " + index));
player.sendMessage(Common.colorize("<red>Removed last FFA spawn point. Remaining: " + index));
} else {
player.sendMessage(Common.colorize("&cNo spawn points to remove."));
player.sendMessage(Common.colorize("<red>No spawn points to remove."));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public boolean startSetup(Player player, DisplayArena arena) {
// Show spawn position markers
SpawnMarkerManager.getInstance().showMarkers(arena);

player.sendMessage(Common.colorize("&aSetup mode started for arena: &e" + arena.getName() + "&a."));
player.sendMessage(Common.colorize("<green>Setup mode started for arena: <yellow>" + arena.getName() + "<green>."));
return true;
}

Expand All @@ -95,7 +95,7 @@ public void stopSetup(Player player) {
SpawnMarkerManager.getInstance().clearMarkers(arena);
}

player.sendMessage(Common.colorize("&cSetup mode ended for arena: &c" + arena.getName() + "."));
player.sendMessage(Common.colorize("<red>Setup mode ended for arena: <red>" + arena.getName() + "."));
}

public SetupSession getSession(Player player) {
Expand Down Expand Up @@ -178,25 +178,25 @@ public void updateWand(Player player) {
ItemMeta meta = wand.getItemMeta();
SetupMode mode = session.getCurrentMode();

meta.displayName(Common.legacyToComponent(Common.colorize("&6Arena Wand &7(&e" + mode.getDisplayName() + "&7)")));
meta.displayName(Common.legacyToComponent(Common.colorize("<gold>Arena Wand <gray>(<yellow>" + mode.getDisplayName() + "<gray>)")));

List<String> lore = new ArrayList<>();
lore.add(Common.colorize("&7Editing: &a" + arena.getName()));
lore.add(Common.colorize("&7Type: &b" + (arena instanceof FFAArena ? "FFA" : "Standard")));
lore.add(Common.colorize("<gray>Editing: <green>" + arena.getName()));
lore.add(Common.colorize("<gray>Type: <aqua>" + (arena instanceof FFAArena ? "FFA" : "Standard")));
lore.add("");
lore.add(Common.colorize("&eCurrent Mode: &f" + mode.getDisplayName()));
lore.add(Common.colorize("<yellow>Current Mode: <white>" + mode.getDisplayName()));
lore.add("");
lore.add(Common.colorize("&7Controls:"));
lore.add(Common.colorize("<gray>Controls:"));

for (String line : mode.getDescription()) {
lore.add(Common.colorize(line));
}

lore.add("");
lore.add(Common.colorize("&dShift + Left: &7Next Mode"));
lore.add(Common.colorize("&dShift + Right: &7Prev Mode"));
lore.add(Common.colorize("<light_purple>Shift + Left: <gray>Next Mode"));
lore.add(Common.colorize("<light_purple>Shift + Right: <gray>Prev Mode"));
lore.add("");
lore.add(Common.colorize("&cDrop (Q): &7Exit Setup"));
lore.add(Common.colorize("<red>Drop (Q): <gray>Exit Setup"));

meta.lore(lore.stream().map(Common::legacyToComponent).collect(Collectors.toList()));
wand.setItemMeta(meta);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,43 +6,43 @@
public enum SetupMode {

CORNERS("Corner Selection", new String[]{
"&b Left Click: &fSet Corner 1",
"&b Right Click: &fSet Corner 2"
"<aqua> Left Click: <white>Set Corner 1",
"<aqua> Right Click: <white>Set Corner 2"
}),

POSITIONS("Spawn Points (Standard)", new String[]{
"&b Left Click Block: &fSet Position 1 (Blue)",
"&b Right Click Block: &fSet Position 2 (Red)"
"<aqua> Left Click Block: <white>Set Position 1 (Blue)",
"<aqua> Right Click Block: <white>Set Position 2 (Red)"
}),

FFA_POSITIONS("Spawn Points (FFA)", new String[]{
"&b Right Click Block: &fAdd Spawn Point",
"&b Right Click Armor Stand: &fRemove That Spawn",
"&b Left Click (Anywhere): &fRemove Last Spawn"
"<aqua> Right Click Block: <white>Add Spawn Point",
"<aqua> Right Click Armor Stand: <white>Remove That Spawn",
"<aqua> Left Click (Anywhere): <white>Remove Last Spawn"
}),

BUILD_MAX("Build Height Limit", new String[]{
"&b Right Click: &fSet to Current Y-Level",
"&b Left Click: &fDisable Build Limit"
"<aqua> Right Click: <white>Set to Current Y-Level",
"<aqua> Left Click: <white>Disable Build Limit"
}),

DEAD_ZONE("Dead Zone (Void)", new String[]{
"&b Right Click: &fSet to Current Y-Level",
"&b Left Click: &fDisable Dead Zone"
"<aqua> Right Click: <white>Set to Current Y-Level",
"<aqua> Left Click: <white>Disable Dead Zone"
}),

BED_LOCATIONS("Bed Locations", new String[]{
"&b Left Click: &fSet Blue Bed",
"&b Right Click: &fSet Red Bed"
"<aqua> Left Click: <white>Set Blue Bed",
"<aqua> Right Click: <white>Set Red Bed"
}),

PORTALS("Portal Setup", new String[]{
"&b Right Click: &fAdd Portal Region",
"&b Left Click: &fRemove Portal Region"
"<aqua> Right Click: <white>Add Portal Region",
"<aqua> Left Click: <white>Remove Portal Region"
}),

TOGGLE_STATUS("Arena Status", new String[]{
"&b Right Click: &fEnable Arena",
"<aqua> Right Click: <white>Enable Arena",
});

private final String displayName;
Expand Down
Loading