From 867624f9805cc7f46ff865ca21699463ad06d7e8 Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 9 Sep 2021 22:32:24 +0200 Subject: [PATCH] Rename and clean up MapleMiniDungeon --- src/main/java/net/server/channel/Channel.java | 6 +-- src/main/java/net/server/world/World.java | 2 +- src/main/java/server/maps/MapleMap.java | 4 +- ...MapleMiniDungeon.java => MiniDungeon.java} | 53 ++++++++++--------- 4 files changed, 34 insertions(+), 31 deletions(-) rename src/main/java/server/maps/{MapleMiniDungeon.java => MiniDungeon.java} (84%) diff --git a/src/main/java/net/server/channel/Channel.java b/src/main/java/net/server/channel/Channel.java index a417b62e2c..22df3ccff9 100644 --- a/src/main/java/net/server/channel/Channel.java +++ b/src/main/java/net/server/channel/Channel.java @@ -74,7 +74,7 @@ public final class Channel { private final Map storedVars = new HashMap<>(); private Set playersAway = new HashSet<>(); private Map expeditions = new HashMap<>(); - private Map dungeons = new HashMap<>(); + private Map dungeons = new HashMap<>(); private List expedType = new ArrayList<>(); private Set ownedMaps = Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<>())); private Event event; @@ -659,7 +659,7 @@ public final class Channel { if(dungeons.containsKey(dungeonid)) return false; MapleMiniDungeonInfo mmdi = MapleMiniDungeonInfo.getDungeon(dungeonid); - MapleMiniDungeon mmd = new MapleMiniDungeon(mmdi.getBase(), this.getMapFactory().getMap(mmdi.getDungeonId()).getTimeLimit()); // thanks Conrad for noticing hardcoded time limit for minidungeons + MiniDungeon mmd = new MiniDungeon(mmdi.getBase(), this.getMapFactory().getMap(mmdi.getDungeonId()).getTimeLimit()); // thanks Conrad for noticing hardcoded time limit for minidungeons dungeons.put(dungeonid, mmd); return true; @@ -668,7 +668,7 @@ public final class Channel { } } - public MapleMiniDungeon getMiniDungeon(int dungeonid) { + public MiniDungeon getMiniDungeon(int dungeonid) { lock.lock(); try { return dungeons.get(dungeonid); diff --git a/src/main/java/net/server/world/World.java b/src/main/java/net/server/world/World.java index 1a98b674d9..2fb2444feb 100644 --- a/src/main/java/net/server/world/World.java +++ b/src/main/java/net/server/world/World.java @@ -962,7 +962,7 @@ public class World { if (MapleMiniDungeonInfo.isDungeonMap(oldLeaderMapid)) { if (oldLeaderMapid != target.getMapId()) { - MapleMiniDungeon mmd = mc.getClient().getChannelServer().getMiniDungeon(oldLeaderMapid); + MiniDungeon mmd = mc.getClient().getChannelServer().getMiniDungeon(oldLeaderMapid); if(mmd != null) { mmd.close(); } diff --git a/src/main/java/server/maps/MapleMap.java b/src/main/java/server/maps/MapleMap.java index 959e58f2ea..d06f36ffdd 100644 --- a/src/main/java/server/maps/MapleMap.java +++ b/src/main/java/server/maps/MapleMap.java @@ -2444,7 +2444,7 @@ public class MapleMap { } }, travelTime); } else if (MapleMiniDungeonInfo.isDungeonMap(mapid)) { - MapleMiniDungeon mmd = chr.getClient().getChannelServer().getMiniDungeon(mapid); + MiniDungeon mmd = chr.getClient().getChannelServer().getMiniDungeon(mapid); if (mmd != null) { mmd.registerPlayer(chr); } @@ -2682,7 +2682,7 @@ public class MapleMap { } if (MapleMiniDungeonInfo.isDungeonMap(mapid)) { - MapleMiniDungeon mmd = cserv.getMiniDungeon(mapid); + MiniDungeon mmd = cserv.getMiniDungeon(mapid); if (mmd != null) { if (!mmd.unregisterPlayer(chr)) { cserv.removeMiniDungeon(mapid); diff --git a/src/main/java/server/maps/MapleMiniDungeon.java b/src/main/java/server/maps/MiniDungeon.java similarity index 84% rename from src/main/java/server/maps/MapleMiniDungeon.java rename to src/main/java/server/maps/MiniDungeon.java index 8da25004ad..ab98cdd525 100644 --- a/src/main/java/server/maps/MapleMiniDungeon.java +++ b/src/main/java/server/maps/MiniDungeon.java @@ -31,70 +31,73 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.Lock; /** - * * @author Ronan */ -public class MapleMiniDungeon { +public class MiniDungeon { List players = new ArrayList<>(); ScheduledFuture timeoutTask = null; Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MINIDUNGEON, true); - + int baseMap; long expireTime; - - public MapleMiniDungeon(int base, long timeLimit) { + + public MiniDungeon(int base, long timeLimit) { baseMap = base; expireTime = timeLimit * 1000; - + timeoutTask = TimerManager.getInstance().schedule(() -> close(), expireTime); - + expireTime += System.currentTimeMillis(); } - + public boolean registerPlayer(Character chr) { - int time = (int)((expireTime - System.currentTimeMillis()) / 1000); - if(time > 0) chr.sendPacket(PacketCreator.getClock(time)); - + int time = (int) ((expireTime - System.currentTimeMillis()) / 1000); + if (time > 0) { + chr.sendPacket(PacketCreator.getClock(time)); + } + lock.lock(); try { - if(timeoutTask == null) return false; - + if (timeoutTask == null) { + return false; + } + players.add(chr); } finally { lock.unlock(); } - + return true; } - + public boolean unregisterPlayer(Character chr) { chr.sendPacket(PacketCreator.removeClock()); - + lock.lock(); try { players.remove(chr); - - if(players.isEmpty()) { + + if (players.isEmpty()) { dispose(); return false; } } finally { lock.unlock(); } - + if (chr.isPartyLeader()) { // thanks Conrad for noticing party is not sent out of the MD as soon as leader leaves it close(); } - + return true; } - + public void close() { lock.lock(); try { List lchr = new ArrayList<>(players); - for(Character chr : lchr) { + for (Character chr : lchr) { chr.changeMap(baseMap); } @@ -104,13 +107,13 @@ public class MapleMiniDungeon { lock.unlock(); } } - + public void dispose() { lock.lock(); try { players.clear(); - - if(timeoutTask != null) { + + if (timeoutTask != null) { timeoutTask.cancel(false); timeoutTask = null; }