1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-12 09:35:26 +02:00

Esschat clean up

Re-implement sign throttle Test #2331
This commit is contained in:
ementalo
2012-10-10 14:00:38 +01:00
parent 62d5f63ab1
commit 3d2870cc4e
31 changed files with 148 additions and 53 deletions

View File

@@ -126,6 +126,8 @@ public interface IUser extends OfflinePlayer, CommandSender, IStorageObjectHolde
void setVanished(boolean set); void setVanished(boolean set);
boolean checkSignThrottle(int throttle);
/** /**
* Since the Player object should not be stored for a long time, this method should be called again with a null * Since the Player object should not be stored for a long time, this method should be called again with a null
* value. * value.

View File

@@ -50,6 +50,7 @@ public class User extends UserBase implements IUser
@Getter @Getter
@Setter @Setter
private boolean enderSee = false; private boolean enderSee = false;
private long lastThrottledAction;
private transient Location afkPosition; private transient Location afkPosition;
private AtomicBoolean gotMailInfo = new AtomicBoolean(false); private AtomicBoolean gotMailInfo = new AtomicBoolean(false);
private WeakReference<Player> playerCache; private WeakReference<Player> playerCache;
@@ -655,4 +656,26 @@ public class User extends UserBase implements IUser
final boolean set = !vanished; final boolean set = !vanished;
this.setVanished(set); this.setVanished(set);
} }
@Override
public boolean checkSignThrottle(int usageLimit)
{
if (isSignThrottled(usageLimit))
{
return true;
}
updateThrottle();
return false;
}
public boolean isSignThrottled(int usageLimit)
{
final long minTime = lastThrottledAction + (1000 / usageLimit);
return (System.currentTimeMillis() < minTime);
}
private void updateThrottle()
{
lastThrottledAction = System.currentTimeMillis();;
}
} }

View File

@@ -1,5 +1,6 @@
package net.ess3.chat; package net.ess3.chat;
import java.text.MessageFormat;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -18,7 +19,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
//TODO: Translate the local/spy tags
public abstract class EssentialsChatPlayer implements Listener public abstract class EssentialsChatPlayer implements Listener
{ {
protected transient IEssentials ess; protected transient IEssentials ess;
@@ -86,11 +86,14 @@ public abstract class EssentialsChatPlayer implements Listener
String world = user.getPlayer().getWorld().getName(); String world = user.getPlayer().getWorld().getName();
IRanks groupSettings = ess.getRanks(); IRanks groupSettings = ess.getRanks();
MessageFormat format = groupSettings.getChatFormat(user);
synchronized(format)
{
event.setFormat(groupSettings.getChatFormat(user).format(new Object[] event.setFormat(groupSettings.getChatFormat(user).format(new Object[]
{ {
group, world, world.substring(0, 1).toUpperCase(Locale.ENGLISH) group, world, world.substring(0, 1).toUpperCase(Locale.ENGLISH)
})); }));
}
} }
//TODO: Flesh this out - '?' trigger is too easily accidentally triggered //TODO: Flesh this out - '?' trigger is too easily accidentally triggered

View File

@@ -8,6 +8,7 @@ import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.signs.SignException;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@@ -75,10 +76,14 @@ public class EssentialsSign
return user.getName().substring(0, user.getName().length() > 13 ? 13 : user.getName().length()); return user.getName().substring(0, user.getName().length() > 13 ? 13 : user.getName().length());
} }
public final boolean onSignInteract(final Block block, final Player player, final IEssentials ess) public final boolean onSignInteract(final Block block, final Player player, final IEssentials ess, final ISignsPlugin isp)
{ {
final ISign sign = new BlockSign(block); final ISign sign = new BlockSign(block);
final IUser user = ess.getUserMap().getUser(player); final IUser user = ess.getUserMap().getUser(player);
if (user.checkSignThrottle(isp.getSettings().getData().getSignUsePerSecond()))
{
return false;
}
try try
{ {
return SignsPermissions.USE.isAuthorized(user, signName) return SignsPermissions.USE.isAuthorized(user, signName)
@@ -466,7 +471,7 @@ public class EssentialsSign
} }
static class BlockSign implements ISign public static class BlockSign implements ISign
{ {
private final transient Sign sign; private final transient Sign sign;
private final transient Block block; private final transient Block block;

View File

@@ -5,6 +5,9 @@ import java.util.logging.Logger;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IPlugin; import net.ess3.api.IPlugin;
import net.ess3.signs.listeners.SignBlockListener;
import net.ess3.signs.listeners.SignEntityListener;
import net.ess3.signs.listeners.SignPlayerListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;

View File

@@ -0,0 +1,40 @@
package net.ess3.signs;
import java.util.Collections;
import java.util.Map;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.ess3.storage.Comment;
import net.ess3.storage.StorageObject;
@Data
@EqualsAndHashCode(callSuper = false)
public class SignConfig implements StorageObject
{
private Map<String, Boolean> signs;
public Map<String, Boolean> getSigns()
{
return signs == null
? Collections.<String, Boolean>emptyMap()
: Collections.unmodifiableMap(signs);
}
public void setSigns(final Map<String, Boolean> signs)
{
this.signs = signs;
}
@Comment(
{
"How many times per second can Essentials signs be interacted with.",
"Values should be between 1-20, 20 being virtually no lag protection.",
"Lower numbers will reduce the possiblity of lag, but may annoy players."
})
private int signUsesPerSecond = 4;
public int getSignUsePerSecond() {
return signUsesPerSecond > 0 ? signUsesPerSecond : 1;
}
}

View File

@@ -1,5 +1,23 @@
package net.ess3.signs; package net.ess3.signs;
import net.ess3.signs.signs.SignMail;
import net.ess3.signs.signs.SignDisposal;
import net.ess3.signs.signs.SignBuy;
import net.ess3.signs.signs.SignWarp;
import net.ess3.signs.signs.SignSpawnmob;
import net.ess3.signs.signs.SignTime;
import net.ess3.signs.signs.SignWeather;
import net.ess3.signs.signs.SignEnchant;
import net.ess3.signs.signs.SignHeal;
import net.ess3.signs.signs.SignFree;
import net.ess3.signs.signs.SignInfo;
import net.ess3.signs.signs.SignBalance;
import net.ess3.signs.signs.SignSell;
import net.ess3.signs.signs.SignGameMode;
import net.ess3.signs.signs.SignKit;
import net.ess3.signs.signs.SignTrade;
import net.ess3.signs.signs.SignRepair;
public enum Signs public enum Signs
{ {

View File

@@ -1,23 +0,0 @@
package net.ess3.signs;
import java.util.Collections;
import java.util.Map;
import net.ess3.storage.StorageObject;
public class SignsConfig implements StorageObject
{
private Map<String, Boolean> signs;
public Map<String, Boolean> getSigns()
{
return signs == null
? Collections.<String, Boolean>emptyMap()
: Collections.unmodifiableMap(signs);
}
public void setSigns(final Map<String, Boolean> signs)
{
this.signs = signs;
}
}

View File

@@ -7,7 +7,7 @@ import net.ess3.storage.AsyncStorageObjectHolder;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
public class SignsConfigHolder extends AsyncStorageObjectHolder<SignsConfig> public class SignsConfigHolder extends AsyncStorageObjectHolder<SignConfig>
{ {
private final transient Plugin plugin; private final transient Plugin plugin;
private Set<EssentialsSign> enabledSigns = new HashSet<EssentialsSign>(); private Set<EssentialsSign> enabledSigns = new HashSet<EssentialsSign>();
@@ -15,7 +15,7 @@ public class SignsConfigHolder extends AsyncStorageObjectHolder<SignsConfig>
public SignsConfigHolder(final IEssentials ess, final Plugin plugin) public SignsConfigHolder(final IEssentials ess, final Plugin plugin)
{ {
super(ess, SignsConfig.class, new File(plugin.getDataFolder(), "config.yml")); super(ess, SignConfig.class, new File(plugin.getDataFolder(), "signs.yml"));
this.plugin = plugin; this.plugin = plugin;
onReload(); onReload();
final Map<String, Boolean> signs = getData().getSigns(); final Map<String, Boolean> signs = getData().getSigns();

View File

@@ -8,7 +8,6 @@ import net.ess3.permissions.DotStarPermission;
public class SignsPermissions public class SignsPermissions
{ {
public static final IPermission COLOR = new BasePermission("essentials.signs.", "color"); public static final IPermission COLOR = new BasePermission("essentials.signs.", "color");
public static final IPermission PROTECTION_OVERRIDE = new BasePermission("essentials.signs.protection.", "override");
public static final IPermission TRADE_OVERRIDE = new BasePermission("essentials.signs.trade.", "override"); public static final IPermission TRADE_OVERRIDE = new BasePermission("essentials.signs.trade.", "override");
public static final DotStarPermission CREATE = new DotStarPermission("essentials.signs.create"); public static final DotStarPermission CREATE = new DotStarPermission("essentials.signs.create");
public static final DotStarPermission USE = new DotStarPermission("essentials.signs.use"); public static final DotStarPermission USE = new DotStarPermission("essentials.signs.use");

View File

@@ -1,4 +1,4 @@
package net.ess3.signs; package net.ess3.signs.listeners;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -6,6 +6,9 @@ import net.ess3.api.IEssentials;
import net.ess3.api.ISettings; import net.ess3.api.ISettings;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.signs.EssentialsSign;
import net.ess3.signs.ISignsPlugin;
import net.ess3.signs.Signs;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;

View File

@@ -1,6 +1,8 @@
package net.ess3.signs; package net.ess3.signs.listeners;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.signs.EssentialsSign;
import net.ess3.signs.ISignsPlugin;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;

View File

@@ -1,6 +1,8 @@
package net.ess3.signs; package net.ess3.signs.listeners;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.signs.EssentialsSign;
import net.ess3.signs.ISignsPlugin;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
@@ -43,7 +45,7 @@ public class SignPlayerListener implements Listener
{ {
if (csign.getLine(0).equalsIgnoreCase(sign.getSuccessName())) if (csign.getLine(0).equalsIgnoreCase(sign.getSuccessName()))
{ {
sign.onSignInteract(block, event.getPlayer(), ess); sign.onSignInteract(block, event.getPlayer(), ess, plugin);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }

View File

@@ -1,8 +1,9 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.signs.EssentialsSign;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;

View File

@@ -1,9 +1,10 @@
package net.ess3.signs; package net.ess3.signs.signs;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
public class SignBuy extends EssentialsSign public class SignBuy extends EssentialsSign

View File

@@ -1,7 +1,8 @@
package net.ess3.signs; package net.ess3.signs.signs;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.signs.EssentialsSign;
public class SignDisposal extends EssentialsSign public class SignDisposal extends EssentialsSign

View File

@@ -1,4 +1,4 @@
package net.ess3.signs; package net.ess3.signs.signs;
import java.util.Locale; import java.util.Locale;
import static net.ess3.I18n._; import static net.ess3.I18n._;
@@ -7,6 +7,7 @@ import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.bukkit.Enchantments; import net.ess3.bukkit.Enchantments;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;

View File

@@ -1,4 +1,4 @@
package net.ess3.signs; package net.ess3.signs.signs;
public class SignException extends Exception public class SignException extends Exception

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.craftbukkit.InventoryWorkaround; import net.ess3.craftbukkit.InventoryWorkaround;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;

View File

@@ -1,4 +1,4 @@
package net.ess3.signs; package net.ess3.signs.signs;
import java.util.Locale; import java.util.Locale;
import static net.ess3.I18n._; import static net.ess3.I18n._;
@@ -6,6 +6,7 @@ import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import org.bukkit.GameMode; import org.bukkit.GameMode;

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
public class SignHeal extends EssentialsSign public class SignHeal extends EssentialsSign

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import java.io.IOException; import java.io.IOException;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import net.ess3.utils.textreader.IText; import net.ess3.utils.textreader.IText;
import net.ess3.utils.textreader.KeywordReplacer; import net.ess3.utils.textreader.KeywordReplacer;
import net.ess3.utils.textreader.TextInput; import net.ess3.utils.textreader.TextInput;

View File

@@ -1,4 +1,4 @@
package net.ess3.signs; package net.ess3.signs.signs;
import java.util.Locale; import java.util.Locale;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
@@ -7,6 +7,7 @@ import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.settings.Kit; import net.ess3.settings.Kit;
import net.ess3.signs.EssentialsSign;
public class SignKit extends EssentialsSign public class SignKit extends EssentialsSign

View File

@@ -1,9 +1,10 @@
package net.ess3.signs; package net.ess3.signs.signs;
import java.util.List; import java.util.List;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.signs.EssentialsSign;
public class SignMail extends EssentialsSign public class SignMail extends EssentialsSign

View File

@@ -1,4 +1,4 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
@@ -6,6 +6,7 @@ import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.commands.Commandrepair; import net.ess3.commands.Commandrepair;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
public class SignRepair extends EssentialsSign public class SignRepair extends EssentialsSign

View File

@@ -1,9 +1,10 @@
package net.ess3.signs; package net.ess3.signs.signs;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
public class SignSell extends EssentialsSign public class SignSell extends EssentialsSign

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.commands.Commandspawnmob; import net.ess3.commands.Commandspawnmob;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
public class SignSpawnmob extends EssentialsSign public class SignSpawnmob extends EssentialsSign

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import org.bukkit.World; import org.bukkit.World;

View File

@@ -1,10 +1,12 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import net.ess3.signs.SignsPermissions;
import net.ess3.utils.FormatUtil; import net.ess3.utils.FormatUtil;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.permissions.Permissions; import net.ess3.permissions.Permissions;
import net.ess3.signs.EssentialsSign;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;

View File

@@ -1,10 +1,11 @@
package net.ess3.signs; package net.ess3.signs.signs;
import static net.ess3.I18n._; import static net.ess3.I18n._;
import net.ess3.api.ChargeException; import net.ess3.api.ChargeException;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.IUser; import net.ess3.api.IUser;
import net.ess3.economy.Trade; import net.ess3.economy.Trade;
import net.ess3.signs.EssentialsSign;
import org.bukkit.World; import org.bukkit.World;