diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java index b448dfb..c8ae178 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java @@ -30,6 +30,7 @@ public class BattleMusic private Sequencer sequencer; private Clip clip; private boolean playingIsSilly; + private boolean isPlaying; public BattleMusic(Logger logger) { @@ -37,6 +38,7 @@ public class BattleMusic this.logger = logger; battleMusic = new ArrayList(); sillyMusic = new ArrayList(); + isPlaying = false; try { sequencer = MidiSystem.getSequencer(); @@ -159,6 +161,7 @@ public class BattleMusic play(nextBattle, volume); pickNextBattle(); playingIsSilly = false; + isPlaying = true; } public void playSilly(float volume) @@ -174,6 +177,7 @@ public class BattleMusic play(nextSilly, volume); pickNextSilly(); playingIsSilly = true; + isPlaying = true; } private void play(File next, float volume) @@ -237,7 +241,7 @@ public class BattleMusic } } - public void stopMusic() + public void stopMusic(boolean resumeMCSounds) { if(sequencer.isRunning()) { @@ -248,6 +252,13 @@ public class BattleMusic clip.stop(); clip.close(); } + if(resumeMCSounds) + { + Minecraft.getMinecraft().addScheduledTask(() -> { + Minecraft.getMinecraft().getSoundHandler().resumeSounds(); + }); + } + isPlaying = false; } public boolean isPlayingSilly() @@ -257,6 +268,6 @@ public class BattleMusic public boolean isPlaying() { - return sequencer.isRunning() || clip.isActive(); + return isPlaying || sequencer.isRunning() || clip.isActive(); } } diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java index 84eb76f..4ab8298 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/ClientProxy.java @@ -75,7 +75,7 @@ public class ClientProxy extends CommonProxy Minecraft.getMinecraft().displayGuiScreen(null); Minecraft.getMinecraft().setIngameFocus(); }); - stopMusic(); + stopMusic(true); } @Override @@ -103,9 +103,9 @@ public class ClientProxy extends CommonProxy } @Override - public void stopMusic() + public void stopMusic(boolean resumeMCSounds) { - battleMusic.stopMusic(); + battleMusic.stopMusic(resumeMCSounds); } /** @@ -120,7 +120,7 @@ public class ClientProxy extends CommonProxy { if(battleMusic.isPlayingSilly()) { - stopMusic(); + stopMusic(false); playBattleMusic(); } } @@ -135,7 +135,7 @@ public class ClientProxy extends CommonProxy { if(!battleMusic.isPlayingSilly()) { - stopMusic(); + stopMusic(false); playSillyMusic(); } } diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java index f69aa1c..b1338a6 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java @@ -36,6 +36,8 @@ public class Battle private Map sideB; private Map players; private PriorityQueue turnOrderQueue; + private Queue sideAEntryQueue; + private Queue sideBEntryQueue; private State state; private AtomicInteger playerCount; @@ -123,6 +125,8 @@ public class Battle this.sideB = new Hashtable(); players = new Hashtable(); turnOrderQueue = new PriorityQueue(new Combatant.CombatantComparator()); + sideAEntryQueue = new ArrayDeque(); + sideBEntryQueue = new ArrayDeque(); playerCount = new AtomicInteger(0); undecidedCount = new AtomicInteger(0); if(sideA != null) @@ -254,7 +258,17 @@ public class Battle Combatant newCombatant = new Combatant(e, entityInfo); newCombatant.isSideA = true; newCombatant.battleID = getId(); - sideA.put(e.getEntityId(), newCombatant); + if(isServer) + { + synchronized(sideAEntryQueue) + { + sideAEntryQueue.add(newCombatant); + } + } + else + { + sideA.put(e.getEntityId(), newCombatant); + } if(e instanceof EntityPlayer) { newCombatant.recalcSpeedOnCompare = true; @@ -293,7 +307,17 @@ public class Battle Combatant newCombatant = new Combatant(e, entityInfo); newCombatant.isSideA = false; newCombatant.battleID = getId(); - sideB.put(e.getEntityId(), newCombatant); + if(isServer) + { + synchronized(sideBEntryQueue) + { + sideBEntryQueue.add(newCombatant); + } + } + else + { + sideB.put(e.getEntityId(), newCombatant); + } if(e instanceof EntityPlayer) { newCombatant.recalcSpeedOnCompare = true; @@ -583,7 +607,11 @@ public class Battle */ public boolean update() { - if(battleEnded) + if(!isServer) + { + return false; + } + else if(battleEnded) { return true; } @@ -599,6 +627,20 @@ public class Battle { return true; } + synchronized(sideAEntryQueue) + { + for(Combatant c = sideAEntryQueue.poll(); c != null; c = sideAEntryQueue.poll()) + { + sideA.put(c.entity.getEntityId(), c); + } + } + synchronized(sideBEntryQueue) + { + for(Combatant c = sideBEntryQueue.poll(); c != null; c = sideBEntryQueue.poll()) + { + sideB.put(c.entity.getEntityId(), c); + } + } if(TurnBasedMinecraftMod.config.isFreezeCombatantsEnabled()) { enforceFreezePositions(); diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java index 1e70778..6800cc5 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java @@ -52,7 +52,7 @@ public class CommonProxy public void playSillyMusic() {} - public void stopMusic() {} + public void stopMusic(boolean resumeMCSounds) {} public void typeEnteredBattle(String type) {}