From bdb090f74b4185e4a75890e259e2c372e2a45604 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Thu, 20 Sep 2018 15:15:34 +0900 Subject: [PATCH] Fixes, change how BattleManager is initialized --- .../client/ClientProxy.java | 6 ++--- .../common/AttackEventHandler.java | 4 --- .../common/BattleManager.java | 12 ++++++++- .../common/BattleUpdater.java | 13 +++++----- .../common/CommonProxy.java | 23 ++++++++++++++++ .../common/TurnBasedMinecraftMod.java | 26 ++++++++++++++++--- 6 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java index aea1f95..7c63079 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java @@ -17,13 +17,13 @@ public class ClientProxy extends CommonProxy private Logger logger; private Config config; - public ClientProxy() + @Override + public void initialize() { - super(); battleGui = new BattleGui(); battleMusic = null; // will be initialized in postInit() } - + @Override public void setBattleGuiTime(int timeRemaining) { diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/AttackEventHandler.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/AttackEventHandler.java index 1fc1438..f816124 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/AttackEventHandler.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/AttackEventHandler.java @@ -63,10 +63,6 @@ public class AttackEventHandler { return; } - else if(TurnBasedMinecraftMod.battleManager == null) - { - TurnBasedMinecraftMod.battleManager = new BattleManager(TurnBasedMinecraftMod.logger); - } if(!isAttackerValid(event) && event.getEntity() != null && event.getSource().getTrueSource() != null && TurnBasedMinecraftMod.battleManager.checkAttack(event)) { diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleManager.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleManager.java index faae46b..a8f6e8e 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleManager.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleManager.java @@ -16,13 +16,15 @@ public class BattleManager private int IDCounter = 0; protected Map battleMap; private Thread updaterThread; + private BattleUpdater battleUpdater; private Logger logger; public BattleManager(Logger logger) { this.logger = logger; battleMap = new Hashtable(); - updaterThread = new Thread(new BattleUpdater(this)); + battleUpdater = new BattleUpdater(this); + updaterThread = new Thread(battleUpdater); updaterThread.start(); } @@ -169,4 +171,12 @@ public class BattleManager { return battleMap.get(id); } + + public void cleanup() + { + battleUpdater.setIsRunning(false); + battleUpdater = null; + updaterThread = null; + battleMap.clear(); + } } \ No newline at end of file diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java index eb0931c..9cec856 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java @@ -2,16 +2,17 @@ package com.seodisparate.TurnBasedMinecraft.common; import java.util.ArrayDeque; import java.util.Queue; +import java.util.concurrent.atomic.AtomicBoolean; public class BattleUpdater implements Runnable { private BattleManager manager; - private boolean isRunning; + private AtomicBoolean isRunning; public BattleUpdater(BattleManager manager) { this.manager = manager; - isRunning = true; + isRunning = new AtomicBoolean(true); } @Override @@ -19,7 +20,7 @@ public class BattleUpdater implements Runnable { Queue endedQueue = new ArrayDeque(); Integer ended; - while(isRunning) + while(isRunning.get()) { for(Battle e : manager.battleMap.values()) { @@ -28,11 +29,9 @@ public class BattleUpdater implements Runnable endedQueue.add(e.getId()); } } - ended = endedQueue.poll(); - while(ended != null) + for(ended = endedQueue.poll(); ended != null; ended = endedQueue.poll()) { manager.battleMap.remove(ended); - ended = endedQueue.poll(); } try { Thread.sleep(250); } catch (Exception e) { /* ignored */ } } @@ -40,6 +39,6 @@ public class BattleUpdater implements Runnable public void setIsRunning(boolean isRunning) { - this.isRunning = isRunning; + this.isRunning.set(isRunning); } } \ No newline at end of file diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java index 2d58ac0..cf03ad3 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java @@ -7,6 +7,29 @@ import net.minecraftforge.fml.common.FMLCommonHandler; public class CommonProxy { + public void initialize() {} + + public boolean initializeBattleManager() + { + if(TurnBasedMinecraftMod.battleManager == null) + { + TurnBasedMinecraftMod.battleManager = new BattleManager(TurnBasedMinecraftMod.logger); + return true; + } + return false; + } + + public boolean cleanupBattleManager () + { + if(TurnBasedMinecraftMod.battleManager != null) + { + TurnBasedMinecraftMod.battleManager.cleanup(); + TurnBasedMinecraftMod.battleManager = null; + return true; + } + return false; + } + public void setBattleGuiTime(int timeRemaining) {} public void setBattleGuiBattleChanged() {} diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java index 966602f..a45443f 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java @@ -19,6 +19,8 @@ import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppingEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.Side; @@ -59,12 +61,12 @@ public class TurnBasedMinecraftMod public void preInit(FMLPreInitializationEvent event) { logger = event.getModLog(); - logger.debug("PREINIT"); } @EventHandler public void init(FMLInitializationEvent event) { + commonProxy.initialize(); currentBattle = null; battleManager = null; attackerViaBow = new HashSet(); @@ -91,7 +93,6 @@ public class TurnBasedMinecraftMod PacketBattleMessage.class, packetHandlerID++, Side.CLIENT); - logger.debug("INIT"); // register event handler(s) MinecraftForge.EVENT_BUS.register(new AttackEventHandler()); @@ -103,7 +104,26 @@ public class TurnBasedMinecraftMod config = new Config(logger); commonProxy.setConfig(config); commonProxy.postInit(); - logger.debug("POSTINIT"); + } + + @EventHandler + public void serverStarting(FMLServerStartingEvent event) + { + logger.debug("About to initialize BattleManager"); + if(commonProxy.initializeBattleManager()) + { + logger.debug("Initialized BattleManager"); + } + } + + @EventHandler + public void serverStopping(FMLServerStoppingEvent event) + { + logger.debug("About to cleanup BattleManager"); + if(commonProxy.cleanupBattleManager()) + { + logger.debug("Cleaned up BattleManager"); + } } public static BattleManager getBattleManager()