Add and implement sign break/create/interact events to EssAPI

Implement AfkStatusChangeEvent
This commit is contained in:
KHobbits 2013-12-31 17:18:04 +00:00
parent 0b71b6e93d
commit d48c02021d
12 changed files with 184 additions and 48 deletions

View File

@ -13,6 +13,7 @@ import java.util.GregorianCalendar;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.events.AfkStatusChangeEvent;
import net.ess3.api.events.UserBalanceUpdateEvent; import net.ess3.api.events.UserBalanceUpdateEvent;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
@ -486,6 +487,13 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
@Override @Override
public void setAfk(final boolean set) public void setAfk(final boolean set)
{ {
final AfkStatusChangeEvent afkEvent = new AfkStatusChangeEvent(this, set);
ess.getServer().getPluginManager().callEvent(afkEvent);
if (afkEvent.isCancelled())
{
return;
}
this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : set); this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : set);
if (set && !isAfk()) if (set && !isAfk())
{ {
@ -495,15 +503,13 @@ public class User extends UserData implements Comparable<User>, IReplyTo, net.es
{ {
afkPosition = null; afkPosition = null;
} }
super.setAfk(set); _setAfk(set);
} }
@Override
public boolean toggleAfk() public boolean toggleAfk()
{ {
final boolean now = super.toggleAfk(); setAfk(!isAfk());
this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now); return isAfk();
return now;
} }
@Override @Override

View File

@ -729,19 +729,13 @@ public abstract class UserData extends PlayerExtension implements IConf
return afk; return afk;
} }
public void setAfk(boolean set) public void _setAfk(boolean set)
{ {
afk = set; afk = set;
config.setProperty("afk", set); config.setProperty("afk", set);
config.save(); config.save();
} }
public boolean toggleAfk()
{
boolean ret = !isAfk();
setAfk(ret);
return ret;
}
private boolean newplayer; private boolean newplayer;
private String geolocation; private String geolocation;

View File

