From b573b964d0ba277138711cf4a053a6de76886768 Mon Sep 17 00:00:00 2001 From: OceanTw Date: Wed, 5 Nov 2025 13:52:12 -0600 Subject: [PATCH 1/5] Fixed class casting (CustomMatch -> Match) --- .../lrxh/neptune/game/match/MatchService.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java index 3507a4d9..6f9b67a7 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java @@ -3,6 +3,7 @@ import dev.lrxh.api.events.MatchReadyEvent; import dev.lrxh.api.match.IMatch; import dev.lrxh.api.match.IMatchService; +import dev.lrxh.api.match.participant.IParticipant; import dev.lrxh.neptune.API; import dev.lrxh.neptune.Neptune; import dev.lrxh.neptune.game.arena.Arena; @@ -19,6 +20,7 @@ import org.bukkit.entity.Player; import java.util.*; +import java.util.stream.Collectors; public class MatchService implements IMatchService { private static MatchService instance; @@ -105,8 +107,23 @@ public void startMatch(IMatch match) { return; } - matches.add((Match) match); - new MatchStartRunnable((Match) match).start(0L, 20L); + List participants = new ArrayList<>(); + for (IParticipant participant : match.getParticipants()) { + participants.add((Participant) participant); + } + + Match neptuneMatch = new SoloFightMatch( + (Arena) match.getArena(), + (Kit) match.getKit(), + true, + participants, + participants.getFirst(), + participants.getLast(), + 1 + ); + + matches.add(neptuneMatch); + new MatchStartRunnable(neptuneMatch).start(0L, 20L); } public Optional getMatch(Player player) { From d5fbd392ee9190ff29d12220399c3da36e5157e9 Mon Sep 17 00:00:00 2001 From: Ocean Date: Wed, 5 Nov 2025 15:13:22 -0600 Subject: [PATCH 2/5] Added .copyFrom methods for Arenas and Kits --- .../java/dev/lrxh/neptune/game/arena/Arena.java | 4 ++++ .../java/dev/lrxh/neptune/game/kit/Kit.java | 17 +++++++++++++++++ .../lrxh/neptune/game/match/MatchService.java | 4 ++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java b/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java index 93356c21..9d3f8ef4 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java @@ -262,4 +262,8 @@ public boolean equals(Object o) { } return false; } + + public static Arena copyFrom(IArena arena) { + return new Arena(arena.getName(), arena.getDisplayName(), arena.getRedSpawn(), arena.getBlueSpawn(), arena.getMin(), arena.getMax(), arena.getBuildLimit(), arena.isEnabled(), arena.getWhitelistedBlocks(), arena.getDeathY()); + } } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java b/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java index 19d8aac5..e1e642e7 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java @@ -275,4 +275,21 @@ public boolean equals(Object o) { return false; } + + public static Kit copyFrom(IKit kit) { + return new Kit( + kit.getName(), + kit.getDisplayName(), + kit.getItems(), + kit.getAllArenas().stream().map(Arena::copyFrom).collect(HashSet::new, HashSet::add, HashSet::addAll), + kit.getIcon(), + kit.getRule().entrySet().stream().collect(HashMap::new, + (map, entry) -> map.put((KitRule) entry.getKey(), entry.getValue()), HashMap::putAll), + kit.getSlot(), + kit.getHealth(), + kit.getKitEditorSlot(), + kit.getPotionEffects(), + kit.getDamageMultiplier() + ); + } } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java index 6f9b67a7..fb8def41 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java @@ -113,8 +113,8 @@ public void startMatch(IMatch match) { } Match neptuneMatch = new SoloFightMatch( - (Arena) match.getArena(), - (Kit) match.getKit(), + Arena.copyFrom(match.getArena()), + Kit.copyFrom(match.getKit()), true, participants, participants.getFirst(), From 86c1869d86dc90ee6895cabebdafa26efef911cf Mon Sep 17 00:00:00 2001 From: Ocean Date: Wed, 5 Nov 2025 16:36:51 -0600 Subject: [PATCH 3/5] Changed start match usage --- API/src/main/java/dev/lrxh/api/match/IMatchService.java | 4 +++- .../java/dev/lrxh/neptune/game/match/MatchService.java | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/API/src/main/java/dev/lrxh/api/match/IMatchService.java b/API/src/main/java/dev/lrxh/api/match/IMatchService.java index 8e4e1746..5c7f33c9 100644 --- a/API/src/main/java/dev/lrxh/api/match/IMatchService.java +++ b/API/src/main/java/dev/lrxh/api/match/IMatchService.java @@ -1,5 +1,7 @@ package dev.lrxh.api.match; +import org.bukkit.entity.Player; + public interface IMatchService { - void startMatch(IMatch match); + void startMatch(IMatch match, Player redPlayer, Player bluePlayer); } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java index fb8def41..ff79cfda 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java @@ -98,7 +98,7 @@ public void startMatch(List participants, Kit kit, Arena arena) { } @Override - public void startMatch(IMatch match) { + public void startMatch(IMatch match, Player redPlayer, Player bluePlayer) { if (!Neptune.get().isAllowMatches()) return; MatchReadyEvent event = new MatchReadyEvent(match); @@ -116,9 +116,9 @@ public void startMatch(IMatch match) { Arena.copyFrom(match.getArena()), Kit.copyFrom(match.getKit()), true, - participants, - participants.getFirst(), - participants.getLast(), + new ArrayList<>(), + new Participant(redPlayer), + new Participant(bluePlayer), 1 ); From b868d81e9af3e25f09893c591ddd38abffb60bf6 Mon Sep 17 00:00:00 2001 From: Ocean Date: Wed, 5 Nov 2025 17:04:48 -0600 Subject: [PATCH 4/5] Moved copyFrom methods to services --- .../dev/lrxh/neptune/game/arena/Arena.java | 4 ---- .../lrxh/neptune/game/arena/ArenaService.java | 3 +++ .../java/dev/lrxh/neptune/game/kit/Kit.java | 18 +----------------- .../dev/lrxh/neptune/game/kit/KitService.java | 17 +++++++++++++++++ .../lrxh/neptune/game/match/MatchService.java | 6 ++++-- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java b/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java index 9d3f8ef4..93356c21 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/arena/Arena.java @@ -262,8 +262,4 @@ public boolean equals(Object o) { } return false; } - - public static Arena copyFrom(IArena arena) { - return new Arena(arena.getName(), arena.getDisplayName(), arena.getRedSpawn(), arena.getBlueSpawn(), arena.getMin(), arena.getMax(), arena.getBuildLimit(), arena.isEnabled(), arena.getWhitelistedBlocks(), arena.getDeathY()); - } } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/arena/ArenaService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/arena/ArenaService.java index d9ac2949..da91771d 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/arena/ArenaService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/arena/ArenaService.java @@ -109,6 +109,9 @@ public Arena getArenaByName(String arenaName) { return null; } + public Arena copyFrom(IArena arena) { + return new Arena(arena.getName(), arena.getDisplayName(), arena.getRedSpawn(), arena.getBlueSpawn(), arena.getMin(), arena.getMax(), arena.getBuildLimit(), arena.isEnabled(), arena.getWhitelistedBlocks(), arena.getDeathY()); + } @Override public ConfigFile getConfigFile() { diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java b/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java index e1e642e7..5c2fa007 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/kit/Kit.java @@ -6,6 +6,7 @@ import dev.lrxh.neptune.API; import dev.lrxh.neptune.configs.impl.SettingsLocale; import dev.lrxh.neptune.game.arena.Arena; +import dev.lrxh.neptune.game.arena.ArenaService; import dev.lrxh.neptune.game.kit.impl.KitRule; import dev.lrxh.neptune.game.match.impl.participant.Participant; import dev.lrxh.neptune.profile.ProfileService; @@ -275,21 +276,4 @@ public boolean equals(Object o) { return false; } - - public static Kit copyFrom(IKit kit) { - return new Kit( - kit.getName(), - kit.getDisplayName(), - kit.getItems(), - kit.getAllArenas().stream().map(Arena::copyFrom).collect(HashSet::new, HashSet::add, HashSet::addAll), - kit.getIcon(), - kit.getRule().entrySet().stream().collect(HashMap::new, - (map, entry) -> map.put((KitRule) entry.getKey(), entry.getValue()), HashMap::putAll), - kit.getSlot(), - kit.getHealth(), - kit.getKitEditorSlot(), - kit.getPotionEffects(), - kit.getDamageMultiplier() - ); - } } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/kit/KitService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/kit/KitService.java index 22d3ab15..c6f03b1f 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/kit/KitService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/kit/KitService.java @@ -159,4 +159,21 @@ public ConfigFile getConfigFile() { public LinkedHashSet getAllKits() { return new LinkedHashSet<>(kits); } + + public Kit copyFrom(IKit kit) { + return new Kit( + kit.getName(), + kit.getDisplayName(), + kit.getItems(), + kit.getAllArenas().stream().map(ArenaService.get()::copyFrom).collect(HashSet::new, HashSet::add, HashSet::addAll), + kit.getIcon(), + kit.getRule().entrySet().stream().collect(HashMap::new, + (map, entry) -> map.put((KitRule) entry.getKey(), entry.getValue()), HashMap::putAll), + kit.getSlot(), + kit.getHealth(), + kit.getKitEditorSlot(), + kit.getPotionEffects(), + kit.getDamageMultiplier() + ); + } } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java index ff79cfda..de8ba0a9 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java @@ -7,7 +7,9 @@ import dev.lrxh.neptune.API; import dev.lrxh.neptune.Neptune; import dev.lrxh.neptune.game.arena.Arena; +import dev.lrxh.neptune.game.arena.ArenaService; import dev.lrxh.neptune.game.kit.Kit; +import dev.lrxh.neptune.game.kit.KitService; import dev.lrxh.neptune.game.match.impl.ffa.FfaFightMatch; import dev.lrxh.neptune.game.match.impl.participant.Participant; import dev.lrxh.neptune.game.match.impl.participant.ParticipantColor; @@ -113,8 +115,8 @@ public void startMatch(IMatch match, Player redPlayer, Player bluePlayer) { } Match neptuneMatch = new SoloFightMatch( - Arena.copyFrom(match.getArena()), - Kit.copyFrom(match.getKit()), + ArenaService.get().copyFrom(match.getArena()), + KitService.get().copyFrom(match.getKit()), true, new ArrayList<>(), new Participant(redPlayer), From 5a57378df1403ee0b3408a60699dc997fad466ec Mon Sep 17 00:00:00 2001 From: Ocean Date: Wed, 5 Nov 2025 17:14:16 -0600 Subject: [PATCH 5/5] Now using virtual arenas system --- .../lrxh/neptune/game/match/MatchService.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java index 3c2d7d13..d4697ff7 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/game/match/MatchService.java @@ -115,18 +115,20 @@ public void startMatch(IMatch match, Player redPlayer, Player bluePlayer) { participants.add((Participant) participant); } - Match neptuneMatch = new SoloFightMatch( - ArenaService.get().copyFrom(match.getArena()), - KitService.get().copyFrom(match.getKit()), - true, - new ArrayList<>(), - new Participant(redPlayer), - new Participant(bluePlayer), - 1 - ); - - matches.add(neptuneMatch); - new MatchStartRunnable(neptuneMatch).start(0L, 20L); + ArenaService.get().copyFrom(match.getArena()).createDuplicate().thenAccept(virtualArena ->{ + Match neptuneMatch = new SoloFightMatch( + virtualArena, + KitService.get().copyFrom(match.getKit()), + true, + new ArrayList<>(), + new Participant(redPlayer), + new Participant(bluePlayer), + 1 + ); + + matches.add(neptuneMatch); + new MatchStartRunnable(neptuneMatch).start(0L, 20L); + }); } public Optional getMatch(Player player) {