From 1e07a1deb476014f00f3fe1dcb7ee12d4847ff1c Mon Sep 17 00:00:00 2001 From: KHobbits Date: Thu, 8 Dec 2011 04:44:18 +0000 Subject: First Refactor of Kits New sign: [Kit] / / [group] / [charge] --- Essentials/src/com/earth2me/essentials/Kit.java | 113 +++++++++++++++++ .../earth2me/essentials/commands/Commandkit.java | 141 ++++----------------- .../earth2me/essentials/commands/Commandwarp.java | 1 + .../src/com/earth2me/essentials/signs/SignKit.java | 73 +++++++++++ .../src/com/earth2me/essentials/signs/Signs.java | 1 + 5 files changed, 210 insertions(+), 119 deletions(-) create mode 100644 Essentials/src/com/earth2me/essentials/Kit.java create mode 100644 Essentials/src/com/earth2me/essentials/signs/SignKit.java diff --git a/Essentials/src/com/earth2me/essentials/Kit.java b/Essentials/src/com/earth2me/essentials/Kit.java new file mode 100644 index 000000000..53d2e8784 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/Kit.java @@ -0,0 +1,113 @@ +package com.earth2me.essentials; + +import static com.earth2me.essentials.I18n._; +import com.earth2me.essentials.commands.NoChargeException; +import com.earth2me.essentials.craftbukkit.InventoryWorkaround; +import java.util.*; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + + +public class Kit +{ + //TODO: Convert this to use one of the new text classes? + public static String listKits(final IEssentials ess, final User user) throws Exception + { + try + { + final Map kits = ess.getSettings().getKits(); + final StringBuilder list = new StringBuilder(); + for (String kiteItem : kits.keySet()) + { + if (user.isAuthorized("essentials.kit." + kiteItem.toLowerCase(Locale.ENGLISH))) + { + list.append(" ").append(kiteItem); + } + } + return list.toString(); + } + catch (Exception ex) + { + throw new Exception(_("kitError")); + } + + } + + public static void checkTime(final User user, final String kitName, final Map els) throws NoChargeException + { + final double delay = els.containsKey("delay") ? ((Number)els.get("delay")).doubleValue() : 0L; + final Calendar c = new GregorianCalendar(); + c.add(Calendar.SECOND, -(int)delay); + c.add(Calendar.MILLISECOND, -(int)((delay * 1000.0) % 1000.0)); + + final long mintime = c.getTimeInMillis(); + + final Long lastTime = user.getKitTimestamp(kitName); + if (lastTime == null || lastTime < mintime) + { + final Calendar now = new GregorianCalendar(); + user.setKitTimestamp(kitName, now.getTimeInMillis()); + } + else + { + final Calendar future = new GregorianCalendar(); + future.setTimeInMillis(lastTime); + future.add(Calendar.SECOND, (int)delay); + future.add(Calendar.MILLISECOND, (int)((delay * 1000.0) % 1000.0)); + user.sendMessage(_("kitTimed", Util.formatDateDiff(future.getTimeInMillis()))); + throw new NoChargeException(); + } + } + + public static List getItems(final User user, final Map els) throws Exception + { + try + { + return (List)els.get("items"); + } + catch (Exception e) + { + user.sendMessage(_("kitError2")); + throw new Exception(_("kitErrorHelp")); + } + } + + public static void expandItems(final IEssentials ess, final User user, final List items) throws Exception + { + try + { + boolean spew = false; + for (String d : items) + { + final String[] parts = d.split("[^0-9]+", 3); + final int id = Material.getMaterial(Integer.parseInt(parts[0])).getId(); + final int amount = parts.length > 1 ? Integer.parseInt(parts[parts.length > 2 ? 2 : 1]) : 1; + final short data = parts.length > 2 ? Short.parseShort(parts[1]) : 0; + final Map overfilled; + if (user.isAuthorized("essentials.oversizedstacks")) + { + overfilled = InventoryWorkaround.addItem(user.getInventory(), true, ess.getSettings().getOversizedStackSize(), new ItemStack(id, amount, data)); + } + else + { + overfilled = InventoryWorkaround.addItem(user.getInventory(), true, new ItemStack(id, amount, data)); + } + for (ItemStack itemStack : overfilled.values()) + { + user.getWorld().dropItemNaturally(user.getLocation(), itemStack); + spew = true; + } + } + user.updateInventory(); + if (spew) + { + user.sendMessage(_("kitInvFull")); + } + } + catch (Exception e) + { + user.updateInventory(); + throw new Exception(_("kitError2")); + } + } +} diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java index 8392d4759..c003d28ac 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandkit.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandkit.java @@ -1,14 +1,9 @@ package com.earth2me.essentials.commands; -import com.earth2me.essentials.craftbukkit.InventoryWorkaround; +import com.earth2me.essentials.*; import static com.earth2me.essentials.I18n._; -import com.earth2me.essentials.Trade; -import com.earth2me.essentials.User; -import com.earth2me.essentials.Util; import java.util.*; -import org.bukkit.Material; import org.bukkit.Server; -import org.bukkit.inventory.ItemStack; public class Commandkit extends EssentialsCommand @@ -23,131 +18,39 @@ public class Commandkit extends EssentialsCommand { if (args.length < 1) { - try + final String kitList = Kit.listKits(ess, user); + if (kitList.length() > 0) { - final Map kits = ess.getSettings().getKits(); - final StringBuilder list = new StringBuilder(); - for (String kiteItem : kits.keySet()) - { - if (user.isAuthorized("essentials.kit." + kiteItem.toLowerCase(Locale.ENGLISH))) - { - list.append(" ").append(kiteItem); - } - } - if (list.length() > 0) - { - user.sendMessage(_("kits", list.toString())); - } - else - { - user.sendMessage(_("noKits")); - } + user.sendMessage(_("kits", kitList)); } - catch (Exception ex) + else { - user.sendMessage(_("kitError")); + user.sendMessage(_("noKits")); } + throw new NoChargeException(); } else { - try - { - final String kitName = args[0].toLowerCase(Locale.ENGLISH); - final Object kit = ess.getSettings().getKit(kitName); - List items; - - if (!user.isAuthorized("essentials.kit." + kitName)) - { - user.sendMessage(_("noKitPermission", "essentials.kit." + kitName)); - return; - } + final String kitName = args[0].toLowerCase(Locale.ENGLISH); + final Object kit = ess.getSettings().getKit(kitName); - try - { - - //System.out.println("Kit is timed"); - final Map els = (Map)kit; - items = (List)els.get("items"); - final double delay = els.containsKey("delay") ? ((Number)els.get("delay")).doubleValue() : 0L; - final Calendar c = new GregorianCalendar(); - c.add(Calendar.SECOND, -(int)delay); - c.add(Calendar.MILLISECOND, -(int)((delay * 1000.0) % 1000.0)); + if (!user.isAuthorized("essentials.kit." + kitName)) + { + throw new Exception(_("noKitPermission", "essentials.kit." + kitName)); + } + final Map els = (Map)kit; + final List items = Kit.getItems(user, els); - final long mintime = c.getTimeInMillis(); + Kit.checkTime(user, kitName, els); - final Long lastTime = user.getKitTimestamp(kitName); - if (lastTime == null || lastTime < mintime) - { - final Calendar now = new GregorianCalendar(); - user.setKitTimestamp(kitName, now.getTimeInMillis()); - } - else - { - final Calendar future = new GregorianCalendar(); - future.setTimeInMillis(lastTime); - future.add(Calendar.SECOND, (int)delay); - future.add(Calendar.MILLISECOND, (int)((delay * 1000.0) % 1000.0)); - user.sendMessage(_("kitTimed", Util.formatDateDiff(future.getTimeInMillis()))); - return; - } - } - catch (Exception ex) - { - items = (List)kit; - } + final Trade charge = new Trade("kit-" + kitName, ess); + charge.isAffordableFor(user); - final Trade charge = new Trade("kit-" + kitName, ess); - try - { - charge.isAffordableFor(user); - } - catch (Exception ex) - { - user.sendMessage(ex.getMessage()); - return; - } + Kit.expandItems(ess, user, items); + + charge.charge(user); + user.sendMessage(_("kitGive", kitName)); - boolean spew = false; - for (String d : items) - { - final String[] parts = d.split("[^0-9]+", 3); - final int id = Material.getMaterial(Integer.parseInt(parts[0])).getId(); - final int amount = parts.length > 1 ? Integer.parseInt(parts[parts.length > 2 ? 2 : 1]) : 1; - final short data = parts.length > 2 ? Short.parseShort(parts[1]) : 0; - final Map overfilled; - if (user.isAuthorized("essentials.oversizedstacks")) - { - overfilled = InventoryWorkaround.addItem(user.getInventory(), true, ess.getSettings().getOversizedStackSize(), new ItemStack(id, amount, data)); - } - else - { - overfilled = InventoryWorkaround.addItem(user.getInventory(), true, new ItemStack(id, amount, data)); - } - for (ItemStack itemStack : overfilled.values()) - { - user.getWorld().dropItemNaturally(user.getLocation(), itemStack); - spew = true; - } - } - if (spew) - { - user.sendMessage(_("kitInvFull")); - } - try - { - charge.charge(user); - } - catch (Exception ex) - { - user.sendMessage(ex.getMessage()); - } - user.sendMessage(_("kitGive", kitName)); - } - catch (Exception ex) - { - user.sendMessage(_("kitError2")); - user.sendMessage(_("kitErrorHelp")); - } } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java index 8fe84ba16..51b64563b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandwarp.java @@ -70,6 +70,7 @@ public class Commandwarp extends EssentialsCommand } + //TODO: Use one of the new text classes, like /help ? private void warpList(final CommandSender sender, final String[] args) throws Exception { final Warps warps = ess.getWarps(); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignKit.java b/Essentials/src/com/earth2me/essentials/signs/SignKit.java new file mode 100644 index 000000000..32a169592 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/signs/SignKit.java @@ -0,0 +1,73 @@ +package com.earth2me.essentials.signs; + +import com.earth2me.essentials.*; +import java.util.List; +import java.util.Locale; +import java.util.Map; + + +public class SignKit extends EssentialsSign +{ + public SignKit() + { + super("Kit"); + } + + @Override + protected boolean onSignCreate(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException + { + validateTrade(sign, 3, ess); + + final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH); + + if (kitName.isEmpty()) + { + sign.setLine(1, "§dKit name!"); + return false; + } + else + { + try + { + ess.getSettings().getKit(kitName); + } + catch (Exception ex) + { + throw new SignException(ex.getMessage(), ex); + } + final String group = sign.getLine(2); + if ("Everyone".equalsIgnoreCase(group) || "Everybody".equalsIgnoreCase(group)) + { + sign.setLine(2, "§2Everyone"); + } + return true; + } + } + + @Override + protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException + { + final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH); + final String group = sign.getLine(2); + if ((!group.isEmpty() && ("§2Everyone".equals(group) || player.inGroup(group))) + || (group.isEmpty() && (player.isAuthorized("essentials.kit." + kitName)))) + { + final Trade charge = getTrade(sign, 3, ess); + charge.isAffordableFor(player); + try + { + final Object kit = ess.getSettings().getKit(kitName); + final Map els = (Map)kit; + final List items = Kit.getItems(player, els); + Kit.expandItems(ess, player, items); + charge.charge(player); + } + catch (Exception ex) + { + throw new SignException(ex.getMessage(), ex); + } + return true; + } + return false; + } +} diff --git a/Essentials/src/com/earth2me/essentials/signs/Signs.java b/Essentials/src/com/earth2me/essentials/signs/Signs.java index 83a0ee828..e29d45ad4 100644 --- a/Essentials/src/com/earth2me/essentials/signs/Signs.java +++ b/Essentials/src/com/earth2me/essentials/signs/Signs.java @@ -10,6 +10,7 @@ public enum Signs FREE(new SignFree()), GAMEMODE(new SignGameMode()), HEAL(new SignHeal()), + KIT(new SignKit()), MAIL(new SignMail()), PROTECTION(new SignProtection()), SELL(new SignSell()), -- cgit v1.2.3