import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import com.seodisparate.TurnBasedMinecraft.common.networking.PacketBattleInfo;
this.battleManager = battleManager;
this.isServer = isServer;
this.id = id;
- this.sideA = new Hashtable<Integer, Combatant>();
- this.sideB = new Hashtable<Integer, Combatant>();
- players = new Hashtable<Integer, Combatant>();
+ this.sideA = new ConcurrentHashMap<Integer, Combatant>();
+ this.sideB = new ConcurrentHashMap<Integer, Combatant>();
+ players = new ConcurrentHashMap<Integer, Combatant>();
turnOrderQueue = new PriorityQueue<Combatant>(new Combatant.CombatantComparator());
sideAEntryQueue = new ArrayDeque<Combatant>();
sideBEntryQueue = new ArrayDeque<Combatant>();
public int getSize()
{
- return sideA.size() + sideB.size();
+ synchronized(sideAEntryQueue)
+ {
+ synchronized(sideBEntryQueue)
+ {
+ return sideA.size() + sideB.size() + sideAEntryQueue.size() + sideBEntryQueue.size();
+ }
+ }
}
protected void notifyPlayersBattleInfo()
players.remove(entry.getKey());
removeCombatantPostRemove(entry.getValue());
didRemove = true;
- String category = new String();
+ String category = null;
if(entry.getValue().entityInfo != null)
{
category = entry.getValue().entityInfo.category;
players.remove(entry.getKey());
removeCombatantPostRemove(entry.getValue());
didRemove = true;
- String category = new String();
+ String category = null;
if(entry.getValue().entityInfo != null)
{
category = entry.getValue().entityInfo.category;
break;
}
}
- debugLog = "Actions end";
+ debugLog = "Actions almost end";
for(Combatant c : sideA.values())
{
c.decision = Decision.UNDECIDED;
{
combatantsChanged = true;
}
+ debugLog += ", adding task";
FMLCommonHandler.instance().getMinecraftServerInstance().addScheduledTask(() -> {
sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_END, 0, 0, 0);
});
+ debugLog = "Actions end";
break;
} // case ACTION
default:
state = State.DECISION;
break;
} // switch(state)
+ debugLog = "Update almost end";
if(combatantsChanged)
{
notifyPlayersBattleInfo();
removeCombatant(c);
}
}
+ debugLog = "Update end";
return battleEnded;
} // update(final long dt)
}
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
+import net.minecraft.entity.Entity;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
TurnBasedMinecraftMod.proxy.getLocalBattle().clearCombatants();
for(Integer id : message.sideA)
{
- TurnBasedMinecraftMod.proxy.getLocalBattle().addCombatantToSideA(Minecraft.getMinecraft().world.getEntityByID(id));
+ Entity e = Minecraft.getMinecraft().world.getEntityByID(id);
+ if(e != null)
+ {
+ TurnBasedMinecraftMod.proxy.getLocalBattle().addCombatantToSideA(e);
+ }
}
for(Integer id : message.sideB)
{
- TurnBasedMinecraftMod.proxy.getLocalBattle().addCombatantToSideB(Minecraft.getMinecraft().world.getEntityByID(id));
+ Entity e = Minecraft.getMinecraft().world.getEntityByID(id);
+ if(e != null)
+ {
+ TurnBasedMinecraftMod.proxy.getLocalBattle().addCombatantToSideB(e);
+ }
}
TurnBasedMinecraftMod.proxy.setBattleGuiTime((int)(message.decisionNanos / 1000000000L));
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();