Merge branch 'master' into release

This commit is contained in:
snowleo 2011-07-18 20:55:31 +02:00
commit db5974970d
30 changed files with 209 additions and 43 deletions

View File

@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
public class BukkitPermissionsHandler implements IPermissionsHandler public class BukkitPermissionsHandler implements IPermissionsHandler
{ {
public String getGroup(Player base) public String getGroup(Player base)
{ {
return "default"; return "default";
@ -23,6 +22,20 @@ public class BukkitPermissionsHandler implements IPermissionsHandler
public boolean hasPermission(Player base, String node) public boolean hasPermission(Player base, String node)
{ {
if (base.hasPermission("-" + node))
{
return false;
}
final String[] parts = node.split("\\.");
final StringBuilder sb = new StringBuilder();
for (String part : parts)
{
if (base.hasPermission(sb.toString() + "*"))
{
return true;
}
sb.append(part).append(".");
}
return base.hasPermission(node); return base.hasPermission(node);
} }
@ -35,5 +48,4 @@ public class BukkitPermissionsHandler implements IPermissionsHandler
{ {
return ""; return "";
} }
} }

View File

@ -177,10 +177,7 @@ public class Essentials extends JavaPlugin implements IEssentials
pm.registerEvent(Type.PLAYER_QUIT, playerListener, Priority.Monitor, this); pm.registerEvent(Type.PLAYER_QUIT, playerListener, Priority.Monitor, this);
pm.registerEvent(Type.PLAYER_CHAT, playerListener, Priority.Lowest, this); pm.registerEvent(Type.PLAYER_CHAT, playerListener, Priority.Lowest, this);
pm.registerEvent(Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Lowest, this); pm.registerEvent(Type.PLAYER_COMMAND_PREPROCESS, playerListener, Priority.Lowest, this);
if (getSettings().getNetherPortalsEnabled()) pm.registerEvent(Type.PLAYER_MOVE, playerListener, Priority.High, this);
{
pm.registerEvent(Type.PLAYER_MOVE, playerListener, Priority.High, this);
}
pm.registerEvent(Type.PLAYER_LOGIN, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_LOGIN, playerListener, Priority.High, this);
pm.registerEvent(Type.PLAYER_TELEPORT, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_TELEPORT, playerListener, Priority.High, this);
pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.High, this);
@ -320,15 +317,27 @@ public class Essentials extends JavaPlugin implements IEssentials
m = m.replace("{IP}", user.getAddress().toString()); m = m.replace("{IP}", user.getAddress().toString());
m = m.replace("{BALANCE}", Double.toString(user.getMoney())); m = m.replace("{BALANCE}", Double.toString(user.getMoney()));
m = m.replace("{MAILS}", Integer.toString(user.getMails().size())); m = m.replace("{MAILS}", Integer.toString(user.getMails().size()));
m = m.replace("{WORLD}", user.getLocation().getWorld().getName());
} }
int playerHidden = 0;
m = m.replace("{ONLINE}", Integer.toString(getServer().getOnlinePlayers().length)); for (Player p : getServer().getOnlinePlayers())
{
if (getUser(p).isHidden())
{
playerHidden++;
}
}
m = m.replace("{ONLINE}", Integer.toString(getServer().getOnlinePlayers().length - playerHidden));
if (m.matches(".*\\{PLAYERLIST\\}.*")) if (m.matches(".*\\{PLAYERLIST\\}.*"))
{ {
StringBuilder online = new StringBuilder(); StringBuilder online = new StringBuilder();
for (Player p : getServer().getOnlinePlayers()) for (Player p : getServer().getOnlinePlayers())
{ {
if (getUser(p).isHidden())
{
continue;
}
if (online.length() > 0) if (online.length() > 0)
{ {
online.append(", "); online.append(", ");
@ -563,6 +572,12 @@ public class Essentials extends JavaPlugin implements IEssentials
public User getOfflineUser(String name) public User getOfflineUser(String name)
{ {
// Don't create a new offline user, if we already have that user loaded.
User u = users.get(name.toLowerCase());
if (u != null)
{
return u;
}
File userFolder = new File(getDataFolder(), "userdata"); File userFolder = new File(getDataFolder(), "userdata");
File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml"); File userFile = new File(userFolder, Util.sanitizeFileName(name) + ".yml");
if (userFile.exists()) if (userFile.exists())

View File

@ -100,9 +100,9 @@ public final class InventoryWorkaround
} }
for (int i = 0; i < items.length; i++) for (int i = 0; i < combined.length; i++)
{ {
final ItemStack item = items[i]; final ItemStack item = combined[i];
while (true) while (true)
{ {
// Do we already have a stack of it? // Do we already have a stack of it?

View File

@ -8,6 +8,7 @@ import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -131,7 +132,7 @@ public class Trade
} }
private static FileWriter fw = null; private static FileWriter fw = null;
public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, IEssentials ess) public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess)
{ {
if (!ess.getSettings().isEcoLogEnabled()) if (!ess.getSettings().isEcoLogEnabled())
{ {
@ -149,7 +150,7 @@ public class Trade
} }
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(type).append(",").append(subtype).append(",").append("event").append(",\""); sb.append(type).append(",").append(subtype).append(",").append(event).append(",\"");
sb.append(DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(new Date())); sb.append(DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(new Date()));
sb.append("\",\""); sb.append("\",\"");
if (sender != null) if (sender != null)
@ -201,6 +202,18 @@ public class Trade
sb.append(ess.getSettings().getCurrencySymbol()); sb.append(ess.getSettings().getCurrencySymbol());
} }
} }
if (loc == null)
{
sb.append(",\"\",\"\",\"\",\"\"");
}
else
{
sb.append(",\"");
sb.append(loc.getWorld().getName()).append("\",");
sb.append(loc.getBlockX()).append(",");
sb.append(loc.getBlockY()).append(",");
sb.append(loc.getBlockZ()).append(",");
}
sb.append("\n"); sb.append("\n");
try try
{ {

View File

@ -19,6 +19,7 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
private boolean teleportRequestHere; private boolean teleportRequestHere;
private final Teleport teleport; private final Teleport teleport;
private long lastActivity; private long lastActivity;
private boolean hidden = false;
User(Player base, IEssentials ess) User(Player base, IEssentials ess)
{ {
@ -250,10 +251,6 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
nickname.insert(0, prefix); nickname.insert(0, prefix);
nickname.append(suffix); nickname.append(suffix);
if (suffix.length() > 1 && suffix.substring(suffix.length() - 2, suffix.length() - 1).equals("§"))
{
nickname.append("§f");
}
return nickname.toString(); return nickname.toString();
} }
@ -331,4 +328,14 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now); this.setSleepingIgnored(this.isAuthorized("essentials.sleepingignored") ? true : now);
return now; return now;
} }
public boolean isHidden()
{
return hidden;
}
public void setHidden(boolean hidden)
{
this.hidden = hidden;
}
} }

View File

@ -60,6 +60,7 @@ public final class Economy
{ {
logger.log(Level.WARNING, Util.format("deleteFileError", config)); logger.log(Level.WARNING, Util.format("deleteFileError", config));
} }
ess.getAllUsers().remove(name.toLowerCase());
} }
} }

