Minor fixes/changes

Added option in config to change battle timer time
This commit is contained in:
Stephen Seo 2018-09-25 14:55:24 +09:00
parent 9119f42e5b
commit a4c3a28028
9 changed files with 70 additions and 22 deletions

View file

@ -104,7 +104,7 @@ public class BattleGui extends GuiScreen
public BattleGui() public BattleGui()
{ {
timeRemaining = new AtomicInteger((int)TurnBasedMinecraftMod.BattleDecisionTime.getSeconds()); timeRemaining = new AtomicInteger(TurnBasedMinecraftMod.getBattleDurationSeconds());
lastInstant = System.nanoTime(); lastInstant = System.nanoTime();
elapsedTime = 0; elapsedTime = 0;
state = MenuState.MAIN_MENU; state = MenuState.MAIN_MENU;
@ -129,7 +129,7 @@ public class BattleGui extends GuiScreen
{ {
TurnBasedMinecraftMod.currentBattle.setState(Battle.State.DECISION); TurnBasedMinecraftMod.currentBattle.setState(Battle.State.DECISION);
} }
timeRemaining.set((int)TurnBasedMinecraftMod.BattleDecisionTime.getSeconds()); timeRemaining.set(TurnBasedMinecraftMod.getBattleDurationSeconds());
elapsedTime = 0; elapsedTime = 0;
lastInstant = System.nanoTime(); lastInstant = System.nanoTime();
setState(MenuState.MAIN_MENU); setState(MenuState.MAIN_MENU);

View file

@ -41,7 +41,7 @@ public class BattleMusic
try { try {
sequencer = MidiSystem.getSequencer(); sequencer = MidiSystem.getSequencer();
sequencer.open(); sequencer.open();
} catch (Exception e) } catch (Throwable t)
{ {
logger.error("Failed to load midi sequencer"); logger.error("Failed to load midi sequencer");
return; return;
@ -198,7 +198,7 @@ public class BattleMusic
} }
try { try {
sequencer.setSequence(new BufferedInputStream(new FileInputStream(next))); sequencer.setSequence(new BufferedInputStream(new FileInputStream(next)));
} catch (Exception e) } catch (Throwable t)
{ {
logger.error("Failed to play battle music (midi)"); logger.error("Failed to play battle music (midi)");
return; return;
@ -221,7 +221,7 @@ public class BattleMusic
try try
{ {
clip.open(AudioSystem.getAudioInputStream(next)); clip.open(AudioSystem.getAudioInputStream(next));
} catch(Exception e) } catch(Throwable t)
{ {
logger.error("Failed to load battle music (wav)"); logger.error("Failed to load battle music (wav)");
return; return;

View file

@ -130,7 +130,7 @@ public class Battle
for(Entity e : sideA) for(Entity e : sideA)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(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())
{ {
continue; continue;
} }
@ -159,7 +159,7 @@ public class Battle
for(Entity e : sideB) for(Entity e : sideB)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(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())
{ {
continue; continue;
} }
@ -210,7 +210,7 @@ public class Battle
lastInstant = System.nanoTime(); lastInstant = System.nanoTime();
state = State.DECISION; state = State.DECISION;
undecidedCount.set(playerCount.get()); undecidedCount.set(playerCount.get());
timer = TurnBasedMinecraftMod.BattleDecisionTime.getSeconds() * 1000000000; timer = TurnBasedMinecraftMod.getBattleDurationNanos();
battleEnded = false; battleEnded = false;
notifyPlayersBattleInfo(); notifyPlayersBattleInfo();
@ -249,7 +249,7 @@ public class Battle
public void addCombatantToSideA(Entity e) public void addCombatantToSideA(Entity e)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(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; return;
} }
@ -289,7 +289,7 @@ public class Battle
public void addCombatantToSideB(Entity e) public void addCombatantToSideB(Entity e)
{ {
EntityInfo entityInfo = TurnBasedMinecraftMod.config.getMatchingEntityInfo(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; return;
} }
@ -653,7 +653,7 @@ public class Battle
} }
} }
state = State.ACTION; state = State.ACTION;
timer = TurnBasedMinecraftMod.BattleDecisionTime.getSeconds() * 1000000000; timer = TurnBasedMinecraftMod.getBattleDurationNanos();
sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_BEGIN, 0, 0, 0); sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_BEGIN, 0, 0, 0);
turnOrderQueue.clear(); turnOrderQueue.clear();
for(Combatant c : sideA.values()) for(Combatant c : sideA.values())

View file

@ -33,7 +33,7 @@ public class BattleUpdater implements Runnable
{ {
manager.battleMap.remove(ended); manager.battleMap.remove(ended);
} }
try { Thread.sleep(250); } catch (Exception e) { /* ignored */ } try { Thread.sleep(250); } catch (Throwable t) { /* ignored */ }
} }
} }

