diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleGui.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleGui.java index 8ba8051..1b32161 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleGui.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleGui.java @@ -104,7 +104,7 @@ public class BattleGui extends GuiScreen public BattleGui() { - timeRemaining = new AtomicInteger((int)TurnBasedMinecraftMod.BattleDecisionTime.getSeconds()); + timeRemaining = new AtomicInteger(TurnBasedMinecraftMod.getBattleDurationSeconds()); lastInstant = System.nanoTime(); elapsedTime = 0; state = MenuState.MAIN_MENU; @@ -129,7 +129,7 @@ public class BattleGui extends GuiScreen { TurnBasedMinecraftMod.currentBattle.setState(Battle.State.DECISION); } - timeRemaining.set((int)TurnBasedMinecraftMod.BattleDecisionTime.getSeconds()); + timeRemaining.set(TurnBasedMinecraftMod.getBattleDurationSeconds()); elapsedTime = 0; lastInstant = System.nanoTime(); setState(MenuState.MAIN_MENU); diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java index 8834a40..47f1324 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/client/BattleMusic.java @@ -41,7 +41,7 @@ public class BattleMusic try { sequencer = MidiSystem.getSequencer(); sequencer.open(); - } catch (Exception e) + } catch (Throwable t) { logger.error("Failed to load midi sequencer"); return; @@ -198,7 +198,7 @@ public class BattleMusic } try { sequencer.setSequence(new BufferedInputStream(new FileInputStream(next))); - } catch (Exception e) + } catch (Throwable t) { logger.error("Failed to play battle music (midi)"); return; @@ -221,7 +221,7 @@ public class BattleMusic try { clip.open(AudioSystem.getAudioInputStream(next)); - } catch(Exception e) + } catch(Throwable t) { logger.error("Failed to load battle music (wav)"); return; diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java index 1511105..bf1eea5 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java @@ -130,7 +130,7 @@ public class Battle for(Entity e : sideA) { EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(e); - if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.battleManager != null) + if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.commonProxy.isServerRunning()) { continue; } @@ -159,7 +159,7 @@ public class Battle for(Entity e : sideB) { EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(e); - if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.battleManager != null) + if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.commonProxy.isServerRunning()) { continue; } @@ -210,7 +210,7 @@ public class Battle lastInstant = System.nanoTime(); state = State.DECISION; undecidedCount.set(playerCount.get()); - timer = TurnBasedMinecraftMod.BattleDecisionTime.getSeconds() * 1000000000; + timer = TurnBasedMinecraftMod.getBattleDurationNanos(); battleEnded = false; notifyPlayersBattleInfo(); @@ -249,7 +249,7 @@ public class Battle public void addCombatantToSideA(Entity e) { EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(e); - if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.battleManager != null) + if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.commonProxy.isServerRunning()) { return; } @@ -289,7 +289,7 @@ public class Battle public void addCombatantToSideB(Entity e) { EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(e); - if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.battleManager != null) + if(entityInfo == null && !(e instanceof EntityPlayer) && TurnBasedMinecraftMod.commonProxy.isServerRunning()) { return; } @@ -653,7 +653,7 @@ public class Battle } } state = State.ACTION; - timer = TurnBasedMinecraftMod.BattleDecisionTime.getSeconds() * 1000000000; + timer = TurnBasedMinecraftMod.getBattleDurationNanos(); sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_BEGIN, 0, 0, 0); turnOrderQueue.clear(); for(Combatant c : sideA.values()) diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java index 9cec856..8b8e4ba 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/BattleUpdater.java @@ -33,7 +33,7 @@ public class BattleUpdater implements Runnable { manager.battleMap.remove(ended); } - try { Thread.sleep(250); } catch (Exception e) { /* ignored */ } + try { Thread.sleep(250); } catch (Throwable t) { /* ignored */ } } } diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java index cf03ad3..1e70778 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/CommonProxy.java @@ -64,4 +64,9 @@ public class CommonProxy { return FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getEntityByID(id); } + + public boolean isServerRunning() + { + return TurnBasedMinecraftMod.battleManager != null; + } } diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Config.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Config.java index 6421888..476442e 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Config.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Config.java @@ -55,8 +55,11 @@ public class Config { logger.error("Internal resource is null"); } - internalVersion = getConfigFileVersion(is); - } catch (Exception e) {} + else + { + internalVersion = getConfigFileVersion(is); + } + } catch (Throwable t) {} if(internalVersion == 0) { @@ -75,7 +78,7 @@ public class Config writeConfig(); } } - catch (Exception e) + catch (Throwable t) { logger.error("Failed to check/create-new config file"); } @@ -96,7 +99,7 @@ public class Config try { writeConfig(); - } catch (Exception e) + } catch (Throwable t) { logger.error("Failed to write config file!"); } @@ -104,7 +107,7 @@ public class Config try { parseConfig(configFile); - } catch (Exception e) + } catch (Throwable t) { logger.error("Failed to parse config file!"); } @@ -261,6 +264,19 @@ public class Config minimumHitPercentage = 1; } } + else if(xmlReader.getLocalName().equals("BattleTurnTimeSeconds")) + { + int seconds = TurnBasedMinecraftMod.getBattleDurationSeconds(); + try + { + seconds = Integer.parseInt(xmlReader.getElementText()); + TurnBasedMinecraftMod.setBattleDurationSeconds(seconds); + } catch (Throwable t) + { + logger.warn("Unable to get value for \"BattleTurnTimeSeconds\" from config, using default"); + TurnBasedMinecraftMod.setBattleDurationSeconds(TurnBasedMinecraftMod.BATTLE_DECISION_DURATION_NANO_DEFAULT / 1000000000L); + } + } else if(xmlReader.getLocalName().equals("EntityEntry")) { EntityInfo eInfo = new EntityInfo(); @@ -468,7 +484,7 @@ public class Config } } xmlReader.close(); - } catch (Exception e) + } catch (Throwable t) { return 0; } diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java index e49894d..c56e4fa 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java @@ -1,6 +1,5 @@ package com.seodisparate.TurnBasedMinecraft.common; -import java.time.Duration; import java.util.HashSet; import java.util.Set; @@ -31,7 +30,6 @@ public class TurnBasedMinecraftMod public static final String MODID = "com.seodisparate.turnbasedminecraft"; public static final String NAME = "Turn Based Minecraft Mod"; public static final String VERSION = "0.3"; - public static final Duration BattleDecisionTime = Duration.ofSeconds(15); public static final String CONFIG_FILENAME = "TBM_Config.xml"; public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/"; public static final String CONFIG_FILE_PATH = CONFIG_DIRECTORY + CONFIG_FILENAME; @@ -51,6 +49,10 @@ public class TurnBasedMinecraftMod protected static int attackingDamage = 0; protected static Set attackerViaBow; protected static Config config; + public static final long BATTLE_DECISION_DURATION_NANO_MIN = 5000000000L; + public static final long BATTLE_DECISION_DURATION_NANO_MAX = 60000000000L; + public static final long BATTLE_DECISION_DURATION_NANO_DEFAULT = 15000000000L; + private static long BATTLE_DECISION_DURATION_NANOSECONDS = BATTLE_DECISION_DURATION_NANO_DEFAULT; public static Battle currentBattle = null; @@ -140,4 +142,27 @@ public class TurnBasedMinecraftMod { return CONFIG_FILE_VERSION; } + + public static long getBattleDurationNanos() + { + return BATTLE_DECISION_DURATION_NANOSECONDS; + } + + public static int getBattleDurationSeconds() + { + return (int)(BATTLE_DECISION_DURATION_NANOSECONDS / 1000000000L); + } + + protected static void setBattleDurationSeconds(long seconds) + { + BATTLE_DECISION_DURATION_NANOSECONDS = seconds * 1000000000L; + if(BATTLE_DECISION_DURATION_NANOSECONDS < BATTLE_DECISION_DURATION_NANO_MIN) + { + BATTLE_DECISION_DURATION_NANOSECONDS = BATTLE_DECISION_DURATION_NANO_MIN; + } + else if(BATTLE_DECISION_DURATION_NANOSECONDS > BATTLE_DECISION_DURATION_NANO_MAX) + { + BATTLE_DECISION_DURATION_NANOSECONDS = BATTLE_DECISION_DURATION_NANO_MAX; + } + } } diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/networking/PacketBattleInfo.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/networking/PacketBattleInfo.java index e979aff..0cc1527 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/networking/PacketBattleInfo.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/networking/PacketBattleInfo.java @@ -21,7 +21,7 @@ public class PacketBattleInfo implements IMessage { sideA = new ArrayList(); sideB = new ArrayList(); - decisionNanos = TurnBasedMinecraftMod.BattleDecisionTime.getSeconds() * 1000000000; + decisionNanos = TurnBasedMinecraftMod.getBattleDurationNanos(); } public PacketBattleInfo(Collection sideA, Collection sideB, long decisionNanos) @@ -81,7 +81,7 @@ public class PacketBattleInfo implements IMessage { TurnBasedMinecraftMod.currentBattle.addCombatantToSideB(Minecraft.getMinecraft().world.getEntityByID(id)); } - TurnBasedMinecraftMod.commonProxy.setBattleGuiTime((int)(message.decisionNanos / 1000000000)); + TurnBasedMinecraftMod.commonProxy.setBattleGuiTime((int)(message.decisionNanos / 1000000000L)); TurnBasedMinecraftMod.commonProxy.setBattleGuiBattleChanged(); return null; } diff --git a/src/main/resources/assets/TurnBasedMinecraft/TBM_Config.xml b/src/main/resources/assets/TurnBasedMinecraft/TBM_Config.xml index 37b0eda..896338f 100644 --- a/src/main/resources/assets/TurnBasedMinecraft/TBM_Config.xml +++ b/src/main/resources/assets/TurnBasedMinecraft/TBM_Config.xml @@ -37,6 +37,8 @@ 40 4 + + 15