View File

@ -43,6 +43,10 @@ public class Commandgod extends EssentialsCommand
for (Player p : server.matchPlayer(name)) for (Player p : server.matchPlayer(name))
{ {
User u = ess.getUser(p); User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
boolean enabled = u.toggleGodModeEnabled(); boolean enabled = u.toggleGodModeEnabled();
u.sendMessage(Util.format("godMode", (enabled ? Util.i18n("enabled") : Util.i18n("disabled")))); u.sendMessage(Util.format("godMode", (enabled ? Util.i18n("enabled") : Util.i18n("disabled"))));
sender.sendMessage(Util.format("godMode",Util.format(enabled ? "godEnabledFor": "godDisabledFor", p.getDisplayName()))); sender.sendMessage(Util.format("godMode",Util.format(enabled ? "godEnabledFor": "godDisabledFor", p.getDisplayName())));

View File

@ -53,13 +53,17 @@ public class Commandheal extends EssentialsCommand
private void healOtherPlayers(Server server, CommandSender sender, String name) private void healOtherPlayers(Server server, CommandSender sender, String name)
{ {
List<Player> players = server.matchPlayer(name); List<Player> players = server.matchPlayer(name);
if(players.isEmpty()) if (players.isEmpty())
{ {
sender.sendMessage(Util.i18n("playerNotFound")); sender.sendMessage(Util.i18n("playerNotFound"));
return; return;
} }
for (Player p : players) for (Player p : players)
{ {
if (ess.getUser(p).isHidden())
{
continue;
}
p.setHealth(20); p.setHealth(20);
sender.sendMessage(Util.format("healOther", p.getDisplayName())); sender.sendMessage(Util.format("healOther", p.getDisplayName()));
} }

View File

@ -24,9 +24,33 @@ public class Commandlist extends EssentialsCommand
@Override @Override
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
{ {
boolean showhidden = false;
if (sender instanceof Player)
{
if (ess.getUser(sender).isAuthorized("essentials.list.hidden"))
{
showhidden = true;
}
}
else
{
showhidden = true;
}
int playerHidden = 0;
for (Player p : server.getOnlinePlayers())
{
if (ess.getUser(p).isHidden())
{
playerHidden++;
}
}
charge(sender); charge(sender);
StringBuilder online = new StringBuilder(); StringBuilder online = new StringBuilder();
online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length); online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length - playerHidden);
if (showhidden && playerHidden > 0)
{
online.append(ChatColor.GRAY).append("/").append(playerHidden);
}
online.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(server.getMaxPlayers()); online.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(server.getMaxPlayers());
online.append(ChatColor.BLUE).append(" players online."); online.append(ChatColor.BLUE).append(" players online.");
sender.sendMessage(online.toString()); sender.sendMessage(online.toString());
@ -37,6 +61,10 @@ public class Commandlist extends EssentialsCommand
for (Player p : server.getOnlinePlayers()) for (Player p : server.getOnlinePlayers())
{ {
User u = ess.getUser(p); User u = ess.getUser(p);
if (u.isHidden() && !showhidden)
{
continue;
}
String group = u.getGroup(); String group = u.getGroup();
List<User> list = sort.get(group); List<User> list = sort.get(group);
if (list == null) if (list == null)
@ -69,6 +97,10 @@ public class Commandlist extends EssentialsCommand
{ {
groupString.append("§7[AFK]§f"); groupString.append("§7[AFK]§f");
} }
if (user.isHidden())
{
groupString.append("§7[HIDDEN]§f");
}
groupString.append(user.getDisplayName()); groupString.append(user.getDisplayName());
} }
sender.sendMessage(groupString.toString()); sender.sendMessage(groupString.toString());
@ -79,7 +111,12 @@ public class Commandlist extends EssentialsCommand
List<User> users = new ArrayList<User>(); List<User> users = new ArrayList<User>();
for (Player p : server.getOnlinePlayers()) for (Player p : server.getOnlinePlayers())
{ {
users.add(ess.getUser(p)); final User u = ess.getUser(p);
if (u.isHidden() && !showhidden)
{
continue;
}
users.add(u);
} }
Collections.sort(users); Collections.sort(users);
@ -100,6 +137,10 @@ public class Commandlist extends EssentialsCommand
{ {
onlineUsers.append("§7[AFK]§f"); onlineUsers.append("§7[AFK]§f");
} }
if (user.isHidden())
{
onlineUsers.append("§7[HIDDEN]§f");
}
onlineUsers.append(user.getDisplayName()); onlineUsers.append(user.getDisplayName());
} }
sender.sendMessage(onlineUsers.toString()); sender.sendMessage(onlineUsers.toString());

View File

@ -5,6 +5,7 @@ import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.earth2me.essentials.Console; import com.earth2me.essentials.Console;
import com.earth2me.essentials.IReplyTo; import com.earth2me.essentials.IReplyTo;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util; import com.earth2me.essentials.Util;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -52,7 +53,8 @@ public class Commandmsg extends EssentialsCommand
for (Player p : matches) for (Player p : matches)
{ {
sender.sendMessage(Util.format("msgFormat", translatedMe, p.getDisplayName(), message)); sender.sendMessage(Util.format("msgFormat", translatedMe, p.getDisplayName(), message));
if (sender instanceof Player && ess.getUser(p).isIgnoredPlayer(((Player)sender).getName())) final User u = ess.getUser(p);
if (sender instanceof Player && (u.isIgnoredPlayer(((Player)sender).getName()) || u.isHidden()))
{ {
continue; continue;
} }

View File

@ -25,6 +25,10 @@ public class Commandpay extends EssentialsCommand
for (Player p : server.matchPlayer(args[0])) for (Player p : server.matchPlayer(args[0]))
{ {
User u = ess.getUser(p); User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
user.payUser(u, amount); user.payUser(u, amount);
} }
} }

View File

@ -26,6 +26,10 @@ public class Commandrealname extends EssentialsCommand
for (Player p : server.getOnlinePlayers()) for (Player p : server.getOnlinePlayers())
{ {
final User u = ess.getUser(p); final User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
final String displayName = ChatColor.stripColor(u.getDisplayName()).toLowerCase(); final String displayName = ChatColor.stripColor(u.getDisplayName()).toLowerCase();
if (!whois.equals(displayName) if (!whois.equals(displayName)
&& !displayName.equals(ChatColor.stripColor(ess.getSettings().getNicknamePrefix()) + whois) && !displayName.equals(ChatColor.stripColor(ess.getSettings().getNicknamePrefix()) + whois)

View File

@ -153,7 +153,7 @@ public class Commandsell extends EssentialsCommand
final ItemStack ris = new ItemStack(is.getType(), amount, is.getDurability()); final ItemStack ris = new ItemStack(is.getType(), amount, is.getDurability());
InventoryWorkaround.removeItem(user.getInventory(), true, ris); InventoryWorkaround.removeItem(user.getInventory(), true, ris);
user.updateInventory(); user.updateInventory();
Trade.log("Command", "Sell", "Item", user.getName(), new Trade(ris, ess), user.getName(), new Trade(worth*amount, ess), ess); Trade.log("Command", "Sell", "Item", user.getName(), new Trade(ris, ess), user.getName(), new Trade(worth*amount, ess), user.getLocation(), ess);
user.giveMoney(worth * amount); user.giveMoney(worth * amount);
user.sendMessage(Util.format("itemSold", Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess))); user.sendMessage(Util.format("itemSold", Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess)));
logger.log(Level.INFO, Util.format("itemSoldConsole", user.getDisplayName(), is.getType().toString().toLowerCase(), Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess))); logger.log(Level.INFO, Util.format("itemSoldConsole", user.getDisplayName(), is.getType().toString().toLowerCase(), Util.formatCurrency(worth * amount, ess), amount, Util.formatCurrency(worth, ess)));

View File

@ -106,6 +106,7 @@ public class Commandtime extends EssentialsCommand
if ("reset".equalsIgnoreCase(timeString)) if ("reset".equalsIgnoreCase(timeString))
{ {
user.resetPlayerTime(); user.resetPlayerTime();
return;
} }
throw new Exception(Util.i18n("onlyDayNight")); throw new Exception(Util.i18n("onlyDayNight"));
} }

View File

@ -28,6 +28,10 @@ public class Commandwhois extends EssentialsCommand
for (Player p : server.getOnlinePlayers()) for (Player p : server.getOnlinePlayers())
{ {
User u = ess.getUser(p); User u = ess.getUser(p);
if (u.isHidden())
{
continue;
}
String dn = ChatColor.stripColor(u.getNick()); String dn = ChatColor.stripColor(u.getNick());
if (!whois.equalsIgnoreCase(dn) if (!whois.equalsIgnoreCase(dn)
&& !whois.equalsIgnoreCase(dn.substring(prefixLength)) && !whois.equalsIgnoreCase(dn.substring(prefixLength))

View File

@ -53,12 +53,18 @@ public abstract class EssentialsCommand implements IEssentialsCommand
for (Player p : matches) for (Player p : matches)
{ {
if (p.getDisplayName().startsWith(args[pos])) final User u = ess.getUser(p);
if (u.getDisplayName().startsWith(args[pos]) && (getOffline || !u.isHidden()))
{ {
return ess.getUser(p); return u;
} }
} }
return ess.getUser(matches.get(0)); final User u = ess.getUser(matches.get(0));
if (!getOffline && u.isHidden())
{
throw new NoSuchFieldException(Util.i18n("playerNotFound"));
}
return u;
} }
@Override @Override

View File

@ -29,7 +29,7 @@ public class SignBuy extends EssentialsSign
charge.isAffordableFor(player); charge.isAffordableFor(player);
items.pay(player); items.pay(player);
charge.charge(player); charge.charge(player);
Trade.log("Sign", "Buy", "Interact", username, charge, username, items, ess); Trade.log("Sign", "Buy", "Interact", username, charge, username, items, sign.getBlock().getLocation(), ess);
return true; return true;
} }
} }