View file

@ -64,4 +64,9 @@ public class CommonProxy
{ {
return FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getEntityByID(id); return FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getEntityByID(id);
} }
public boolean isServerRunning()
{
return TurnBasedMinecraftMod.battleManager != null;
}
} }

View file

@ -55,8 +55,11 @@ public class Config
{ {
logger.error("Internal resource is null"); logger.error("Internal resource is null");
} }
else
{
internalVersion = getConfigFileVersion(is); internalVersion = getConfigFileVersion(is);
} catch (Exception e) {} }
} catch (Throwable t) {}
if(internalVersion == 0) if(internalVersion == 0)
{ {
@ -75,7 +78,7 @@ public class Config
writeConfig(); writeConfig();
} }
} }
catch (Exception e) catch (Throwable t)
{ {
logger.error("Failed to check/create-new config file"); logger.error("Failed to check/create-new config file");
} }
@ -96,7 +99,7 @@ public class Config
try try
{ {
writeConfig(); writeConfig();
} catch (Exception e) } catch (Throwable t)
{ {
logger.error("Failed to write config file!"); logger.error("Failed to write config file!");
} }
@ -104,7 +107,7 @@ public class Config
try try
{ {
parseConfig(configFile); parseConfig(configFile);
} catch (Exception e) } catch (Throwable t)
{ {
logger.error("Failed to parse config file!"); logger.error("Failed to parse config file!");
} }
@ -261,6 +264,19 @@ public class Config
minimumHitPercentage = 1; 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")) else if(xmlReader.getLocalName().equals("EntityEntry"))
{ {
EntityInfo eInfo = new EntityInfo(); EntityInfo eInfo = new EntityInfo();
@ -468,7 +484,7 @@ public class Config
} }
} }
xmlReader.close(); xmlReader.close();
} catch (Exception e) } catch (Throwable t)
{ {
return 0; return 0;
} }

View file

@ -1,6 +1,5 @@
package com.seodisparate.TurnBasedMinecraft.common; package com.seodisparate.TurnBasedMinecraft.common;
import java.time.Duration;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -31,7 +30,6 @@ public class TurnBasedMinecraftMod
public static final String MODID = "com.seodisparate.turnbasedminecraft"; public static final String MODID = "com.seodisparate.turnbasedminecraft";
public static final String NAME = "Turn Based Minecraft Mod"; public static final String NAME = "Turn Based Minecraft Mod";
public static final String VERSION = "0.3"; 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_FILENAME = "TBM_Config.xml";
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/"; public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
public static final String CONFIG_FILE_PATH = CONFIG_DIRECTORY + CONFIG_FILENAME; 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 int attackingDamage = 0;
protected static Set<AttackerViaBow> attackerViaBow; protected static Set<AttackerViaBow> attackerViaBow;
protected static Config config; 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; public static Battle currentBattle = null;
@ -140,4 +142,27 @@ public class TurnBasedMinecraftMod
{ {
return CONFIG_FILE_VERSION; 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;
}
}
} }

View file

@ -21,7 +21,7 @@ public class PacketBattleInfo implements IMessage
{ {
sideA = new ArrayList<Integer>(); sideA = new ArrayList<Integer>();
sideB = new ArrayList<Integer>(); sideB = new ArrayList<Integer>();
decisionNanos = TurnBasedMinecraftMod.BattleDecisionTime.getSeconds() * 1000000000; decisionNanos = TurnBasedMinecraftMod.getBattleDurationNanos();
} }
public PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos) public PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos)
@ -81,7 +81,7 @@ public class PacketBattleInfo implements IMessage
{ {
TurnBasedMinecraftMod.currentBattle.addCombatantToSideB(Minecraft.getMinecraft().world.getEntityByID(id)); 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(); TurnBasedMinecraftMod.commonProxy.setBattleGuiBattleChanged();
return null; return null;
} }

View file

@ -37,6 +37,8 @@
<FleeBadProbability>40</FleeBadProbability> <FleeBadProbability>40</FleeBadProbability>
<!-- Minimum hit percentage for every entity. If less than 1, it will be stored as 1 anyways. --> <!-- Minimum hit percentage for every entity. If less than 1, it will be stored as 1 anyways. -->
<MinimumHitPercentage>4</MinimumHitPercentage> <MinimumHitPercentage>4</MinimumHitPercentage>
<!-- Number of seconds to wait in battle for all players to make a decision. Minimum of 5 and maximum of 60. -->
<BattleTurnTimeSeconds>15</BattleTurnTimeSeconds>
<!-- Battle stats for entities should be specified here. If an entity is not listed it cannot enter battle. --> <!-- Battle stats for entities should be specified here. If an entity is not listed it cannot enter battle. -->
<!-- Name: The full class name of an entity. --> <!-- Name: The full class name of an entity. -->