diff --git a/Essentials/nbproject/project.properties b/Essentials/nbproject/project.properties index 71fea5cf9..7a5ffe7bb 100644 --- a/Essentials/nbproject/project.properties +++ b/Essentials/nbproject/project.properties @@ -66,6 +66,7 @@ endorsed.classpath= excludes= file.reference.BOSEconomy7.jar=../lib/BOSEconomy7.jar file.reference.bPermissions.jar=../lib/bPermissions.jar +file.reference.bpermissions2.jar=../lib/bpermissions2.jar file.reference.bukkit.jar=../lib/bukkit.jar file.reference.craftbukkit.jar=../lib/craftbukkit.jar file.reference.iCo4.jar=../lib/iCo4.jar @@ -97,7 +98,8 @@ javac.classpath=\ ${file.reference.bukkit.jar}:\ ${file.reference.craftbukkit.jar}:\ ${file.reference.Vault.jar}:\ - ${file.reference.Privileges.jar} + ${file.reference.Privileges.jar}:\ + ${file.reference.bpermissions2.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index 560eb6f79..c29cc5b1a 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -2,6 +2,7 @@ package com.earth2me.essentials; import com.earth2me.essentials.commands.IEssentialsCommand; import com.earth2me.essentials.signs.EssentialsSign; +import com.earth2me.essentials.textreader.IText; import java.text.MessageFormat; import java.util.List; import java.util.Map; @@ -14,9 +15,7 @@ public interface ISettings extends IConf { boolean areSignsDisabled(); - String format(String format, IUser user); - - String getAnnounceNewPlayerFormat(IUser user); + IText getAnnounceNewPlayerFormat(); boolean getAnnounceNewPlayers(); @@ -35,7 +34,7 @@ public interface ISettings extends IConf String getCurrencySymbol(); int getOversizedStackSize(); - + int getDefaultStackSize(); double getHealCooldown(); @@ -101,7 +100,7 @@ public interface ISettings extends IConf boolean isTradeInStacks(int id); List itemSpawnBlacklist(); - + List enabledSigns(); boolean permissionBasedItemSpawn(); @@ -143,18 +142,18 @@ public interface ISettings extends IConf public void setDebug(boolean debug); Set getNoGodWorlds(); - + boolean getUpdateBedAtDaytime(); - + boolean getRepairEnchanted(); - + boolean getIsWorldTeleportPermissions(); - + boolean registerBackInListener(); boolean getDisableItemPickupWhileAfk(); EventPriority getRespawnPriority(); - + long getTpaAcceptCancellation(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index 6b81753b6..592b80694 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -4,6 +4,10 @@ import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.commands.IEssentialsCommand; import com.earth2me.essentials.signs.EssentialsSign; import com.earth2me.essentials.signs.Signs; +import com.earth2me.essentials.textreader.IText; +import com.earth2me.essentials.textreader.KeywordReplacer; +import com.earth2me.essentials.textreader.SimpleTextInput; +import com.earth2me.essentials.textreader.SimpleTextPager; import java.io.File; import java.text.MessageFormat; import java.util.*; @@ -324,15 +328,9 @@ public class Settings implements ISettings } @Override - public String getAnnounceNewPlayerFormat(IUser user) + public IText getAnnounceNewPlayerFormat() { - return format(config.getString("newbies.announce-format", "&dWelcome {DISPLAYNAME} to the server!"), user); - } - - @Override - public String format(String format, IUser user) - { - return format.replace('&', '§').replace("§§", "&").replace("{PLAYER}", user.getDisplayName()).replace("{DISPLAYNAME}", user.getDisplayName()).replace("{GROUP}", user.getGroup()).replace("{USERNAME}", user.getName()).replace("{ADDRESS}", user.getAddress().toString()); + return new SimpleTextInput(Util.replaceColor(config.getString("newbies.announce-format", "&dWelcome {DISPLAYNAME} to the server!"))); } @Override @@ -362,19 +360,19 @@ public class Settings implements ISettings itemSpawnBl = getItemSpawnBlacklist(); chatFormats.clear(); } - private List itemSpawnBl = new ArrayList(); - + @Override public List itemSpawnBlacklist() { return itemSpawnBl; } - + private List getItemSpawnBlacklist() { final List epItemSpwn = new ArrayList(); - if (ess.getItemDb() == null) { + if (ess.getItemDb() == null) + { logger.log(Level.FINE, "Aborting ItemSpawnBL read, itemDB not yet loaded."); return epItemSpwn; } @@ -384,7 +382,7 @@ public class Settings implements ISettings if (itemName.isEmpty()) { continue; - } + } try { final ItemStack iStack = ess.getItemDb().get(itemName); @@ -397,19 +395,18 @@ public class Settings implements ISettings } return epItemSpwn; } - private List enabledSigns = new ArrayList(); - + @Override public List enabledSigns() { return enabledSigns; } - + private List getEnabledSigns() { List newSigns = new ArrayList(); - + for (String signName : config.getStringList("enabledSigns", null)) { signName = signName.trim().toUpperCase(Locale.ENGLISH); @@ -604,7 +601,6 @@ public class Settings implements ISettings { return config.getBoolean("death-messages", true); } - private Set noGodWorlds = new HashSet(); @Override diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandback.java b/Essentials/src/com/earth2me/essentials/commands/Commandback.java index 67698598a..2ad39ceea 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandback.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandback.java @@ -20,5 +20,6 @@ public class Commandback extends EssentialsCommand charge.isAffordableFor(user); user.sendMessage(_("backUsageMsg")); user.getTeleport().back(charge); + throw new NoChargeException(); } } diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/BPermissions2Handler.java new file mode 100644 index 000000000..f4122bf53 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/perm/BPermissions2Handler.java @@ -0,0 +1,62 @@ +package com.earth2me.essentials.perm; + +import de.bananaco.bpermissions.api.ApiLayer; +import de.bananaco.bpermissions.api.World; +import de.bananaco.bpermissions.api.WorldManager; +import de.bananaco.bpermissions.api.util.Calculable; +import de.bananaco.bpermissions.api.util.CalculableType; +import java.util.Arrays; +import java.util.List; +import org.bukkit.entity.Player; + + +public class BPermissions2Handler extends SuperpermsHandler +{ + public BPermissions2Handler() + { + + } + + @Override + public String getGroup(final Player base) + { + final List groups = getGroups(base); + if (groups == null || groups.isEmpty()) + { + return null; + } + return groups.get(0); + } + + @Override + public List getGroups(final Player base) + { + final String[] groups = ApiLayer.getGroups(base.getWorld().getName(), CalculableType.USER, base.getName()); + return Arrays.asList(groups); + } + + @Override + public boolean inGroup(final Player base, final String group) + { + return ApiLayer.hasGroup(base.getWorld().getName(), CalculableType.USER, base.getName(), group); + } + + @Override + public boolean canBuild(final Player base, final String group) + { + return hasPermission(base, "essentials.build") || hasPermission(base, "bPermissions.build"); + } + + @Override + public String getPrefix(final Player base) + { + return ApiLayer.getValue(base.getWorld().getName(), CalculableType.USER, base.getName(), "prefix"); + } + + @Override + public String getSuffix(final Player base) + { + return ApiLayer.getValue(base.getWorld().getName(), CalculableType.USER, base.getName(), "suffix"); + } + +} diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index aa786934e..a344968c2 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.perm; +import com.earth2me.essentials.Util; import java.util.Collections; import java.util.List; import java.util.logging.Level; @@ -111,17 +112,6 @@ public class PermissionsHandler implements IPermissionsHandler return; } - final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions"); - if (bPermPlugin != null && bPermPlugin.isEnabled()) - { - if (!(handler instanceof BPermissionsHandler)) - { - LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); - handler = new BPermissionsHandler(); - } - return; - } - final Plugin GMplugin = pluginManager.getPlugin("GroupManager"); if (GMplugin != null && GMplugin.isEnabled()) { @@ -155,6 +145,27 @@ public class PermissionsHandler implements IPermissionsHandler return; } + final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions"); + if (bPermPlugin != null && bPermPlugin.isEnabled()) + { + final String bVer = bPermPlugin.getDescription().getVersion().replace(".", ""); + if (Util.isInt(bVer) && Integer.parseInt(bVer) < 284) + { + if (!(handler instanceof BPermissionsHandler)) + { + LOGGER.log(Level.INFO, "Essentials: Using bPermissions based permissions."); + handler = new BPermissionsHandler(); + } + return; + } + if (!(handler instanceof BPermissions2Handler)) + { + LOGGER.log(Level.INFO, "Essentials: Using bPermissions2 based permissions."); + handler = new BPermissions2Handler(); + } + return; + + } final Plugin permPlugin = pluginManager.getPlugin("Permissions"); if (permPlugin != null && permPlugin.isEnabled()) { diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index 70a118bcf..2e767cb72 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -27,7 +27,7 @@ public class SuperpermsHandler implements IPermissionsHandler @Override public boolean inGroup(final Player base, final String group) { - return false; + return hasPermission(base, "group." + group); } @Override diff --git a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java index a7aab67ba..4c4e3364b 100644 --- a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java +++ b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java @@ -33,12 +33,14 @@ public class KeywordReplacer implements IText String displayName, ipAddress, balance, mails, world; String worlds, online, unique, playerlist, date, time; String worldTime12, worldTime24, worldDate, plugins; - String version; + String userName, address, version; if (sender instanceof Player) { final User user = ess.getUser(sender); displayName = user.getDisplayName(); + userName = user.getName(); ipAddress = user.getAddress().getAddress().toString(); + address = user.getAddress().toString(); balance = Double.toString(user.getMoney()); mails = Integer.toString(user.getMails().size()); world = user.getLocation().getWorld().getName(); @@ -107,8 +109,12 @@ public class KeywordReplacer implements IText for (int i = 0; i < input.getLines().size(); i++) { String line = input.getLines().get(i); + line = line.replace("{PLAYER}", displayName); + line = line.replace("{DISPLAYNAME}", displayName); + line = line.replace("{USERNAME}", displayName); line = line.replace("{IP}", ipAddress); + line = line.replace("{ADDRESS}", ipAddress); line = line.replace("{BALANCE}", balance); line = line.replace("{MAILS}", mails); line = line.replace("{WORLD}", world); diff --git a/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java new file mode 100644 index 000000000..a9f9e1480 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextInput.java @@ -0,0 +1,35 @@ +package com.earth2me.essentials.textreader; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + + +public class SimpleTextInput implements IText +{ + private final transient List lines = new ArrayList(); + + public SimpleTextInput (final String input) { + lines.add(input); + } + + @Override + public List getLines() + { + return lines; + } + + @Override + public List getChapters() + { + return Collections.emptyList(); + } + + @Override + public Map getBookmarks() + { + return Collections.emptyMap(); + } + +} diff --git a/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java new file mode 100644 index 000000000..ea1b787d5 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/textreader/SimpleTextPager.java @@ -0,0 +1,31 @@ +package com.earth2me.essentials.textreader; + +import org.bukkit.command.CommandSender; + + +public class SimpleTextPager +{ + private final transient IText text; + + public SimpleTextPager(final IText text) + { + this.text = text; + } + + public void showPage(final CommandSender sender) + { + for (String line : text.getLines()) + { + sender.sendMessage(line); + } + } + + public String getString(int line) + { + if (text.getLines().size() < line) + { + return null; + } + return text.getLines().get(line); + } +} diff --git a/Essentials/src/info.txt b/Essentials/src/info.txt index e05843dcb..efc629923 100644 --- a/Essentials/src/info.txt +++ b/Essentials/src/info.txt @@ -7,6 +7,10 @@ Name it info_username.txt or info_groupname.txt This also works with motd and rules. +Extra pages: +Type /info Colours +Type /info Tags + It can contain chapters like the Chapter1 below: #Chapter1 @@ -25,7 +29,9 @@ Minecraft colors: #Tags PLAYER: {PLAYER} +USERNAME: {PLAYER} IP: {IP} +ADDRESS: {ADDRESS} BALANCE: {BALANCE} MAILS: {MAILS} WORLD: {WORLD} @@ -39,3 +45,4 @@ WORLDTIME12: {WORLDTIME12} WORLDTIME24: {WORLDTIME24} WORLDDATE: {WORLDDATE} PLUGINS: {PLUGINS} +VERSION: {VERSION} \ No newline at end of file diff --git a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index b68b4e350..083fd66a5 100644 --- a/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -4,6 +4,9 @@ import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.OfflinePlayer; import com.earth2me.essentials.User; +import com.earth2me.essentials.textreader.IText; +import com.earth2me.essentials.textreader.KeywordReplacer; +import com.earth2me.essentials.textreader.SimpleTextPager; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Bukkit; @@ -73,7 +76,9 @@ public class EssentialsSpawnPlayerListener implements Listener if (ess.getSettings().getAnnounceNewPlayers()) { - ess.broadcastMessage(user, ess.getSettings().getAnnounceNewPlayerFormat(user)); + final IText output = new KeywordReplacer(ess.getSettings().getAnnounceNewPlayerFormat(), user, ess); + final SimpleTextPager pager = new SimpleTextPager(output); + ess.broadcastMessage(user, pager.getString(0)); } LOGGER.log(Level.FINE, "New player join"); diff --git a/lib/bpermissions2.jar b/lib/bpermissions2.jar new file mode 100644 index 000000000..b6d344b82 Binary files /dev/null and b/lib/bpermissions2.jar differ