View File

@ -32,7 +32,7 @@ public class SignFree extends EssentialsSign
inv.clear(); inv.clear();
InventoryWorkaround.addItem(inv, true, item); InventoryWorkaround.addItem(inv, true, item);
player.showInventory(inv); player.showInventory(inv);
Trade.log("Sign", "Free", "Interact", username, null, username, new Trade(item, ess), ess); Trade.log("Sign", "Free", "Interact", username, null, username, new Trade(item, ess), sign.getBlock().getLocation(), ess);
return true; return true;
} }
} }

View File

@ -29,7 +29,7 @@ public class SignSell extends EssentialsSign
charge.isAffordableFor(player); charge.isAffordableFor(player);
money.pay(player); money.pay(player);
charge.charge(player); charge.charge(player);
Trade.log("Sign", "Sell", "Interact", username, charge, username, money, ess); Trade.log("Sign", "Sell", "Interact", username, charge, username, money, sign.getBlock().getLocation(), ess);
return true; return true;
} }
} }

View File

@ -24,7 +24,7 @@ public class SignTrade extends EssentialsSign
charge.isAffordableFor(player); charge.isAffordableFor(player);
sign.setLine(3, "§8" + username); sign.setLine(3, "§8" + username);
charge.charge(player); charge.charge(player);
Trade.log("Sign", "Trade", "Create", username, charge, username, null, ess); Trade.log("Sign", "Trade", "Create", username, charge, username, null, sign.getBlock().getLocation(), ess);
return true; return true;
} }
@ -36,7 +36,7 @@ public class SignTrade extends EssentialsSign
final Trade stored = getTrade(sign, 1, true, true, ess); final Trade stored = getTrade(sign, 1, true, true, ess);
substractAmount(sign, 1, stored, ess); substractAmount(sign, 1, stored, ess);
stored.pay(player); stored.pay(player);
Trade.log("Sign", "Trade", "OwnerInteract", username, null, username, stored, ess); Trade.log("Sign", "Trade", "OwnerInteract", username, null, username, stored, sign.getBlock().getLocation(), ess);
} }
else else
{ {
@ -47,7 +47,7 @@ public class SignTrade extends EssentialsSign
trade.pay(player); trade.pay(player);
addAmount(sign, 1, charge, ess); addAmount(sign, 1, charge, ess);
charge.charge(player); charge.charge(player);
Trade.log("Sign", "Trade", "Interact", sign.getLine(3), charge, username, trade, ess); Trade.log("Sign", "Trade", "Interact", sign.getLine(3), charge, username, trade, sign.getBlock().getLocation(), ess);
} }
sign.updateSign(); sign.updateSign();
return true; return true;
@ -63,7 +63,7 @@ public class SignTrade extends EssentialsSign
final Trade stored2 = getTrade(sign, 2, true, false, ess); final Trade stored2 = getTrade(sign, 2, true, false, ess);
stored1.pay(player); stored1.pay(player);
stored2.pay(player); stored2.pay(player);
Trade.log("Sign", "Trade", "Break", username, stored2, username, stored1, ess); Trade.log("Sign", "Trade", "Break", username, stored2, username, stored1, sign.getBlock().getLocation(), ess);
return true; return true;
} }
else else

