private BattleMusic battleMusic;
private Logger logger;
private Config config;
+ private int battleMusicCount;
+ private int sillyMusicCount;
@Override
public void initialize()
{
battleGui = new BattleGui();
battleMusic = null; // will be initialized in postInit()
+ battleMusicCount = 0;
+ sillyMusicCount = 0;
}
@Override
Minecraft.getMinecraft().setIngameFocus();
});
stopMusic(true);
+ battleMusicCount = 0;
+ sillyMusicCount = 0;
}
@Override
@Override
public void typeEnteredBattle(String type)
{
+ if(TurnBasedMinecraftMod.currentBattle == null)
+ {
+ return;
+ }
if(type == null || type.isEmpty() || config.isBattleMusicType(type))
{
- if(battleMusic.isPlaying())
- {
- if(battleMusic.isPlayingSilly())
- {
- stopMusic(false);
- playBattleMusic();
- }
- }
- else
- {
- playBattleMusic();
- }
+ ++battleMusicCount;
}
else if(config.isSillyMusicType(type))
{
- if(battleMusic.isPlaying())
- {
- if(!battleMusic.isPlayingSilly())
- {
- stopMusic(false);
- playSillyMusic();
- }
- }
- else
- {
- playSillyMusic();
- }
+ ++sillyMusicCount;
+ }
+ else
+ {
+ ++battleMusicCount;
}
+ checkBattleTypes();
+ }
+
+ @Override
+ public void typeLeftBattle(String type)
+ {
+ if(TurnBasedMinecraftMod.currentBattle == null)
+ {
+ return;
+ }
+ if(type == null || type.isEmpty() || config.isBattleMusicType(type))
+ {
+ --battleMusicCount;
+ }
+ else if(config.isSillyMusicType(type))
+ {
+ --sillyMusicCount;
+ }
+ else
+ {
+ --battleMusicCount;
+ }
+ checkBattleTypes();
}
@Override
{
return Minecraft.getMinecraft().world.getEntityByID(id);
}
+
+ private void checkBattleTypes()
+ {
+ if(battleMusicCount <= 1 && sillyMusicCount > 0)
+ {
+ if(battleMusic.isPlaying())
+ {
+ if(!battleMusic.isPlayingSilly() && battleMusic.hasSillyMusic())
+ {
+ stopMusic(false);
+ playSillyMusic();
+ }
+ }
+ else if(battleMusic.hasSillyMusic())
+ {
+ playSillyMusic();
+ }
+ }
+ else
+ {
+ if(battleMusic.isPlaying())
+ {
+ if(battleMusic.isPlayingSilly() && battleMusic.hasBattleMusic())
+ {
+ stopMusic(false);
+ playBattleMusic();
+ }
+ }
+ else if(battleMusic.hasBattleMusic())
+ {
+ playBattleMusic();
+ }
+ }
+ }
}
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, c.entity.getEntityId(), 0, id, c.entityInfo.category);
}
+ else if(c.entity instanceof EntityPlayer)
+ {
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, c.entity.getEntityId(), 0, id, "player");
+ }
else
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, c.entity.getEntityId(), 0, id);
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, c.entity.getEntityId(), 0, id, c.entityInfo.category);
}
+ else if(c.entity instanceof EntityPlayer)
+ {
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, c.entity.getEntityId(), 0, id, "player");
+ }
else
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, c.entity.getEntityId(), 0, id);
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id, newCombatant.entityInfo.category);
}
+ else if(newCombatant.entity instanceof EntityPlayer)
+ {
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id, "player");
+ }
else
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id);
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id, newCombatant.entityInfo.category);
}
+ else if(newCombatant.entity instanceof EntityPlayer)
+ {
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id, "player");
+ }
else
{
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ENTERED, newCombatant.entity.getEntityId(), 0, id);
{
sideA.clear();
sideB.clear();
+ sideAEntryQueue.clear();
+ sideBEntryQueue.clear();
players.clear();
playerCount.set(0);
undecidedCount.set(0);
{
TurnBasedMinecraftMod.NWINSTANCE.sendTo(new PacketBattleMessage(PacketBattleMessage.MessageType.ENDED, c.entity.getEntityId(), 0, 0), (EntityPlayerMP)c.entity);
}
- sendMessageToAllPlayers(PacketBattleMessage.MessageType.DIED, c.entity.getEntityId(), 0, 0);
+ String category = new String();
+ if(c.entityInfo != null)
+ {
+ category = c.entityInfo.category;
+ }
+ else if(c.entity instanceof EntityPlayer)
+ {
+ category = "player";
+ }
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.DIED, c.entity.getEntityId(), 0, 0, category);
}
}
for(Combatant c : sideB.values())
{
TurnBasedMinecraftMod.NWINSTANCE.sendTo(new PacketBattleMessage(PacketBattleMessage.MessageType.ENDED, c.entity.getEntityId(), 0, 0), (EntityPlayerMP)c.entity);
}
- sendMessageToAllPlayers(PacketBattleMessage.MessageType.DIED, c.entity.getEntityId(), 0, 0);
+ String category = new String();
+ if(c.entityInfo != null)
+ {
+ category = c.entityInfo.category;
+ }
+ else if(c.entity instanceof EntityPlayer)
+ {
+ category = "player";
+ }
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.DIED, c.entity.getEntityId(), 0, 0, category);
}
}
boolean didRemove = !removeQueue.isEmpty();
}
else if(didRemove)
{
- notifyPlayersBattleInfo();
resetUndecidedCount();
}
return didRemove;
}
+ /**
+ * @return true if at least one combatant was removed
+ */
private boolean isCreativeCheck()
{
Queue<Integer> removeQueue = new ArrayDeque<Integer>();
}
if(didRemove)
{
- notifyPlayersBattleInfo();
resetUndecidedCount();
}
{
return true;
}
+ boolean combatantsChanged = false;
synchronized(sideAEntryQueue)
{
for(Combatant c = sideAEntryQueue.poll(); c != null; c = sideAEntryQueue.poll())
{
sideA.put(c.entity.getEntityId(), c);
+ combatantsChanged = true;
}
}
synchronized(sideBEntryQueue)
for(Combatant c = sideBEntryQueue.poll(); c != null; c = sideBEntryQueue.poll())
{
sideB.put(c.entity.getEntityId(), c);
+ combatantsChanged = true;
}
}
if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled())
}
else
{
- healthCheck();
- isCreativeCheck();
+ if(healthCheck())
+ {
+ combatantsChanged = true;
+ }
+ if(isCreativeCheck())
+ {
+ combatantsChanged = true;
+ }
}
break;
case ACTION:
{
sideB.remove(next.entity.getEntityId());
}
- sendMessageToAllPlayers(PacketBattleMessage.MessageType.FLEE, next.entity.getEntityId(), 0, 1);
+ combatantsChanged = true;
+ String fleeingCategory = new String();
+ if(next.entityInfo != null)
+ {
+ fleeingCategory = next.entityInfo.category;
+ }
+ else if(next.entity instanceof EntityPlayer)
+ {
+ fleeingCategory = "player";
+ }
+ sendMessageToAllPlayers(PacketBattleMessage.MessageType.FLEE, next.entity.getEntityId(), 0, 1, fleeingCategory);
if(next.entity instanceof EntityPlayer)
{
players.remove(next.entity.getEntityId());
}
state = State.DECISION;
undecidedCount.set(players.size());
- healthCheck();
- isCreativeCheck();
+ if(healthCheck())
+ {
+ combatantsChanged = true;
+ }
+ if(isCreativeCheck())
+ {
+ combatantsChanged = true;
+ }
FMLCommonHandler.instance().getMinecraftServerInstance().addScheduledTask(() -> {
sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_END, 0, 0, 0);
});
state = State.DECISION;
break;
} // switch(state)
+ if(combatantsChanged)
+ {
+ notifyPlayersBattleInfo();
+ }
return battleEnded;
} // update(final long dt)
}