Skip to content
Merged

dev #302

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
a6ec49e
fixed:
Nandi0813 Mar 9, 2026
bafcacb
fixed:
Nandi0813 Mar 10, 2026
4ca50a7
fixed knocked to the void by player death message in FFA
Nandi0813 Mar 10, 2026
024c313
fixed possible NPE in MatchStatsGui constructor
Nandi0813 Mar 10, 2026
7ae3854
fixed dupe bug in player inventory
Nandi0813 Mar 10, 2026
319837b
feat: replace right-click duel with sword-to-duel mechanic (#316)
lokspel Mar 12, 2026
9ce544b
fix: lobby visibility toggle without rejoin; validate liquid placemen…
lokspel Mar 13, 2026
80fe88b
fix(chat): escape MiniMessage tags in player messages (#321)
lokspel Mar 15, 2026
183f122
removed old 1.8 version support
Nandi0813 Mar 15, 2026
7b996c9
fixed code warnings
Nandi0813 Mar 15, 2026
3f7ce7d
created AGENTS.md and added to .gitignore
Nandi0813 Mar 15, 2026
1461b88
changed deprecated methods
Nandi0813 Mar 15, 2026
8020954
fixed copy pom
Nandi0813 Mar 15, 2026
6132718
fixing build listener, still doesnt work
Nandi0813 Mar 15, 2026
6c02888
Merge branch 'dev' of https://github.com/ZoneDevelopement/ZonePractic…
Nandi0813 Mar 15, 2026
1df9137
fixed build rollback
Nandi0813 Mar 16, 2026
ab7dcc6
fixed backend error
Nandi0813 Mar 16, 2026
3fa7260
cleaned the code
Nandi0813 Mar 16, 2026
794f1e3
changed hologram from armor stands to text displays
Nandi0813 Mar 16, 2026
3df8454
merged all rollback related setting into BuildListener.java
Nandi0813 Mar 17, 2026
b1c14dd
disabled flower pot integration
Nandi0813 Mar 17, 2026
7ce7d18
fixed blockplaceevent to search by player not cuboid for rollback
Nandi0813 Mar 17, 2026
235d2ec
changed LICENSE to 2026
Nandi0813 Mar 17, 2026
6b223de
added kit change command to FFA to allow players to switch between ki…
Nandi0813 Mar 17, 2026
13ba09b
added rematch request invalidation
Nandi0813 Mar 17, 2026
7d7a21a
implemented multi block support for splegg event
Nandi0813 Mar 17, 2026
630780c
changed armor stand markers to mannequins
Nandi0813 Mar 17, 2026
8aff2b1
fixed possible NPE
Nandi0813 Mar 17, 2026
5717886
fixed possible IllegalStateException
Nandi0813 Mar 17, 2026
5d985f6
fixed sound effect play when there is in the chat
Nandi0813 Mar 17, 2026
8d0bf9d
fixed eventdata spawn removal on restart
Nandi0813 Mar 17, 2026
8778117
fixed IndexOutOfBoundsException
Nandi0813 Mar 17, 2026
4d9efb8
fixed new manequin spawn marker
Nandi0813 Mar 17, 2026
ce18e85
added cooldown for markers
Nandi0813 Mar 17, 2026
358ece6
fixed portal frame creation to use END_PORTAL instead
Nandi0813 Mar 17, 2026
2d4715a
disabled portal teleport in arena worlds
Nandi0813 Mar 17, 2026
a86fd47
changed version to 7.0.0-SNAPSHOT
Nandi0813 Mar 17, 2026
f99263f
Potential fix for pull request finding 'Dereferenced variable may be …
Nandi0813 Mar 17, 2026
9766c1f
Update core/src/main/java/dev/nandi0813/practice/manager/ladder/abstr…
Nandi0813 Mar 17, 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
10 changes: 0 additions & 10 deletions .github/workflows/maven-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,6 @@ jobs:
distribution: 'temurin'
cache: 'maven'

- name: Install Local Dependencies
run: |
mvn install:install-file \
-Dfile=libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar \
-DgroupId=org.github.paperspigot \
-DartifactId=paperspigot-api \
-Dversion=1.8.8-R0.1-SNAPSHOT \
-Dpackaging=jar \
-DgeneratePom=true

- name: Build with Maven
run: mvn -B clean install --file pom.xml

Expand Down
15 changes: 0 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,6 @@ jobs:
distribution: 'temurin'
cache: 'maven'

- name: Install Local Dependencies
run: |
# Ensure this path matches your repo structure
if [ -f "libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar" ]; then
mvn install:install-file \
-Dfile=libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar \
-DgroupId=org.github.paperspigot \
-DartifactId=paperspigot-api \
-Dversion=1.8.8-R0.1-SNAPSHOT \
-Dpackaging=jar \
-DgeneratePom=true
else
echo "Warning: Local dependency not found, skipping install."
fi

- name: Check Version & Tag
id: check_version
run: |
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,4 @@ test_servers/

# Local scripts
reset-dev.sh
CLAUDE.md
AGENTS.md
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 ZonePractice contributors
Copyright (c) 2026 ZonePractice contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
16 changes: 4 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ For detailed guides on setup, configuration, and feature usage, please visit our

## Supported Versions

- Primary targets: **1.8.8**, **1.8.9** (legacy), and **modern 1.20.6 / 1.21.X**
- Primary targets: **1.20.6 / 1.21.X**
- Actual supported versions are detected at runtime via the `VersionChecker`
- The plugin automatically disables itself on unsupported versions

Expand All @@ -45,11 +45,8 @@ shaded into ZonePractice.

## Repository Structure

- **core/** – main logic and shared systems (`practice-core-*.jar`)
- **spigot_1_8_8/** – legacy 1.8.8 platform build
- **spigot_modern/** – modern 1.20.x / 1.21.x builds
- **core/** – main logic (`practice-core-*.jar`)
- **distribution/** – release packaging (`ZonePractice Pro v*.jar`)
- **libs/** – helper jars and forked server builds for development

---

Expand All @@ -74,11 +71,6 @@ system before cloning or pulling updates:
## Building

1. **Prerequisites:** Install JDK (Java 21 recommended for modern builds, _it is not gonna work on Java 25_) and Maven.
2. **Install Local Dependencies:**
Since the PaperSpigot API is not available in public repositories, install it manually from the `libs` folder:
```bash
mvn install:install-file -Dfile=libs/PaperSpigot-1.8.8-R0.1-SNAPSHOT.jar -DgroupId=org.github.paperspigot -DartifactId=paperspigot-api -Dversion=1.8.8-R0.1-SNAPSHOT -Dpackaging=jar -DgeneratePom=true
```
3. **Build the Project:**
```bash
mvn clean package
Expand All @@ -94,7 +86,7 @@ system before cloning or pulling updates:

- Default configuration files are generated automatically. Templates live under `core/src/main/resources/<version>/` (
e.g., `config.yml`, `divisions.yml`, `guis.yml`, `inventories.yml`).
- `config.yml` includes a `VERSION` field (e.g., 13 for the legacy 1.8.8 template). Review updated templates when
- `config.yml` includes a `VERSION` field (e.g., 13). Review updated templates when
upgrading.
- Optional MySQL storage is available via the `MYSQL-DATABASE` section; back up configs before enabling.
- Read console output for version validation, warnings and load messages.
Expand Down Expand Up @@ -256,7 +248,7 @@ Defined in `plugin.yml`:

### MySQL Errors

- Verify MySQL settings in `1.8.8/config.yml` or `modern/config.yml`
- Verify MySQL settings in `config.yml`
- Ensure the database accepts external connections
- JDBC is handled via `DriverManager`; ensure a suitable MySQL driver is available

Expand Down
52 changes: 46 additions & 6 deletions 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.6-SNAPSHOT</version>
<version>7.0.0-SNAPSHOT</version>
</parent>

<artifactId>practice-core</artifactId>
Expand All @@ -19,8 +19,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
</plugins>
Expand All @@ -32,6 +32,27 @@
</resources>
</build>

<repositories>
<!-- FAWE -->
<repository>
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</repositories>

<!-- FAWE -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.intellectualsites.bom</groupId>
<artifactId>bom-newest</artifactId> <!-- Ref: https://github.com/IntellectualSites/bom -->
<version>1.55</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<!-- JSON -->
<dependency>
Expand All @@ -42,9 +63,9 @@

<!-- Paper Spigot -->
<dependency>
<groupId>org.github.paperspigot</groupId>
<artifactId>paperspigot-api</artifactId>
<version>1.8.8-R0.1-SNAPSHOT</version>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.21.11-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

Expand Down Expand Up @@ -83,6 +104,25 @@
<version>5.5.0</version>
<scope>provided</scope>
</dependency>

<!-- FAWE -->
<dependency>
<groupId>com.fastasyncworldedit</groupId>
<artifactId>FastAsyncWorldEdit-Core</artifactId>
<scope>provided</scope>
</dependency>
<!-- FAWE -->
<dependency>
<groupId>com.fastasyncworldedit</groupId>
<artifactId>FastAsyncWorldEdit-Bukkit</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>FastAsyncWorldEdit-Core</artifactId>
<groupId>*</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

</project>
30 changes: 22 additions & 8 deletions core/src/main/java/dev/nandi0813/practice/ZonePractice.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,21 @@
import dev.nandi0813.practice.command.staff.StaffCommand;
import dev.nandi0813.practice.command.statistics.StatisticsCommand;
import dev.nandi0813.practice.listener.*;
import dev.nandi0813.practice.manager.arena.ArenaListener;
import dev.nandi0813.practice.manager.arena.ArenaManager;
import dev.nandi0813.practice.manager.arena.listener.ArenaCopyUtilListener;
import dev.nandi0813.practice.manager.arena.listener.ArenaListener;
import dev.nandi0813.practice.manager.arena.setup.SpawnMarkerManager;
import dev.nandi0813.practice.manager.arena.util.ArenaWorldUtil;
import dev.nandi0813.practice.manager.backend.*;
import dev.nandi0813.practice.manager.division.DivisionManager;
import dev.nandi0813.practice.manager.fight.event.EventManager;
import dev.nandi0813.practice.manager.fight.ffa.FFAListener;
import dev.nandi0813.practice.manager.fight.ffa.FFAManager;
import dev.nandi0813.practice.manager.fight.listener.BuildBlockListener;
import dev.nandi0813.practice.manager.fight.listener.BuildListener;
import dev.nandi0813.practice.manager.fight.listener.EPCountdownListener;
import dev.nandi0813.practice.manager.fight.listener.FireworkRocketCooldownListener;
import dev.nandi0813.practice.manager.fight.match.MatchManager;
import dev.nandi0813.practice.manager.fight.util.EntityHider;
import dev.nandi0813.practice.manager.fight.util.EntityHiderListener;
import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager;
import dev.nandi0813.practice.manager.inventory.InventoryManager;
Expand All @@ -44,10 +49,7 @@
import dev.nandi0813.practice.manager.profile.ProfileManager;
import dev.nandi0813.practice.manager.server.ServerManager;
import dev.nandi0813.practice.manager.sidebar.SidebarManager;
import dev.nandi0813.practice.module.util.ClassImport;
import dev.nandi0813.practice.module.util.VersionChecker;
import dev.nandi0813.practice.util.*;
import dev.nandi0813.practice.util.UpdateChecker;
import dev.nandi0813.practice.util.placeholderapi.PlayerExpansion;
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
import lombok.Getter;
Expand All @@ -74,6 +76,10 @@ public final class ZonePractice extends JavaPlugin {
private static BukkitAudiences adventure;
@Getter
private static MiniMessage miniMessage;
@Getter
private static EntityHider entityHider;
@Getter
private static ArenaCopyUtilListener arenaCopyUtilListener;

@Getter
private static volatile boolean fullyLoaded = false;
Expand All @@ -91,11 +97,14 @@ public void onEnable() {
instance = this;
adventure = BukkitAudiences.create(this);
miniMessage = MiniMessage.miniMessage();
entityHider = new EntityHider(this, EntityHider.Policy.BLACKLIST);
arenaCopyUtilListener = new ArenaCopyUtilListener();

PacketEvents.getAPI().init();
metrics = new Metrics(this, 16055);

if (VersionChecker.getBukkitVersion() == null) {
Common.sendConsoleMMMessage("<red>Unsupported server version! Please use 1.8.8 or 1.8.9 or 1.20.6 or 1.21.X");
Common.sendConsoleMMMessage("<red>Unsupported server version! Please use 1.20.6 or 1.21.X");
Bukkit.getPluginManager().disablePlugin(this);
return;
}
Expand Down Expand Up @@ -354,8 +363,6 @@ private void loadPlaceholderAPI() {
* It registers all the events that are used in the plugin
*/
private void registerListeners(PluginManager pm) {
pm.registerEvents(new BuildBlockListener(), this);
pm.registerEvents(ClassImport.getClasses().getBuildListener(), this);

pm.registerEvents(new PlayerPreLogin(), this);
pm.registerEvents(new PlayerJoin(), this);
Expand All @@ -367,6 +374,13 @@ private void registerListeners(PluginManager pm) {
pm.registerEvents(new PlayerCommandPreprocess(), this);
pm.registerEvents(new EntityDamage(), this);
pm.registerEvents(new ArenaListener(), this);
pm.registerEvents(new StatisticListener(), this);
pm.registerEvents(arenaCopyUtilListener, this);
pm.registerEvents(new BuildListener(), this);
pm.registerEvents(new FFAListener(), this);
pm.registerEvents(new EPCountdownListener(), this);
pm.registerEvents(new FireworkRocketCooldownListener(), this);
pm.registerEvents(new PlayerChatListener(), this);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import dev.nandi0813.practice.manager.arena.ArenaManager;
import dev.nandi0813.practice.manager.arena.arenas.interfaces.DisplayArena;
import dev.nandi0813.practice.manager.backend.LanguageManager;
import dev.nandi0813.practice.manager.fight.util.PlayerUtil;
import dev.nandi0813.practice.manager.gui.GUIManager;
import dev.nandi0813.practice.manager.gui.GUIType;
import dev.nandi0813.practice.manager.gui.setup.arena.ArenaGUISetupManager;
import dev.nandi0813.practice.module.util.ClassImport;
import dev.nandi0813.practice.util.Common;
import org.bukkit.Material;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -41,8 +41,8 @@ public static void run(Player player, String label, String[] args) {
return;
}

ItemStack icon = ClassImport.getClasses().getPlayerUtil().getPlayerMainHand(player);
if (icon == null || icon.getType().equals(Material.AIR)) {
ItemStack icon = PlayerUtil.getPlayerMainHand(player);
if (icon.getType().equals(Material.AIR)) {
Common.sendMMMessage(player, LanguageManager.getString("COMMAND.ARENA.ARGUMENTS.ICON.ICON-IN-HAND"));
return;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package dev.nandi0813.practice.command.event.arguments.Events;

import dev.nandi0813.practice.command.event.arguments.SpawnPointArg;
import dev.nandi0813.practice.manager.backend.LanguageManager;
import dev.nandi0813.practice.manager.fight.event.EventManager;
import dev.nandi0813.practice.manager.fight.event.enums.EventType;
import dev.nandi0813.practice.manager.fight.event.events.duel.brackets.BracketsData;
import dev.nandi0813.practice.manager.fight.event.util.EventUtil;
import dev.nandi0813.practice.module.interfaces.KitData;
import dev.nandi0813.practice.util.Common;
import dev.nandi0813.practice.util.KitData;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package dev.nandi0813.practice.command.event.arguments.Events;

import dev.nandi0813.practice.command.event.arguments.SpawnPointArg;
import dev.nandi0813.practice.manager.backend.LanguageManager;
import dev.nandi0813.practice.manager.fight.event.EventManager;
import dev.nandi0813.practice.manager.fight.event.enums.EventType;
import dev.nandi0813.practice.manager.fight.event.events.onevsall.juggernaut.JuggernautData;
import dev.nandi0813.practice.manager.fight.event.util.EventUtil;
import dev.nandi0813.practice.module.interfaces.KitData;
import dev.nandi0813.practice.util.Common;
import dev.nandi0813.practice.util.KitData;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package dev.nandi0813.practice.command.event.arguments.Events;

import dev.nandi0813.practice.command.event.arguments.SpawnPointArg;
import dev.nandi0813.practice.manager.backend.LanguageManager;
import dev.nandi0813.practice.manager.fight.event.EventManager;
import dev.nandi0813.practice.manager.fight.event.enums.EventType;
import dev.nandi0813.practice.manager.fight.event.events.ffa.lms.LMSData;
import dev.nandi0813.practice.manager.fight.event.util.EventUtil;
import dev.nandi0813.practice.module.interfaces.KitData;
import dev.nandi0813.practice.util.Common;
import dev.nandi0813.practice.util.KitData;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package dev.nandi0813.practice.command.event.arguments.Events;

import dev.nandi0813.practice.command.event.arguments.SpawnPointArg;
import dev.nandi0813.practice.manager.backend.LanguageManager;
import dev.nandi0813.practice.manager.fight.event.EventManager;
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 dev.nandi0813.practice.util.KitData;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;

Expand Down
Loading
Loading