View File

@ -125,31 +125,41 @@ player-commands:
- balance - balance
- clearinventory - clearinventory
- compass - compass
- depth
- getpos
- help - help
- helpop - helpop
- home - home
- home.others - home.others
- ignore - ignore
- info - info
- kit
- list - list
- mail - mail
- mail.send
- me
- motd - motd
- msg - msg
- nick - nick
- pay - pay
- ping
- powertool - powertool
- r - r
- rules - rules
- seen - seen
- sell - sell
- sethome - sethome
- setxmpp
- spawn
- suicide - suicide
- tpa - tpa
- tpaccept - tpaccept
- tpahere - tpahere
- tpdeny - tpdeny
- warp
- world - world
- worth - worth
- xmpp
# Note: All items MUST be followed by a quantity! # Note: All items MUST be followed by a quantity!
# Times are measured in seconds. # Times are measured in seconds.
@ -332,7 +342,10 @@ protect:
lightning-fire-spread: true lightning-fire-spread: true
portal-creation: false portal-creation: false
tnt-explosion: false tnt-explosion: false
tnt-playerdamage: false
fireball-explosion: false fireball-explosion: false
fireball-fire: false
fireball-playerdamage: false
creeper-explosion: false creeper-explosion: false
creeper-playerdamage: false creeper-playerdamage: false
creeper-blockdamage: false creeper-blockdamage: false

