From 3b26270e52c6075f5ee188c8a09388454e86d709 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 01:34:31 +0300 Subject: [PATCH 1/7] Enhance material check in ArenaUtil Added support for NETHER_PORTAL and END_GATEWAY materials in the material check. --- .../nandi0813/practice/manager/arena/util/ArenaUtil.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java index 41de4d2f..24400431 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/arena/util/ArenaUtil.java @@ -256,7 +256,9 @@ public static boolean requiresSupport(Block block) { || type == Material.TRIPWIRE_HOOK || type == Material.TRIPWIRE || type == Material.LILY_PAD - || type == Material.NETHER_WART; + || type == Material.NETHER_WART + || type == Material.NETHER_PORTAL // Portal blocks are destroyed by physics when their obsidian frame is broken. + || type == Material.END_GATEWAY; } public static void loadArenaChunks(BasicArena arena) { @@ -306,4 +308,4 @@ public static void setMannequinInvulnerable(Mannequin mannequin) { mannequin.setPersistent(false); } -} + } From 7601ee441a0aa50c816f6619ad3285700ee3cfd0 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 01:56:42 +0300 Subject: [PATCH 2/7] Refactor reset method in ChangedBlock class Refactor reset method to improve block state handling and fix issues with chest inventory. --- .../manager/fight/util/ChangedBlock.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java index 7244ad5a..793a1a1a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java @@ -111,34 +111,31 @@ public void reset() { if (location == null) return; if (bedFace != null) { - BedUtil.placeBed(location, bedFace); + BedUtil.placeBed(location, material, bedFace); return; } Block currentBlock = location.getBlock(); try { - // Set the block data directly - this is the primary method - currentBlock.setBlockData(blockData, false); - + BlockState state = currentBlock.getState(); + state.setBlockData(blockData); + state.update(true, false); // Handle chest inventory if present if (chestInventory != null) { - BlockState state = currentBlock.getState(); - if (state instanceof Chest chest) { + BlockState chestState = crrentBlock.getState); + if (chestState instanceof Chest chest) { chest.getInventory().setContents(chestInventory); chest.update(true, false); } } } catch (Exception e) { - // Handle BlockData compatibility issues - // Just set the block type without the problematic block data try { currentBlock.setBlockData(material.createBlockData(), false); } catch (Exception ex) { - // Ultimate fallback - just set material currentBlock.setType(material, false); } } } -} + } From 8215dca96a398c96d4c947ed49b13e00eb782863 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 02:01:31 +0300 Subject: [PATCH 3/7] Modify placeBed to use customizable bed material Updated placeBed method to accept bedMaterial parameter for customizable bed color. --- .../practice/manager/fight/util/BedUtil.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java index 7d804d56..d7086d34 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java @@ -32,16 +32,24 @@ public static BedLocation getBedLocation(Block block) { return new BedLocation(bedLoc.getWorld(), bedLoc.getX(), bedLoc.getY(), bedLoc.getZ(), bed.getFacing()); } - public static void placeBed(Location loc, BlockFace face) { + /** + * Places a bed at {@code loc} with the given {@code facing}. + * Uses {@code bedMaterial} so the correct bed colour is restored rather than + * always defaulting to RED_BED. + */ + public static void placeBed(Location loc, Material bedMaterial, BlockFace face) { + if (bedMaterial == null || !bedMaterial.name().endsWith("_BED")) { + bedMaterial = Material.RED_BED; + } + Block bedFoot = loc.getBlock(); - bedFoot.setBlockData(Material.RED_BED.createBlockData()); - Bed bedFootData = (Bed) Bukkit.createBlockData(Material.RED_BED); + + Bed bedFootData = (Bed) Bukkit.createBlockData(bedMaterial); bedFootData.setPart(Bed.Part.FOOT); bedFootData.setFacing(face); Block bedHead = bedFoot.getRelative(face); - bedHead.setBlockData(Material.RED_BED.createBlockData()); - Bed bedHeadData = (Bed) Bukkit.createBlockData(Material.RED_BED); + Bed bedHeadData = (Bed) Bukkit.createBlockData(bedMaterial); bedHeadData.setPart(Bed.Part.HEAD); bedHeadData.setFacing(face); From e78d1e2958a1824dbdee1a142fb8bd4b2baf8554 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 02:13:20 +0300 Subject: [PATCH 4/7] Fix typo in ChangedBlock.java for currentBlock --- .../nandi0813/practice/manager/fight/util/ChangedBlock.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java index 793a1a1a..728325c4 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java @@ -123,7 +123,7 @@ public void reset() { state.update(true, false); // Handle chest inventory if present if (chestInventory != null) { - BlockState chestState = crrentBlock.getState); + BlockState chestState = currentBlock.getState(); if (chestState instanceof Chest chest) { chest.getInventory().setContents(chestInventory); chest.update(true, false); @@ -138,4 +138,4 @@ public void reset() { } } - } +} From 9051b3db6d9db341967a7f5fe73e3834316e1ab4 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 02:22:50 +0300 Subject: [PATCH 5/7] Nvm --- .../dev/nandi0813/practice/manager/fight/util/ChangedBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java index 728325c4..965dc82a 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/ChangedBlock.java @@ -111,7 +111,7 @@ public void reset() { if (location == null) return; if (bedFace != null) { - BedUtil.placeBed(location, material, bedFace); + BedUtil.placeBed(location, bedFace); return; } From 87e21ab28d3fa9e14d400ecc845671a82ffa37a5 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 02:24:02 +0300 Subject: [PATCH 6/7] Returning to default (no change) --- .../practice/manager/fight/util/BedUtil.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java index d7086d34..7d804d56 100644 --- a/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java +++ b/core/src/main/java/dev/nandi0813/practice/manager/fight/util/BedUtil.java @@ -32,24 +32,16 @@ public static BedLocation getBedLocation(Block block) { return new BedLocation(bedLoc.getWorld(), bedLoc.getX(), bedLoc.getY(), bedLoc.getZ(), bed.getFacing()); } - /** - * Places a bed at {@code loc} with the given {@code facing}. - * Uses {@code bedMaterial} so the correct bed colour is restored rather than - * always defaulting to RED_BED. - */ - public static void placeBed(Location loc, Material bedMaterial, BlockFace face) { - if (bedMaterial == null || !bedMaterial.name().endsWith("_BED")) { - bedMaterial = Material.RED_BED; - } - + public static void placeBed(Location loc, BlockFace face) { Block bedFoot = loc.getBlock(); - - Bed bedFootData = (Bed) Bukkit.createBlockData(bedMaterial); + bedFoot.setBlockData(Material.RED_BED.createBlockData()); + Bed bedFootData = (Bed) Bukkit.createBlockData(Material.RED_BED); bedFootData.setPart(Bed.Part.FOOT); bedFootData.setFacing(face); Block bedHead = bedFoot.getRelative(face); - Bed bedHeadData = (Bed) Bukkit.createBlockData(bedMaterial); + bedHead.setBlockData(Material.RED_BED.createBlockData()); + Bed bedHeadData = (Bed) Bukkit.createBlockData(Material.RED_BED); bedHeadData.setPart(Bed.Part.HEAD); bedHeadData.setFacing(face); From a1fad92e073bc4bb03c43e44494f64aed97fbb65 Mon Sep 17 00:00:00 2001 From: yowsef <70838519+Yow-sef@users.noreply.github.com> Date: Fri, 29 May 2026 17:30:53 +0300 Subject: [PATCH 7/7] Fix player removal from match on quit Ensure player is removed from match on quit event. --- .../dev/nandi0813/practice/listener/PlayerQuit.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java b/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java index 00cad7a6..dd7df005 100644 --- a/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java +++ b/core/src/main/java/dev/nandi0813/practice/listener/PlayerQuit.java @@ -48,6 +48,12 @@ public void onPlayerQuit(PlayerQuitEvent e) { MatchManager.getInstance().invalidateRematchByPlayer(player); + dev.nandi0813.practice.manager.fight.match.Match playerMatch = + MatchManager.getInstance().getPlayerMatches().get(player); + if (playerMatch != null) { + playerMatch.removePlayer(player, true); + } + if (profile != null) { profile.getActionBar().resetForReconnect(); @@ -87,6 +93,13 @@ public void onPlayerKick(PlayerKickEvent e) { MatchManager.getInstance().invalidateRematchByPlayer(player); + // Same fix + dev.nandi0813.practice.manager.fight.match.Match playerMatch = + MatchManager.getInstance().getPlayerMatches().get(player); + if (playerMatch != null) { + playerMatch.removePlayer(player, true); + } + Profile profile = ProfileManager.getInstance().getProfile(player); if (profile != null) { profile.getActionBar().resetForReconnect();