Add in a throttle for users syncing values while on a server to prevent massive amounts of network spam
This commit is contained in:
parent
a97fa3fb49
commit
b3efb75ef8
|
@ -12,16 +12,28 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class CommandSyncValues extends CommandBase
|
||||
{
|
||||
private static final long SYNC_THRESHOLD = 5000;
|
||||
private static Map<UUID, Long> requesterMap = new HashMap<UUID, Long>();
|
||||
|
||||
@Override
|
||||
public String getCommandName()
|
||||
{
|
||||
return "ee3-sync-values";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCommandSenderUseCommand(ICommandSender commandSender)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommandUsage(ICommandSender commandSender)
|
||||
{
|
||||
|
@ -35,15 +47,55 @@ public class CommandSyncValues extends CommandBase
|
|||
{
|
||||
if (args[0].equalsIgnoreCase("self"))
|
||||
{
|
||||
LogHelper.info(String.format("Syncing EnergyValues with player '%s' at their request", commandSender.getCommandSenderName()));
|
||||
PacketHandler.INSTANCE.sendTo(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()), (EntityPlayerMP) commandSender);
|
||||
commandSender.addChatMessage(new ChatComponentTranslation("command.ee3.sync-values.self.success"));
|
||||
boolean shouldSync = true;
|
||||
float coolDown = 0f;
|
||||
|
||||
if (!PlayerHelper.isPlayerOp(((EntityPlayer) commandSender)))
|
||||
{
|
||||
UUID commandSenderUUID = ((EntityPlayer) commandSender).getUniqueID();
|
||||
|
||||
if (requesterMap.containsKey(commandSenderUUID))
|
||||
{
|
||||
long timeDifference = System.currentTimeMillis() - requesterMap.get(commandSenderUUID).longValue();
|
||||
if (timeDifference >= SYNC_THRESHOLD)
|
||||
{
|
||||
requesterMap.remove(commandSenderUUID);
|
||||
}
|
||||
else
|
||||
{
|
||||
coolDown = SYNC_THRESHOLD - timeDifference;
|
||||
shouldSync = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
requesterMap.put(commandSenderUUID, System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldSync)
|
||||
{
|
||||
LogHelper.info(String.format("Syncing EnergyValues with player '%s' at their request", commandSender.getCommandSenderName()));
|
||||
PacketHandler.INSTANCE.sendTo(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()), (EntityPlayerMP) commandSender);
|
||||
commandSender.addChatMessage(new ChatComponentTranslation("command.ee3.sync-values.self.success"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new WrongUsageException("command.ee3.sync-values.self.denied", new Object[]{coolDown / 1000f});
|
||||
}
|
||||
}
|
||||
else if (args[0].equalsIgnoreCase("all") && PlayerHelper.isPlayerOp((EntityPlayer) commandSender))
|
||||
else if (args[0].equalsIgnoreCase("all"))
|
||||
{
|
||||
LogHelper.info(String.format("Syncing EnergyValues with all players at %s's request", commandSender.getCommandSenderName()));
|
||||
PacketHandler.INSTANCE.sendToAll(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()));
|
||||
func_152373_a(commandSender, this, "command.ee3.sync-values.all.success", new Object[]{commandSender.getCommandSenderName()});
|
||||
if (PlayerHelper.isPlayerOp((EntityPlayer) commandSender))
|
||||
{
|
||||
LogHelper.info(String.format("Syncing EnergyValues with all players at %s's request", commandSender.getCommandSenderName()));
|
||||
PacketHandler.INSTANCE.sendToAll(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()));
|
||||
func_152373_a(commandSender, this, "command.ee3.sync-values.all.success", new Object[]{commandSender.getCommandSenderName()});
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new WrongUsageException("command.ee3.sync-values.all.denied");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -107,7 +107,9 @@ command.ee3.set-value.success=%s set a %s EnergyValue of %s to %s
|
|||
command.ee3.set-value.tagError=Data tag parsing failed: %s
|
||||
command.ee3.sync-values.usage=/ee3-sync-values <self|all>
|
||||
command.ee3.sync-values.self.success=Successfully synchronized EnergyValues with the server
|
||||
command.ee3.sync-values.self.denied=Please wait %s more seconds and try again
|
||||
command.ee3.sync-values.all.success=%s synchronized all EnergyValues with all players on the server
|
||||
command.ee3.sync-values.all.denied=Only ops can use this command
|
||||
|
||||
# Tooltips
|
||||
tooltip.ee3:upgradesPrefix=Upgrades (Alchemical) Chests
|
||||
|
|
Loading…
Reference in a new issue