View File

@ -215,8 +215,8 @@ playerInJail = \u00a7cPlayer is already in jail {0}.
playerJailed = \u00a77Player {0} jailed. playerJailed = \u00a77Player {0} jailed.
playerJailedFor = \u00a77Player {0} jailed for {1}. playerJailedFor = \u00a77Player {0} jailed for {1}.
playerKicked = \u00a7cPlayer {0} kicked: {1} playerKicked = \u00a7cPlayer {0} kicked: {1}
playerMuted = "\u00a77You have been muted" playerMuted = \u00a77You have been muted
playerMutedFor = "\u00a77You have been muted for {0}" playerMutedFor = \u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cPlayer {0} was never on this server. playerNeverOnServer = \u00a7cPlayer {0} was never on this server.
playerNotFound = \u00a7cPlayer not found. playerNotFound = \u00a7cPlayer not found.
playerUnmuted = "\u00a77You have been unmuted" playerUnmuted = "\u00a77You have been unmuted"

View File

@ -217,8 +217,8 @@ playerInJail = \u00a7cSpiller er allerede i f\u00e6ngsel {0}.
playerJailed = \u00a77Spiller {0} f\u00e6ngslet. playerJailed = \u00a77Spiller {0} f\u00e6ngslet.
playerJailedFor = \u00a77Spiller {0} f\u00e6ngslet for {1}. playerJailedFor = \u00a77Spiller {0} f\u00e6ngslet for {1}.
playerKicked = \u00a7cPlayer {0} kicked: {1} playerKicked = \u00a7cPlayer {0} kicked: {1}
playerMuted = "\u00a77You have been muted" playerMuted = \u00a77You have been muted
playerMutedFor = "\u00a77You have been muted for {0}" playerMutedFor = \u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cSpiller {0} var aldrig p\u00e5 denne server. playerNeverOnServer = \u00a7cSpiller {0} var aldrig p\u00e5 denne server.
playerNotFound = \u00a7cSpiller ikke fundet. playerNotFound = \u00a7cSpiller ikke fundet.
playerUnmuted = "\u00a77You have been unmuted" playerUnmuted = "\u00a77You have been unmuted"

