]> git.seodisparate.com - TurnBasedMinecraftMod/commitdiff
Fixes, change how BattleManager is initialized
authorStephen Seo <seo.disparate@gmail.com>
Thu, 20 Sep 2018 06:15:34 +0000 (15:15 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Thu, 20 Sep 2018 06:15:34 +0000 (15:15 +0900)
src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/AttackEventHandler.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleManager.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java
src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java

index aea1f951df9e45cc80dca4a603838d53a21d1dab..7c630798ede11c92fe5017a118516ae5c5bf2eaf 100644 (file)
@@ -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)
     {
index 1fc14383006cf0ce84900fdf482b5d866d424ee3..f816124573ccc8e6fe02fddbe28ee47686c8d649 100644 (file)
@@ -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))
         {
index faae46bae207b7f871c3be5c1010e11312c1f3ef..a8f6e8e4b309fbf39fc4c5285f204b19b6a89d97 100644 (file)
@@ -16,13 +16,15 @@ public class BattleManager
     private int IDCounter = 0;
     protected Map<Integer, Battle> battleMap;
     private Thread updaterThread;
+    private BattleUpdater battleUpdater;
     private Logger logger;
     
     public BattleManager(Logger logger)
     {
         this.logger = logger;
         battleMap = new Hashtable<Integer, Battle>();
-        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
index eb0931cca1750bdf934ae36b52b5119d0541656e..9cec8562f52e9437a84cae1dc43cd186f139c7e4 100644 (file)
@@ -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<Integer> endedQueue = new ArrayDeque<Integer>();
         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
index 2d58ac0e341244667c93ca3eaabab3bf4ef33ec5..cf03ad31d3ae11b705865e5cd719974102b58ced 100644 (file)
@@ -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() {}
index 966602f2b355583cd3d6e312812dd6adbed97296..a45443fdeff776478434d90c4520fcb40309a7d8 100644 (file)
@@ -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<AttackerViaBow>();
@@ -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()