Acutally fix duplicate ".. entered battle" message bug.
Fix potential crash bug.
This commit is contained in:
Stephen Seo 2018-10-18 14:47:40 +09:00
parent 967fed3164
commit 00961768b3
2 changed files with 61 additions and 18 deletions

View file

@ -1,6 +1,7 @@
package com.seodisparate.TurnBasedMinecraft.client; package com.seodisparate.TurnBasedMinecraft.client;
import java.io.IOException; import java.io.IOException;
import java.util.ConcurrentModificationException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -165,32 +166,44 @@ public class BattleGui extends GuiScreen
case ATTACK_TARGET: case ATTACK_TARGET:
info = "Who will you attack?"; info = "Who will you attack?";
int y = 30; int y = 30;
for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.proxy.getLocalBattle().getSideAEntrySet()) try
{ {
if(e.getValue().entity != null) for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.proxy.getLocalBattle().getSideAEntrySet())
{ {
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 60, y, 120, 20, e.getValue().entity.getName(), e.getKey(), true)); if(e.getValue().entity != null)
{
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 60, y, 120, 20, e.getValue().entity.getName(), e.getKey(), true));
}
else
{
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 60, y, 120, 20, "Unknown", e.getKey(), true));
}
y += 20;
} }
else } catch (ConcurrentModificationException e)
{ {
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width/4 - 60, y, 120, 20, "Unknown", e.getKey(), true)); // ignored
}
y += 20;
} }
y = 30; y = 30;
for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.proxy.getLocalBattle().getSideBEntrySet()) try
{ {
if(e.getValue().entity != null) for(Map.Entry<Integer, Combatant> e : TurnBasedMinecraftMod.proxy.getLocalBattle().getSideBEntrySet())
{ {
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 60, y, 120, 20, e.getValue().entity.getName(), e.getKey(), false)); if(e.getValue().entity != null)
{
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 60, y, 120, 20, e.getValue().entity.getName(), e.getKey(), false));
}
else
{
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 60, y, 120, 20, "Unknown", e.getKey(), false));
}
y += 20;
} }
else } catch (ConcurrentModificationException e)
{ {
buttonList.add(new EntitySelectionButton(ButtonAction.ATTACK_TARGET.getValue(), width*3/4 - 60, y, 120, 20, "Unknown", e.getKey(), false)); // ignored
}
y += 20;
} }
buttonList.add(new GuiButton(ButtonAction.CANCEL.getValue(), width/2 - 40, height - 120, 80, 20, "Cancel")); buttonList.add(new GuiButton(ButtonAction.CANCEL.getValue(), width/2 - 30, height - 120, 60, 20, "Cancel"));
break; break;
case ITEM_ACTION: case ITEM_ACTION:
info = "What will you do with an item?"; info = "What will you do with an item?";

View file

@ -256,11 +256,41 @@ public class Battle
public boolean hasCombatant(int entityID) public boolean hasCombatant(int entityID)
{ {
synchronized(sideAEntryQueue)
{
for(Combatant c : sideAEntryQueue)
{
if(c.entity.getEntityId() == entityID)
{
return true;
}
}
}
synchronized(sideBEntryQueue)
{
for(Combatant c : sideBEntryQueue)
{
if(c.entity.getEntityId() == entityID)
{
return true;
}
}
}
return sideA.containsKey(entityID) || sideB.containsKey(entityID); return sideA.containsKey(entityID) || sideB.containsKey(entityID);
} }
public boolean hasCombatantInSideA(int entityID) public boolean hasCombatantInSideA(int entityID)
{ {
synchronized(sideAEntryQueue)
{
for(Combatant c : sideAEntryQueue)
{
if(c.entity.getEntityId() == entityID)
{
return true;
}
}
}
return sideA.containsKey(entityID); return sideA.containsKey(entityID);
} }
@ -775,7 +805,7 @@ public class Battle
{ {
turnOrderQueue.add(c); turnOrderQueue.add(c);
} }
update(0); return update(0);
} }
else else
{ {