@ -8,6 +8,9 @@ import java.util.HashSet;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import net.ess3.api.IEssentials; import net.ess3.api.IEssentials;
import net.ess3.api.events.SignBreakEvent;
import net.ess3.api.events.SignCreateEvent;
import net.ess3.api.events.SignInteractEvent;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@ -28,7 +31,7 @@ public class EssentialsSign
this.signName = signName; this.signName = signName;
} }
public final boolean onSignCreate(final SignChangeEvent event, final IEssentials ess) protected final boolean onSignCreate(final SignChangeEvent event, final IEssentials ess)
{ {
final ISign sign = new EventSign(event); final ISign sign = new EventSign(event);
final User user = ess.getUser(event.getPlayer()); final User user = ess.getUser(event.getPlayer());
@ -40,6 +43,14 @@ public class EssentialsSign
return true; return true;
} }
sign.setLine(0, _("signFormatFail", this.signName)); sign.setLine(0, _("signFormatFail", this.signName));
final SignCreateEvent signEvent = new SignCreateEvent(sign, this, user);
ess.getServer().getPluginManager().callEvent(signEvent);
if (signEvent.isCancelled())
{
return false;
}
try try
{ {
final boolean ret = onSignCreate(sign, user, getUsername(user), ess); final boolean ret = onSignCreate(sign, user, getUsername(user), ess);
@ -76,12 +87,12 @@ public class EssentialsSign
return this.signName; return this.signName;
} }
private String getUsername(final User user) public String getUsername(final User user)
{ {
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) protected final boolean onSignInteract(final Block block, final Player player, final IEssentials ess)
{ {
final ISign sign = new BlockSign(block); final ISign sign = new BlockSign(block);
final User user = ess.getUser(player); final User user = ess.getUser(player);
@ -91,9 +102,20 @@ public class EssentialsSign
} }
try try
{ {
return (!user.isDead() && (user.isAuthorized("essentials.signs." + signName.toLowerCase(Locale.ENGLISH) + ".use") if (user.isDead() || !(user.isAuthorized("essentials.signs." + signName.toLowerCase(Locale.ENGLISH) + ".use")
|| user.isAuthorized("essentials.signs.use." + signName.toLowerCase(Locale.ENGLISH)))) || user.isAuthorized("essentials.signs.use." + signName.toLowerCase(Locale.ENGLISH))))
&& onSignInteract(sign, user, getUsername(user), ess); {
return false;
}
final SignInteractEvent signEvent = new SignInteractEvent(sign, this, user);
ess.getServer().getPluginManager().callEvent(signEvent);
if (signEvent.isCancelled())
{
return false;
}
return onSignInteract(sign, user, getUsername(user), ess);
} }
catch (ChargeException ex) catch (ChargeException ex)
{ {
@ -107,15 +129,26 @@ public class EssentialsSign
} }
} }
public final boolean onSignBreak(final Block block, final Player player, final IEssentials ess) protected final boolean onSignBreak(final Block block, final Player player, final IEssentials ess)
{ {
final ISign sign = new BlockSign(block); final ISign sign = new BlockSign(block);
final User user = ess.getUser(player); final User user = ess.getUser(player);
try try
{ {
return (user.isAuthorized("essentials.signs." + signName.toLowerCase(Locale.ENGLISH) + ".break") if (!(user.isAuthorized("essentials.signs." + signName.toLowerCase(Locale.ENGLISH) + ".break")
|| user.isAuthorized("essentials.signs.break." + signName.toLowerCase(Locale.ENGLISH))) || user.isAuthorized("essentials.signs.break." + signName.toLowerCase(Locale.ENGLISH))))
&& onSignBreak(sign, user, getUsername(user), ess); {
return false;
}
final SignBreakEvent signEvent = new SignBreakEvent(sign, this, user);
ess.getServer().getPluginManager().callEvent(signEvent);
if (signEvent.isCancelled())
{
return false;
}
return onSignBreak(sign, user, getUsername(user), ess);
} }
catch (SignException ex) catch (SignException ex)
{ {
@ -139,7 +172,7 @@ public class EssentialsSign
return true; return true;
} }
public final boolean onBlockPlace(final Block block, final Player player, final IEssentials ess) protected final boolean onBlockPlace(final Block block, final Player player, final IEssentials ess)
{ {
User user = ess.getUser(player); User user = ess.getUser(player);
try try
@ -157,7 +190,7 @@ public class EssentialsSign
return false; return false;
} }
public final boolean onBlockInteract(final Block block, final Player player, final IEssentials ess) protected final boolean onBlockInteract(final Block block, final Player player, final IEssentials ess)
{ {
User user = ess.getUser(player); User user = ess.getUser(player);
try try
@ -175,7 +208,7 @@ public class EssentialsSign
return false; return false;
} }
public final boolean onBlockBreak(final Block block, final Player player, final IEssentials ess) protected final boolean onBlockBreak(final Block block, final Player player, final IEssentials ess)
{ {
User user = ess.getUser(player); User user = ess.getUser(player);
try try
@ -189,32 +222,32 @@ public class EssentialsSign
return false; return false;
} }
public boolean onBlockBreak(final Block block, final IEssentials ess) protected boolean onBlockBreak(final Block block, final IEssentials ess)
{ {
return true; return true;
} }
public boolean onBlockExplode(final Block block, final IEssentials ess) protected boolean onBlockExplode(final Block block, final IEssentials ess)
{ {
return true; return true;
} }
public boolean onBlockBurn(final Block block, final IEssentials ess) protected boolean onBlockBurn(final Block block, final IEssentials ess)
{ {
return true; return true;
} }
public boolean onBlockIgnite(final Block block, final IEssentials ess) protected boolean onBlockIgnite(final Block block, final IEssentials ess)
{ {
return true; return true;
} }
public boolean onBlockPush(final Block block, final IEssentials ess) protected boolean onBlockPush(final Block block, final IEssentials ess)
{ {
return true; return true;
} }
public static boolean checkIfBlockBreaksSigns(final Block block) protected static boolean checkIfBlockBreaksSigns(final Block block)
{ {
final Block sign = block.getRelative(BlockFace.UP); final Block sign = block.getRelative(BlockFace.UP);
if (sign.getType() == Material.SIGN_POST && isValidSign(new BlockSign(sign))) if (sign.getType() == Material.SIGN_POST && isValidSign(new BlockSign(sign)))
@ -508,8 +541,10 @@ public class EssentialsSign
public final String getLine(final int index) public final String getLine(final int index)
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
for (char c : event.getLine(index).toCharArray()) { for (char c : event.getLine(index).toCharArray())
if (c < 0xF700 || c > 0xF747) { {
if (c < 0xF700 || c > 0xF747)
{
builder.append(c); builder.append(c);
} }
} }
@ -578,12 +613,12 @@ public class EssentialsSign
public interface ISign public interface ISign
{ {
String getLine(final int index); public String getLine(final int index);
void setLine(final int index, final String text); public void setLine(final int index, final String text);
public Block getBlock(); public Block getBlock();
void updateSign(); public void updateSign();
} }
} }

View File

@ -94,6 +94,7 @@ public class SignBlockListener implements Listener
} }
final String topLine = event.getLine(0); final String topLine = event.getLine(0);
//We loop through all sign types here to prevent clashes with preexisting signs later
for (Signs signs : Signs.values()) for (Signs signs : Signs.values())
{ {
final EssentialsSign sign = signs.getSign(); final EssentialsSign sign = signs.getSign();

View File

@ -1,6 +1,6 @@
package com.earth2me.essentials.signs; package com.earth2me.essentials.signs;
//This enum is used when checking to see what signs are enabled
public enum Signs public enum Signs
{ {
BALANCE(new SignBalance()), BALANCE(new SignBalance()),
@ -21,7 +21,6 @@ public enum Signs
TRADE(new SignTrade()), TRADE(new SignTrade()),
WARP(new SignWarp()), WARP(new SignWarp()),
WEATHER(new SignWeather()); WEATHER(new SignWeather());
private final EssentialsSign sign; private final EssentialsSign sign;
private Signs(final EssentialsSign sign) private Signs(final EssentialsSign sign)

View File

@ -5,8 +5,8 @@ import net.ess3.api.IUser;
public class AfkStatusChangeEvent extends StatusChangeEvent public class AfkStatusChangeEvent extends StatusChangeEvent
{ {
public AfkStatusChangeEvent(IUser affected, IUser controller, boolean value) public AfkStatusChangeEvent(IUser affected, boolean value)
{ {
super(affected, controller, value); super(affected, affected, value);
} }
} }

View File

@ -14,12 +14,6 @@ public class NickChangeEvent extends StateChangeEvent implements Cancellable
this.newValue = value; this.newValue = value;
} }
public NickChangeEvent(boolean isAsync, IUser affected, IUser controller, String value)
{
super(isAsync, affected, controller);
this.newValue = value;
}
public String getValue() public String getValue()
{ {
return newValue; return newValue;

View File

@ -0,0 +1,13 @@
package net.ess3.api.events;
import com.earth2me.essentials.signs.EssentialsSign;
import net.ess3.api.IUser;
public class SignBreakEvent extends SignEvent
{
public SignBreakEvent(EssentialsSign.ISign sign, EssentialsSign essSign, IUser user)
{
super(sign, essSign, user);
}
}

View File

@ -0,0 +1,13 @@
package net.ess3.api.events;
import com.earth2me.essentials.signs.EssentialsSign;
import net.ess3.api.IUser;
public class SignCreateEvent extends SignEvent
{
public SignCreateEvent(EssentialsSign.ISign sign, EssentialsSign essSign, IUser user)
{
super(sign, essSign, user);
}
}

View File

@ -0,0 +1,68 @@
package net.ess3.api.events;
import com.earth2me.essentials.signs.EssentialsSign;
import com.earth2me.essentials.signs.EssentialsSign.ISign;
import net.ess3.api.IUser;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* This handles common boilerplate for other SignEvent
*
*/
public class SignEvent extends Event implements Cancellable
{
private static final HandlerList handlers = new HandlerList();
private boolean cancelled = false;
ISign sign;
EssentialsSign essSign;
IUser user;
public SignEvent(final ISign sign, final EssentialsSign essSign, final IUser user)
{
super();
this.sign = sign;
this.essSign = essSign;
this.user = user;
}
public ISign getSign()
{
return sign;
}
public EssentialsSign getEssentialsSign()
{
return essSign;
}
public IUser getUser()
{
return user;
}
@Override
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
@Override
public boolean isCancelled()
{
return cancelled;
}
@Override
public void setCancelled(boolean cancelled)
{
this.cancelled = cancelled;
}
}

View File

@ -0,0 +1,13 @@
package net.ess3.api.events;
import com.earth2me.essentials.signs.EssentialsSign;
import net.ess3.api.IUser;
public class SignInteractEvent extends SignEvent
{
public SignInteractEvent(EssentialsSign.ISign sign, EssentialsSign essSign, IUser user)
{
super(sign, essSign, user);
}
}

View File

@ -7,7 +7,7 @@ import org.bukkit.event.HandlerList;
/** /**
* This handles common boilerplate for other StatusChangeEvents * This handles common boilerplate for other StateChangeEvents
* *
*/ */
public class StateChangeEvent extends Event implements Cancellable public class StateChangeEvent extends Event implements Cancellable