View File

@ -215,8 +215,8 @@ playerInJail = \u00a7cSpieler ist bereits in Gef\u00e4ngnis {0}.
playerJailed = \u00a77Spieler {0} eingesperrt. playerJailed = \u00a77Spieler {0} eingesperrt.
playerJailedFor = \u00a77Spieler {0} eingesperrt f\u00fcr {1}. playerJailedFor = \u00a77Spieler {0} eingesperrt f\u00fcr {1}.
playerKicked = \u00a7cSpieler {0} rausgeworfen: {1} playerKicked = \u00a7cSpieler {0} rausgeworfen: {1}
playerMuted = "\u00a77You have been muted" playerMuted = \u00a77You have been muted
playerMutedFor = "\u00a77You have been muted for {0}" playerMutedFor = \u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cSpieler {0} war niemals auf diesem Server. playerNeverOnServer = \u00a7cSpieler {0} war niemals auf diesem Server.
playerNotFound = \u00a7cSpieler nicht gefunden. playerNotFound = \u00a7cSpieler nicht gefunden.
playerUnmuted = "\u00a77You have been unmuted" playerUnmuted = "\u00a77You have been unmuted"

View File

@ -215,8 +215,8 @@ playerInJail = \u00a7cPlayer is already in jail {0}.
playerJailed = \u00a77Player {0} jailed. playerJailed = \u00a77Player {0} jailed.
playerJailedFor = \u00a77Player {0} jailed for {1}. playerJailedFor = \u00a77Player {0} jailed for {1}.
playerKicked = \u00a7cPlayer {0} kicked: {1} playerKicked = \u00a7cPlayer {0} kicked: {1}
playerMuted = "\u00a77You have been muted" playerMuted = \u00a77You have been muted
playerMutedFor = "\u00a77You have been muted for {0}" playerMutedFor = \u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cPlayer {0} was never on this server. playerNeverOnServer = \u00a7cPlayer {0} was never on this server.
playerNotFound = \u00a7cPlayer not found. playerNotFound = \u00a7cPlayer not found.
playerUnmuted = "\u00a77You have been unmuted" playerUnmuted = "\u00a77You have been unmuted"

