From 71ed8e2508aec802ec193ecd9db92b234128dfd1 Mon Sep 17 00:00:00 2001 From: Pahimar Date: Sun, 22 May 2016 13:59:05 -0400 Subject: [PATCH] Added a regen energy values command. It will reload values from file, recalculate energy values, then send the new values to everyone on the server --- .../com/pahimar/ee3/command/CommandEE.java | 1 + .../ee3/command/CommandRegenEnergyValues.java | 76 +++++++++++++++++++ .../ee3/command/CommandSetEnergyValue.java | 2 + .../CommandSetEnergyValueCurrentItem.java | 3 + .../ee3/command/CommandSyncEnergyValues.java | 36 ++++----- .../com/pahimar/ee3/reference/Messages.java | 7 +- .../java/com/pahimar/ee3/reference/Names.java | 1 + src/main/resources/assets/ee3/lang/en_US.lang | 3 + 8 files changed, 105 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/pahimar/ee3/command/CommandRegenEnergyValues.java diff --git a/src/main/java/com/pahimar/ee3/command/CommandEE.java b/src/main/java/com/pahimar/ee3/command/CommandEE.java index c9240b8a..919675cd 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandEE.java +++ b/src/main/java/com/pahimar/ee3/command/CommandEE.java @@ -66,6 +66,7 @@ public class CommandEE extends CommandBase modCommands.add(new CommandSetEnergyValue()); modCommands.add(new CommandSetEnergyValueCurrentItem()); modCommands.add(new CommandSyncEnergyValues()); + modCommands.add(new CommandRegenEnergyValues()); modCommands.add(new CommandPlayerLearnItem()); modCommands.add(new CommandPlayerLearnCurrentItem()); modCommands.add(new CommandPlayerForgetEverything()); diff --git a/src/main/java/com/pahimar/ee3/command/CommandRegenEnergyValues.java b/src/main/java/com/pahimar/ee3/command/CommandRegenEnergyValues.java new file mode 100644 index 00000000..8e291685 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/command/CommandRegenEnergyValues.java @@ -0,0 +1,76 @@ +package com.pahimar.ee3.command; + +import com.pahimar.ee3.exchange.EnergyValueRegistry; +import com.pahimar.ee3.handler.ConfigurationHandler; +import com.pahimar.ee3.network.PacketHandler; +import com.pahimar.ee3.network.message.MessageSyncEnergyValues; +import com.pahimar.ee3.reference.Messages; +import com.pahimar.ee3.reference.Names; +import com.pahimar.ee3.util.LogHelper; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatComponentTranslation; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class CommandRegenEnergyValues extends CommandBase { + + private static Map requesterMap = new HashMap<>(); + + @Override + public String getCommandName() { + return Names.Commands.REGEN_ENERGY_VALUES; + } + + @Override + public int getRequiredPermissionLevel() { + return 4; + } + + @Override + public String getCommandUsage(ICommandSender commandSender) { + return Messages.Commands.SYNC_ENERGY_VALUES_USAGE; + } + + @Override + public void processCommand(ICommandSender commandSender, String[] args) { + + boolean shouldRegen = true; + float coolDown = 0f; + UUID commandSenderUUID = ((EntityPlayer) commandSender).getUniqueID(); + + if (requesterMap.containsKey(commandSenderUUID)) { + + // TODO Switch to nanoTime from currentTimeMillis + long timeDifference = System.currentTimeMillis() - requesterMap.get(commandSenderUUID).longValue(); + + if (timeDifference >= (ConfigurationHandler.Settings.serverSyncThreshold * 1000)) { + requesterMap.remove(commandSenderUUID); + } + else { + coolDown = (ConfigurationHandler.Settings.serverSyncThreshold * 1000) - timeDifference; + shouldRegen = false; + } + } + else { + requesterMap.put(commandSenderUUID, System.currentTimeMillis()); + } + + if (shouldRegen) { + LogHelper.info(EnergyValueRegistry.ENERGY_VALUE_MARKER, "Regenerating energy values at {}'s request", commandSender.getCommandSenderName()); + LogHelper.info(EnergyValueRegistry.ENERGY_VALUE_MARKER, "Reloading energy values from file"); + EnergyValueRegistry.INSTANCE.load(); + LogHelper.info(EnergyValueRegistry.ENERGY_VALUE_MARKER, "Recalculating energy values"); + EnergyValueRegistry.INSTANCE.compute(); + PacketHandler.INSTANCE.sendToAll(new MessageSyncEnergyValues()); + commandSender.addChatMessage(new ChatComponentTranslation(Messages.Commands.REGEN_ENERGY_VALUES_SUCCESS)); + } + else { + throw new WrongUsageException(Messages.Commands.REGEN_ENERGY_VALUES_DENIED, new Object[]{coolDown / 1000f}); + } + } +} diff --git a/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValue.java b/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValue.java index 3cb494a5..a8220ecc 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValue.java +++ b/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValue.java @@ -2,6 +2,7 @@ package com.pahimar.ee3.command; import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; +import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Names; @@ -98,6 +99,7 @@ public class CommandSetEnergyValue extends CommandBase throw new WrongUsageException(Messages.Commands.SET_ENERGY_VALUE_USAGE); } + EnergyValueRegistry.INSTANCE.save(); // Notify admins and log the value change func_152373_a(commandSender, this, Messages.Commands.SET_ENERGY_VALUE_SUCCESS, new Object[]{commandSender.getCommandSenderName(), args[1], itemStack.func_151000_E(), newEnergyValue.getChatComponent()}); } diff --git a/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValueCurrentItem.java b/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValueCurrentItem.java index 8179e4ca..15208826 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValueCurrentItem.java +++ b/src/main/java/com/pahimar/ee3/command/CommandSetEnergyValueCurrentItem.java @@ -2,6 +2,7 @@ package com.pahimar.ee3.command; import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; +import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.reference.Messages; import com.pahimar.ee3.reference.Names; @@ -78,6 +79,8 @@ public class CommandSetEnergyValueCurrentItem extends CommandBase { throw new WrongUsageException(Messages.Commands.SET_ENERGY_VALUE_CURRENT_ITEM_USAGE); } + + EnergyValueRegistry.INSTANCE.save(); } else { diff --git a/src/main/java/com/pahimar/ee3/command/CommandSyncEnergyValues.java b/src/main/java/com/pahimar/ee3/command/CommandSyncEnergyValues.java index 2f4ee8e8..9eccb7dc 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandSyncEnergyValues.java +++ b/src/main/java/com/pahimar/ee3/command/CommandSyncEnergyValues.java @@ -20,59 +20,53 @@ import java.util.UUID; public class CommandSyncEnergyValues extends CommandBase { - private static Map requesterMap = new HashMap(); + private static Map requesterMap = new HashMap<>(); @Override - public String getCommandName() - { + public String getCommandName() { return Names.Commands.SYNC_ENERGY_VALUES; } @Override - public int getRequiredPermissionLevel() - { + public int getRequiredPermissionLevel() { return 4; } @Override - public String getCommandUsage(ICommandSender commandSender) - { + public String getCommandUsage(ICommandSender commandSender) { return Messages.Commands.SYNC_ENERGY_VALUES_USAGE; } @Override - public void processCommand(ICommandSender commandSender, String[] args) - { + public void processCommand(ICommandSender commandSender, String[] args) { + boolean shouldSync = true; float coolDown = 0f; UUID commandSenderUUID = ((EntityPlayer) commandSender).getUniqueID(); - if (requesterMap.containsKey(commandSenderUUID)) - { + if (requesterMap.containsKey(commandSenderUUID)) { + + // TODO Switch to nanoTime from currentTimeMillis long timeDifference = System.currentTimeMillis() - requesterMap.get(commandSenderUUID).longValue(); - if (timeDifference >= (ConfigurationHandler.Settings.serverSyncThreshold * 1000)) - { + + if (timeDifference >= (ConfigurationHandler.Settings.serverSyncThreshold * 1000)) { requesterMap.remove(commandSenderUUID); } - else - { + else { coolDown = (ConfigurationHandler.Settings.serverSyncThreshold * 1000) - timeDifference; shouldSync = false; } } - else - { + else { requesterMap.put(commandSenderUUID, System.currentTimeMillis()); } - if (shouldSync) - { + if (shouldSync) { LogHelper.info(EnergyValueRegistry.ENERGY_VALUE_MARKER, "Syncing energy values with player '{}' at their request", commandSender.getCommandSenderName()); PacketHandler.INSTANCE.sendTo(new MessageSyncEnergyValues(), (EntityPlayerMP) commandSender); commandSender.addChatMessage(new ChatComponentTranslation(Messages.Commands.SYNC_ENERGY_VALUES_SUCCESS)); } - else - { + else { throw new WrongUsageException(Messages.Commands.SYNC_ENERGY_VALUES_DENIED, new Object[]{coolDown / 1000f}); } } diff --git a/src/main/java/com/pahimar/ee3/reference/Messages.java b/src/main/java/com/pahimar/ee3/reference/Messages.java index f5b744fb..4c413335 100644 --- a/src/main/java/com/pahimar/ee3/reference/Messages.java +++ b/src/main/java/com/pahimar/ee3/reference/Messages.java @@ -49,13 +49,14 @@ public final class Messages { public static final String SET_ENERGY_VALUE_CURRENT_ITEM_USAGE = COMMAND_PREFIX + Names.Commands.SET_ENERGY_VALUE_CURRENT_ITEM + ".usage"; public static final String SET_ENERGY_VALUE_CURRENT_ITEM_SUCCESS = COMMAND_PREFIX + Names.Commands.SET_ENERGY_VALUE_CURRENT_ITEM + ".success"; + public static final String REGEN_ENERGY_VALUES_USAGE = COMMAND_PREFIX + Names.Commands.REGEN_ENERGY_VALUES + ".usage"; + public static final String REGEN_ENERGY_VALUES_SUCCESS = COMMAND_PREFIX + Names.Commands.REGEN_ENERGY_VALUES + ".success"; + public static final String REGEN_ENERGY_VALUES_DENIED = COMMAND_PREFIX + Names.Commands.REGEN_ENERGY_VALUES + ".denied"; + public static final String SYNC_ENERGY_VALUES_USAGE = COMMAND_PREFIX + Names.Commands.SYNC_ENERGY_VALUES + ".usage"; public static final String SYNC_ENERGY_VALUES_SUCCESS = COMMAND_PREFIX + Names.Commands.SYNC_ENERGY_VALUES + ".success"; public static final String SYNC_ENERGY_VALUES_DENIED = COMMAND_PREFIX + Names.Commands.SYNC_ENERGY_VALUES + ".denied"; - public static final String PLAYER_LEARN_EVERYTHING_USAGE = COMMAND_PREFIX + Names.Commands.PLAYER_LEARN_EVERYTHING + ".usage"; - public static final String PLAYER_LEARN_EVERYTHING_SUCCESS = COMMAND_PREFIX + Names.Commands.PLAYER_LEARN_EVERYTHING + ".success"; - public static final String PLAYER_LEARN_ITEM_USAGE = COMMAND_PREFIX + Names.Commands.PLAYER_LEARN_ITEM + ".usage"; public static final String PLAYER_LEARN_ITEM_SUCCESS = COMMAND_PREFIX + Names.Commands.PLAYER_LEARN_ITEM + ".success"; diff --git a/src/main/java/com/pahimar/ee3/reference/Names.java b/src/main/java/com/pahimar/ee3/reference/Names.java index 1445f8fe..fb713503 100644 --- a/src/main/java/com/pahimar/ee3/reference/Names.java +++ b/src/main/java/com/pahimar/ee3/reference/Names.java @@ -139,6 +139,7 @@ public class Names public static final String BASE_COMMAND = Reference.LOWERCASE_MOD_ID; public static final String SET_ENERGY_VALUE = "set-energy-value"; public static final String SET_ENERGY_VALUE_CURRENT_ITEM = "set-energy-value-current-item"; + public static final String REGEN_ENERGY_VALUES = "regen-energy-values"; public static final String SYNC_ENERGY_VALUES = "sync-energy-values"; public static final String PLAYER_LEARN_EVERYTHING = "player-learn-everything"; public static final String PLAYER_LEARN_ITEM = "player-learn-item"; diff --git a/src/main/resources/assets/ee3/lang/en_US.lang b/src/main/resources/assets/ee3/lang/en_US.lang index 5ae5ce8f..7c848e64 100644 --- a/src/main/resources/assets/ee3/lang/en_US.lang +++ b/src/main/resources/assets/ee3/lang/en_US.lang @@ -139,6 +139,9 @@ commands.ee3.set-energy-value.usage=/ee3 set-energy-value commands.ee3.set-energy-value-current-item.success=%s set a %s EnergyValue of %s to %s +commands.ee3.regen-energy-values.usage=/ee3 regen-energy-values +commands.ee3.regen-energy-values.success=Successfully recalculated energy values +commands.ee3.regen-energy-values.denied=Please wait %s more seconds and try again commands.ee3.sync-energy-values.usage=/ee3 sync-energy-values commands.ee3.sync-energy-values.success=Successfully synchronized energy values with the server commands.ee3.sync-energy-values.denied=Please wait %s more seconds and try again