Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
97e9dcb
Dev (#274)
lokspel Mar 7, 2026
c754efb
fix(firework-cooldown): add right-click filter (#279)
lokspel Mar 7, 2026
7f2c8b8
fix(firework): prevent cooldown spam/hang on held clicks (#282)
lokspel Mar 7, 2026
55b9c5a
Dev (#285)
lokspel Mar 8, 2026
7ec8396
refactored chat listener to fix party and staff chat logging
Nandi0813 Mar 8, 2026
9355402
Merge branch 'dev' of https://github.com/ZoneDevelopement/ZonePractic…
Nandi0813 Mar 8, 2026
505a6d1
added console to audience for party chat and staff chat logging on mo…
Nandi0813 Mar 8, 2026
4503c12
fixed death cause compatibility issue for party ffa death and changed…
Nandi0813 Mar 8, 2026
7b4a92e
changed fireball and tnt kb to be more similar to minemens on modern …
Nandi0813 Mar 8, 2026
b9a9e37
changed fireball knockback calculation
Nandi0813 Mar 8, 2026
18591ef
changed rounds hashmap to use ConcurrentHashMap
Nandi0813 Mar 8, 2026
3dc1458
fixed chunk unload event handling
Nandi0813 Mar 8, 2026
4361045
fixed block check in unloaded chunks
Nandi0813 Mar 8, 2026
2786bc2
fixed arena and ladder icons showing in GUIs
Nandi0813 Mar 8, 2026
48c185d
changed logic in ffa main setup GUI to enable arena automatically whe…
Nandi0813 Mar 8, 2026
baab9ec
fixed fire spread rollback logic
Nandi0813 Mar 8, 2026
79b595a
fixed fire conflicting arena rollback, fixed enderpearl glitch when p…
Nandi0813 Mar 8, 2026
c13fda4
fix: prevent synchronous chunk loading in Cuboid#getChunks (#291)
lokspel Mar 8, 2026
e7db84e
fix: ensure chunks are loaded when getting arena chunks (#295)
lokspel Mar 9, 2026
4afec59
Dev (#298)
lokspel Mar 9, 2026
debc399
fireball fight velocity fix during jump
Nandi0813 Mar 9, 2026
21cef13
fix: update CopyGui synchronously to prevent duplicate icons (#299)
lokspel Mar 9, 2026
d17d177
Merge branch 'dev' of https://github.com/ZoneDevelopement/ZonePractic…
Nandi0813 Mar 9, 2026
ec924a4
fixed chunk loading and arena copy action bar coloring
Nandi0813 Mar 9, 2026
236d9c6
fixed event GUIs to show every icon type correctly
Nandi0813 Mar 9, 2026
cc3e203
changed fireball fight velocity settings in config
Nandi0813 Mar 9, 2026
0b2d7e1
implemented new fireball fight feature that lets players destroy plac…
Nandi0813 Mar 9, 2026
6380ca1
fixed NPE in PlayerItemCooldownEvent handling
Nandi0813 Mar 9, 2026
a4ddc68
added kitdata to sumo event, fixed online player fetching for command…
Nandi0813 Mar 9, 2026
24f75c9
added duel right-click to player
Nandi0813 Mar 9, 2026
e03e826
changed ladder slot reading from config so it doesn't reset every tim…
Nandi0813 Mar 9, 2026
e1d7482
changed version to 6.4.6-SNAPSHOT
Nandi0813 Mar 9, 2026
1460a77
changed ladder slots path in config.yml
Nandi0813 Mar 9, 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
2 changes: 1 addition & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>dev.nandi0813</groupId>
<artifactId>practice-parent</artifactId>
<version>6.4.5-SNAPSHOT</version>
<version>6.4.6-SNAPSHOT</version>
</parent>

<artifactId>practice-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import dev.nandi0813.practice.manager.fight.event.enums.EventType;
import dev.nandi0813.practice.manager.fight.event.events.duel.sumo.SumoData;
import dev.nandi0813.practice.manager.fight.event.util.EventUtil;
import dev.nandi0813.practice.module.interfaces.KitData;
import dev.nandi0813.practice.util.Common;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
Expand Down Expand Up @@ -36,13 +37,34 @@ public static void run(Player player, String label, String[] args) {
EventUtil.changeStatus(sumoData, player);
else
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.SUMO.EVENT-ALREADY-ENABLED"));
return;
} else if (args.length == 2 && args[1].equalsIgnoreCase("disable")) {
if (sumoData.isEnabled())
EventUtil.changeStatus(sumoData, player);
else
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.SUMO.EVENT-ALREADY-DISABLED"));
} else
return;
} else if (args.length == 2 && args[1].equalsIgnoreCase("help")) {
sendHelpMSG(player, label);

return;
}

// Checking if the arena is enabled, if it is, it will send a message to the player and return.
if (sumoData.isEnabled()) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.SUMO.CANT-EDIT"));
return;
}

// Setting the kit for the event.
if (args.length == 2 && args[1].equalsIgnoreCase("setkit")) {
KitData kitData = sumoData.getKitData();
kitData.setKitData(player, true);

Common.sendMMMessage(player, LanguageManager.getString("COMMAND.EVENT.ARGUMENTS.SUMO.KIT-SET"));
} else {
sendHelpMSG(player, label);
}
}

private static void sendHelpMSG(Player player, String label) {
Expand All @@ -58,6 +80,7 @@ public static List<String> tabComplete(Player player, String[] args) {
if (args.length == 2) {
arguments.add("enable");
arguments.add("disable");
arguments.add("setkit");

return StringUtil.copyPartialMatches(args[1], arguments, new ArrayList<>());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public static void run(Player player, String label, String[] args) {

public static void run(String label, String[] args) {
if (args.length == 4 && args[1].equalsIgnoreCase("reset")) {
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.ELO.TARGET-OFFLINE").replace("%target%", args[2]));
return;
Expand Down Expand Up @@ -145,7 +145,7 @@ public static void run(String label, String[] args) {
.replace("%defaultElo%", String.valueOf(defaultElo)));
}
} else if (args.length == 5 && args[1].equalsIgnoreCase("set")) {
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.ELO.TARGET-OFFLINE").replace("%target%", args[2]));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[1]));
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[1]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.INFO.TARGET-NOT-FOUND").replace("%target%", args[1]));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.TARGET-NOT-FOUND").replace("%target%", args[2]));
return;
Expand All @@ -51,7 +51,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.TARGET-NOT-FOUND").replace("%target%", args[2]));
return;
Expand Down Expand Up @@ -81,7 +81,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.TARGET-NOT-FOUND").replace("%target%", args[2]));
return;
Expand Down Expand Up @@ -122,7 +122,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.TARGET-NOT-FOUND").replace("%target%", args[2]));
return;
Expand All @@ -146,7 +146,7 @@ public static void run(Player player, String label, String[] args) {

public static void run(String label, String[] args) {
if (args.length == 3 && args[1].equalsIgnoreCase("reset")) {
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.TARGET-NOT-FOUND").replace("%target%", args[2]));
return;
Expand All @@ -162,7 +162,7 @@ public static void run(String label, String[] args) {
} else
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.NO-GROUP").replace("%target%", target.getPlayer().getName()));
} else if (args.length == 4 && args[1].equalsIgnoreCase("add")) {
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RANKED.TARGET-NOT-FOUND").replace("%target%", args[2]));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[1]));
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[1]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RESET.TARGET-OFFLINE").replace("%target%", args[1]));
return;
Expand Down Expand Up @@ -60,7 +60,7 @@ public static void run(String label, String[] args) {
return;
}

Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[1]));
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[1]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.RESET.TARGET-OFFLINE").replace("%target%", args[1]));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.UNRANKED.TARGET-OFFLINE").replace("%target%", args[2]));
return;
Expand All @@ -51,7 +51,7 @@ public static void run(Player player, String label, String[] args) {
return;
}

final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.UNRANKED.TARGET-OFFLINE"));
return;
Expand Down Expand Up @@ -85,7 +85,7 @@ public static void run(Player player, String label, String[] args) {

public static void run(String label, String[] args) {
if (args.length == 3 && args[1].equalsIgnoreCase("reset")) {
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.UNRANKED.TARGET-OFFLINE"));
return;
Expand All @@ -101,7 +101,7 @@ public static void run(String label, String[] args) {
} else
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.UNRANKED.NO-GROUP").replace("%target%", target.getPlayer().getName()));
} else if (args.length == 4 && args[1].equalsIgnoreCase("add")) {
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[2]));
final Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[2]));
if (target == null) {
Common.sendConsoleMMMessage(LanguageManager.getString("COMMAND.PRACTICE.ARGUMENTS.UNRANKED.TARGET-OFFLINE"));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
return false;
}

Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().getOfflinePlayers().get(args[0]));
Profile target = ProfileManager.getInstance().getProfile(ServerManager.getInstance().resolvePlayer(args[0]));
if (target == null) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.STATISTICS.TARGET-NOT-EXISTS").replace("%target%", args[0]));
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public void onPreLogin(AsyncPlayerPreLoginEvent event) {
if (!ZonePractice.isFullyLoaded()) {
String message = LanguageManager.getString("PLUGIN-LOADING-MESSAGE");
if (message == null || message.isEmpty()) {
message = "<red>The server is still loading, please wait...";
message = "<red>The server is still loading. Please try again in a moment.";
}
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, Common.mmToNormal(message));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,13 @@ public List<Arena> getEnabledArenas() {
return enabledArenas;
}

public List<FFAArena> getEnabledFFAArenas() {
List<FFAArena> enabledArenas = new ArrayList<>();
for (FFAArena arena : this.getFFAArenas())
if (arena.isEnabled()) enabledArenas.add(arena);
return enabledArenas;
}

public void loadArenas(final StartUpCallback boolCallback) {
Bukkit.getScheduler().runTaskAsynchronously(ZonePractice.getInstance(), () ->
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,16 @@ public boolean teleport(Player player) {

public void loadChunks() {
if (this.cuboid != null) {
Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () ->
ClassImport.getClasses().getArenaUtil().loadArenaChunks(this));

if (ArenaManager.LOAD_CHUNKS) {
ArenaManager.LOADED_CHUNKS.addAll(this.cuboid.getChunks());
}
Bukkit.getScheduler().runTask(ZonePractice.getInstance(), () -> {
ClassImport.getClasses().getArenaUtil().loadArenaChunks(this);

if (ArenaManager.LOAD_CHUNKS) {
// Collect only chunks that are already loaded — this avoids
// synchronous chunk loading on the main thread which caused
// server hangs of 10-15+ seconds.
ArenaManager.LOADED_CHUNKS.addAll(this.cuboid.getChunks());
}
});
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ public static boolean changeStatus(Player player, DisplayArena arena) {
Common.sendMMMessage(player, LanguageManager.getString("ARENA.STATUS-CHANGE.NO-FFA-POSITIONS"));
returnVal = false;
}
if (arena.getAssignedLadders().isEmpty()) {
Common.sendMMMessage(player, "<red>Please assign at least one ladder to the arena!");
return false;
}
}
} else {
if (!MatchManager.getInstance().getLiveMatchesByArena(arena).isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
package dev.nandi0813.practice.manager.fight.event.events.duel.sumo;

import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.BracketsData;
import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEvent;
import dev.nandi0813.practice.module.util.ClassImport;
import dev.nandi0813.practice.util.playerutil.PlayerUtil;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

public class Sumo extends DuelEvent {

public Sumo(Object starter, SumoData sumoData) {
super(starter, sumoData, "COMMAND.EVENT.ARGUMENTS.SUMO");
}

@Override
public SumoData getEventData() {
return (SumoData) eventData;
}

@Override
public void teleport(Player player, Location location) {
ClassImport.getClasses().getPlayerUtil().clearInventory(player);
PlayerUtil.setFightPlayer(player);

player.teleport(location);

this.getEventData().getKitData().loadKitData(player, true);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,37 @@

import dev.nandi0813.practice.manager.fight.event.enums.EventType;
import dev.nandi0813.practice.manager.fight.event.events.duel.interfaces.DuelEventData;
import dev.nandi0813.practice.module.interfaces.KitData;
import dev.nandi0813.practice.module.util.ClassImport;
import lombok.Getter;

import java.io.IOException;

@Getter
public class SumoData extends DuelEventData {

protected final KitData kitData;

public SumoData() {
super(EventType.SUMO);
this.kitData = ClassImport.createKitData();
}

@Override
protected void setCustomData() {
kitData.saveData(config, "kit");
}

@Override
protected void getCustomData() {
kitData.getData(config, "kit");
}

@Override
protected void enable() throws IOException {
if (spawns.size() != 2) {
if (!kitData.isSet()) {
throw new IOException("Kit data is not set.");
} else if (spawns.size() != 2) {
throw new IOException("Spawn positions are not set. Or not equal to 2. Current size: " + spawns.size());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ public boolean canDisplay() {
@Override
public GUIItem getSpectatorMenuItem() {
return GUIFile.getGuiItem("GUIS.SPECTATOR-MENU.ICONS.EVENT-ICON")
.setMaterial(eventData.getIcon().getMaterial()).setDamage(eventData.getIcon().getDamage()).replace("%event_type%", type.getName())
.setBaseItem(eventData.getIcon().get()).replace("%event_type%", type.getName())
.replace("%event_duration%", this.getDurationRunnable().getFormattedTime())
.replace("%players%", String.valueOf(players.size())).replace("%spectators%", String.valueOf(spectators.size()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ public void run() {
.replace("%secondName%", (seconds == 1 ? LanguageManager.getString("SECOND-NAME.1SEC") : LanguageManager.getString("SECOND-NAME.1<SEC")))
, false);

SoundEffect sound = SoundManager.getInstance().getSound(SoundType.EVENT_QUEUE_COUNTDOWN);
if (sound != null) sound.play(event.getPlayers());
if (seconds <= 5) {
SoundEffect sound = SoundManager.getInstance().getSound(SoundType.EVENT_QUEUE_COUNTDOWN);
if (sound != null) sound.play(event.getPlayers());
}
}

if (seconds == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import dev.nandi0813.practice.util.playerutil.PlayerUtil;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

import java.util.*;
Expand Down Expand Up @@ -144,6 +146,14 @@ public void removePlayer(Player player) {

this.sendMessage(LanguageManager.getString("FFA.GAME.PLAYER-LEAVE").replace("%player%", player.getName()), true);

// Remove in-flight ender pearls to prevent the player from being
// teleported back to the arena world after they have left.
for (Entity entity : player.getWorld().getEntities()) {
if (entity instanceof EnderPearl pearl && player.equals(pearl.getShooter())) {
pearl.remove();
}
}

players.remove(player);
fightPlayers.remove(player);
statistics.remove(player);
Expand Down
Loading