View File

@ -215,8 +215,8 @@ playerInJail = \u00a7cLe joueur est d\u00e9j\u00e0 dans la prison {0}.
playerJailed = \u00a77Le joueur {0} a \u00e9t\u00e9 emprisonn\u00e9. playerJailed = \u00a77Le joueur {0} a \u00e9t\u00e9 emprisonn\u00e9.
playerJailedFor = \u00a77{0} a \u00e9t\u00e9 emprisonn\u00e9 pour {1}. playerJailedFor = \u00a77{0} a \u00e9t\u00e9 emprisonn\u00e9 pour {1}.
playerKicked = \u00a7cPlayer {0} kicked: {1} playerKicked = \u00a7cPlayer {0} kicked: {1}
playerMuted = "\u00a77You have been muted" playerMuted = \u00a77You have been muted
playerMutedFor = "\u00a77You have been muted for {0}" playerMutedFor = \u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cLe joueur {0} n''a jamais \u00e9t\u00e9 sur le serveur. playerNeverOnServer = \u00a7cLe joueur {0} n''a jamais \u00e9t\u00e9 sur le serveur.
playerNotFound = \u00a7cLe joueur est introuvable. playerNotFound = \u00a7cLe joueur est introuvable.
playerUnmuted = "\u00a77You have been unmuted" playerUnmuted = "\u00a77You have been unmuted"

View File

@ -216,8 +216,8 @@ playerInJail = \u00a7cSpeler zit al in de gevangenis {0}.
playerJailed = \u00a77Speler {0} is in de gevangenis gezet. playerJailed = \u00a77Speler {0} is in de gevangenis gezet.
playerJailedFor = \u00a77Speler {0} is in de gevangenis gezet voor {1}. playerJailedFor = \u00a77Speler {0} is in de gevangenis gezet voor {1}.
playerKicked = \u00a7cPlayer {0} kicked: {1} playerKicked = \u00a7cPlayer {0} kicked: {1}
playerMuted = "\u00a77You have been muted" playerMuted = \u00a77You have been muted
playerMutedFor = "\u00a77You have been muted for {0}" playerMutedFor = \u00a77You have been muted for {0}
playerNeverOnServer = \u00a7cSpeler {0} is nooit op deze server geweest. playerNeverOnServer = \u00a7cSpeler {0} is nooit op deze server geweest.
playerNotFound = \u00a7cSpeler niet gevonden. playerNotFound = \u00a7cSpeler niet gevonden.
playerUnmuted = "\u00a77You have been unmuted" playerUnmuted = "\u00a77You have been unmuted"

View File

