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)
{
{
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))
{
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();
}
{
return battleMap.get(id);
}
+
+ public void cleanup()
+ {
+ battleUpdater.setIsRunning(false);
+ battleUpdater = null;
+ updaterThread = null;
+ battleMap.clear();
+ }
}
\ No newline at end of file
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
{
Queue<Integer> endedQueue = new ArrayDeque<Integer>();
Integer ended;
- while(isRunning)
+ while(isRunning.get())
{
for(Battle e : manager.battleMap.values())
{
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 */ }
}
public void setIsRunning(boolean isRunning)
{
- this.isRunning = isRunning;
+ this.isRunning.set(isRunning);
}
}
\ No newline at end of file
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() {}
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;
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>();
PacketBattleMessage.class,
packetHandlerID++,
Side.CLIENT);
- logger.debug("INIT");
// register event handler(s)
MinecraftForge.EVENT_BUS.register(new AttackEventHandler());
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()