@ -53,6 +53,7 @@ public class EssentialsProtect extends JavaPlugin implements IConf, IProtect
pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this); pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this);
pm.registerEvent(Type.CREATURE_SPAWN, entityListener, Priority.Highest, this); pm.registerEvent(Type.CREATURE_SPAWN, entityListener, Priority.Highest, this);
pm.registerEvent(Type.ENTITY_TARGET, entityListener, Priority.Highest, this); pm.registerEvent(Type.ENTITY_TARGET, entityListener, Priority.Highest, this);
pm.registerEvent(Type.EXPLOSION_PRIME, entityListener, Priority.Highest, this);
final EssentialsProtectWeatherListener weatherListener = new EssentialsProtectWeatherListener(this); final EssentialsProtectWeatherListener weatherListener = new EssentialsProtectWeatherListener(this);
pm.registerEvent(Type.LIGHTNING_STRIKE, weatherListener, Priority.Highest, this); pm.registerEvent(Type.LIGHTNING_STRIKE, weatherListener, Priority.Highest, this);

View File

@ -18,8 +18,10 @@ import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.craftbukkit.entity.CraftTNTPrimed; import org.bukkit.craftbukkit.entity.CraftTNTPrimed;
import org.bukkit.entity.Creeper; import org.bukkit.entity.Creeper;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
@ -30,6 +32,7 @@ import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityListener; import org.bukkit.event.entity.EntityListener;
import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.EntityTargetEvent.TargetReason; import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
import org.bukkit.event.entity.ExplosionPrimeEvent;
public class EssentialsProtectEntityListener extends EntityListener public class EssentialsProtectEntityListener extends EntityListener
@ -118,6 +121,24 @@ public class EssentialsProtectEntityListener extends EntityListener
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (eAttack instanceof Fireball && prot.getSettingBool(ProtectConfig.prevent_fireball_playerdmg)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.fireball")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{
event.setCancelled(true);
return;
}
if (eAttack instanceof TNTPrimed && prot.getSettingBool(ProtectConfig.prevent_tnt_playerdmg)
&& !(target instanceof Player
&& user.isAuthorized("essentials.protect.damage.tnt")
&& !user.isAuthorized("essentials.protect.damage.disable")))
{
event.setCancelled(true);
return;
}
} }
if (event instanceof EntityDamageByProjectileEvent if (event instanceof EntityDamageByProjectileEvent
@ -314,4 +335,14 @@ public class EssentialsProtectEntityListener extends EntityListener
return; return;
} }
} }
@Override
public void onExplosionPrime(ExplosionPrimeEvent event)
{
if (event.getEntity() instanceof CraftFireball
&& prot.getSettingBool(ProtectConfig.prevent_fireball_fire))
{
event.setFire(false);
}
}
} }

View File

@ -32,7 +32,10 @@ public enum ProtectConfig
prevent_portal_creation("protect.prevent.portal-creation", false), prevent_portal_creation("protect.prevent.portal-creation", false),
prevent_block_on_rail("protect.protect.prevent-block-on-rails", false), prevent_block_on_rail("protect.protect.prevent-block-on-rails", false),
prevent_tnt_explosion("protect.prevent.tnt-explosion", false), prevent_tnt_explosion("protect.prevent.tnt-explosion", false),
prevent_tnt_playerdmg("protect.prevent.tnt-playerdamage", false),
prevent_fireball_explosion("protect.prevent.fireball-explosion", false), prevent_fireball_explosion("protect.prevent.fireball-explosion", false),
prevent_fireball_fire("protect.prevent.fireball-fire", false),
prevent_fireball_playerdmg("protect.prevent.fireball-playerdamage", false),
prevent_creeper_explosion("protect.prevent.creeper-explosion", true), prevent_creeper_explosion("protect.prevent.creeper-explosion", true),
prevent_creeper_playerdmg("protect.prevent.creeper-playerdamage", false), prevent_creeper_playerdmg("protect.prevent.creeper-playerdamage", false),
prevent_creeper_blockdmg("protect.prevent.creeper-blockdamage", false), prevent_creeper_blockdmg("protect.prevent.creeper-blockdamage", false),