diff --git a/pom.xml b/pom.xml index dd973b70..ff9436cc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.massivecraft Factions - 1.6.9.5-U0.2.1-1.1-BETA + 1.6.9.5-U0.2.1-1.2-STABLE jar SavageFactionsPlus diff --git a/src/main/java/com/massivecraft/factions/SavageFactions.java b/src/main/java/com/massivecraft/factions/SavageFactions.java index ff5d9652..3d521be8 100644 --- a/src/main/java/com/massivecraft/factions/SavageFactions.java +++ b/src/main/java/com/massivecraft/factions/SavageFactions.java @@ -21,6 +21,8 @@ import com.massivecraft.factions.zcore.fperms.Permissable; import com.massivecraft.factions.zcore.fperms.PermissableAction; import com.massivecraft.factions.zcore.fupgrades.*; import com.massivecraft.factions.zcore.util.TextUtil; +import me.driftay.addons.bankxp.Deposit; +import me.driftay.addons.bankxp.Withdraw; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; import org.bukkit.*; @@ -82,6 +84,7 @@ public class SavageFactions extends MPlugin { private ClipPlaceholderAPIManager clipPlaceholderAPIManager; private boolean mvdwPlaceholderAPIManager = false; private Listener[] eventsListener; + public static Economy econ = null; public SavageFactions() { plugin = this; @@ -239,7 +242,7 @@ public class SavageFactions extends MPlugin { new EXPUpgrade(), new CropUpgrades(), new RedstoneUpgrade(), - new SpawnerUpgrades(), + new SpawnerUpgrades() }; for (Listener eventListener : eventsListener) @@ -249,6 +252,15 @@ public class SavageFactions extends MPlugin { getCommand(this.refCommand).setExecutor(this); getCommand(this.refCommand).setTabCompleter(this); + if(getConfig().getBoolean("XP-BankNote-Enabled")) { + getCommand("withdraw").setExecutor(new Withdraw()); + getCommand("bottle").setExecutor(new Withdraw()); + getServer().getPluginManager().registerEvents(new Deposit(), this); + } + + RegisteredServiceProvider rsp = SavageFactions.this.getServer().getServicesManager().getRegistration(Economy.class); + SavageFactions.econ = rsp.getProvider(); + if (getDescription().getFullName().contains("BETA")) { divider(); System.out.println("You are using a BETA version of the plugin!"); diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSee.java b/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSee.java index c93f5917..00c90bf5 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSee.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSee.java @@ -14,11 +14,11 @@ public class CmdPaypalSee extends FCommand { permission = Permission.ADMIN.node; disableOnLock = false; - senderMustBePlayer = false; - senderMustBeMember = false; + senderMustBePlayer = true; + senderMustBeMember = true; senderMustBeModerator = false; senderMustBeColeader = false; - senderMustBeAdmin = false; + senderMustBeAdmin = true; } @Override diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSet.java b/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSet.java index b0efece7..71e8d1eb 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSet.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdPaypalSet.java @@ -9,10 +9,12 @@ public class CmdPaypalSet extends FCommand { public CmdPaypalSet() { this.aliases.add("setpaypal"); this.requiredArgs.add("email"); + this.permission = Permission.PAYPALSET.node; + this.disableOnLock = false; this.senderMustBePlayer = true; - this.senderMustBeMember = false; + this.senderMustBeMember = true; this.senderMustBeModerator = false; this.senderMustBeColeader = false; this.senderMustBeAdmin = true; diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdStrike.java b/src/main/java/com/massivecraft/factions/cmd/CmdStrike.java index b68ff79b..a512f13b 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdStrike.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdStrike.java @@ -1,12 +1,11 @@ package com.massivecraft.factions.cmd; -import com.massivecraft.factions.Faction; -import com.massivecraft.factions.Factions; +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.zcore.util.TL; public class CmdStrike extends FCommand { - public CmdStrike() { super(); @@ -50,3 +49,4 @@ public class CmdStrike extends FCommand { } + diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdSetStrikes.java b/src/main/java/com/massivecraft/factions/cmd/CmdStrikeSet.java similarity index 97% rename from src/main/java/com/massivecraft/factions/cmd/CmdSetStrikes.java rename to src/main/java/com/massivecraft/factions/cmd/CmdStrikeSet.java index 3bf37f4c..c2230d0b 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdSetStrikes.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdStrikeSet.java @@ -7,10 +7,10 @@ import com.massivecraft.factions.Factions; import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.zcore.util.TL; -public class CmdSetStrikes extends FCommand { +public class CmdStrikeSet extends FCommand { - public CmdSetStrikes() { + public CmdStrikeSet() { super(); this.aliases.add("setstrikes"); this.aliases.add("setstrike"); diff --git a/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java b/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java index 78aaca13..fc910ce6 100644 --- a/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java +++ b/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java @@ -106,7 +106,7 @@ public class FCmdRoot extends FCommand { public CmdChest cmdChest = new CmdChest(); public CmdSetBanner cmdSetBanner = new CmdSetBanner(); public CmdStrike cmdStrike = new CmdStrike(); - public CmdSetStrikes cmdSetStrikes = new CmdSetStrikes(); + public CmdStrikeSet cmdStrikeSet = new CmdStrikeSet(); public CmdAlts cmdAlts = new CmdAlts(); @@ -146,7 +146,6 @@ public class FCmdRoot extends FCommand { this.addSubCommand(this.cmdDescription); this.addSubCommand(this.cmdDisband); this.addSubCommand(this.cmdStrike); - this.addSubCommand(this.cmdSetStrikes); this.addSubCommand(this.cmdHelp); this.addSubCommand(this.cmdHome); this.addSubCommand(this.cmdInvite); @@ -222,6 +221,7 @@ public class FCmdRoot extends FCommand { this.addSubCommand(this.cmdTntFill); this.addSubCommand(this.cmdChest); this.addSubCommand(this.cmdSetBanner); + this.addSubCommand(this.cmdStrikeSet); if(SavageFactions.plugin.getConfig().getBoolean("f-alts.Enabled")){ @@ -246,7 +246,7 @@ public class FCmdRoot extends FCommand { if (SavageFactions.plugin.getConfig().getBoolean("enable-faction-flight", false)) { this.addSubCommand(this.cmdFly); } - if (Bukkit.getServer().getPluginManager().getPlugin("FactionsTop") != null) { + if (Bukkit.getServer().getPluginManager().getPlugin("FactionsTop") != null || Bukkit.getServer().getPluginManager().getPlugin("SavageFTOP") != null) { SavageFactions.plugin.log(Level.INFO, "Found FactionsTop plugin. Disabling our own /f top command."); } else { SavageFactions.plugin.log(Level.INFO, "Enabling FactionsTop command, this is a very basic /f top please get a dedicated /f top resource if you want land calculation etc."); diff --git a/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradeType.java b/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradeType.java index e5367882..962ccd53 100644 --- a/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradeType.java +++ b/src/main/java/com/massivecraft/factions/zcore/fupgrades/UpgradeType.java @@ -4,7 +4,6 @@ public enum UpgradeType { CHEST("Chest"), SPAWNER("Spawner"), EXP("Exp"), CROP("Crop"), POWER("Power"), REDSTONE("Redstone"); - private String id; UpgradeType(String id) { diff --git a/src/main/java/com/massivecraft/factions/zcore/util/TL.java b/src/main/java/com/massivecraft/factions/zcore/util/TL.java index 16ed0dfc..24e2a13f 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/TL.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/TL.java @@ -134,6 +134,7 @@ public enum TL { COMMAND_ANNOUNCE_DESCRIPTION("Announce a message to players in faction."), COMMAND_ALTS_DESCRIPTION("Faction Alts Commands"), + COMMAND_STRIKE_DESCRIPTION("Faction Strike Commands"), COMMAND_ALTS_LIST_DESCRIPTION("List all alts in your faction"), @@ -366,6 +367,11 @@ public enum TL { COMMAND_INVITE_DESCRIPTION("Invite a player to your faction"), COMMAND_INVITE_BANNED("&c&l[!]&7 &7%1$s &cis banned &7from your Faction. &cNot &7sending an invite."), + BANKNOTE_WITHDRAW_NOT_ENOUGH("&c&l[!] &7You do not have enough money!"), + BANKNOTE_WITHDRAW_NO_ARGS("&c&l[!] &7Try /withdraw "), + XPBOTTLE_NOT_ENOUGH("&c&l[!] &7You do not have enough experience!"), + XPBOTTLE_WITHDRAW_NO_ARGS("&c&l[!] &7Try /bottle "), + COMMAND_JOIN_CANNOTFORCE("&c&l[!]&7 You&c do not&7 have permission to &cmove other players&7 into a faction."), COMMAND_JOIN_SYSTEMFACTION("&c&l[!]&7 Players may only join &cnormal factions&7. This is a &c&lsystem faction&7."), COMMAND_JOIN_ALREADYMEMBER("&c&l[!]&7 &c%1$s %2$s already a member of&c %3$s"), @@ -617,6 +623,7 @@ public enum TL { COMMAND_SETHOME_SET("&c&l[!]&c %1$s&7 set the home for your faction. You can now use:"), COMMAND_SETHOME_SETOTHER("&c&l[!]&7 You have set the home for the &c%1$s&7 faction."), COMMAND_SETHOME_DESCRIPTION("Set the faction home"), + COMMAND_STRIKE_FACTION("View Factions Strikes"), COMMAND_SETMAXVAULTS_DESCRIPTION("Set max vaults for a Faction."), COMMAND_SETMAXVAULTS_SUCCESS("&aSet max vaults for &e%s &ato &b%d"), @@ -624,12 +631,14 @@ public enum TL { COMMAND_SETSTRIKES_FAILURE("&c&l[!]&7 &c{faction} does not exist."), COMMAND_SETSTRIKES_BROADCAST("&c&l[!]&7 &c{faction} has received a strike for {reason}"), COMMAND_SETSTRIKES_SUCCESS("&c&l[!]&7 &c{faction}'s&7 new strikes are &c{strikes}"), - COMMAND_SETSTRIKES_DESCRIPTION("Set a faction's points"), + COMMAND_SETSTRIKES_DESCRIPTION("Set a faction's strikes"), + COMMAND_STRIKEREMOVE_DESCRIPTION("Remove a faction's strikes"), COMMAND_STRIKE_MESSAGE("&c&l[!] &7{faction} has {strikes} strikes."), COMMAND_STRIKE_NOTFOUND("&c&l[!] &7{faction} does not exist."), COMMAND_STRIKE_NEEDFACTION("&c&l[!] &7&cYou need to join a faction to view your own!"), - COMMAND_STRIKE_DESCRIPTION("Give a faction strikes."), + + COMMAND_STRIKEGIVE_DESCRIPTION("Give a faction strikes"), COMMAND_VAULT_DESCRIPTION("Open your placed faction vault!"), COMMAND_VAULT_INVALID("&c&l[!]&7 Your vault was either&c claimed&7, &cbroken&7, or has&c not been&7 placed yet."), diff --git a/src/main/java/me/driftay/addons/Utils.java b/src/main/java/me/driftay/addons/Utils.java new file mode 100644 index 00000000..933b1466 --- /dev/null +++ b/src/main/java/me/driftay/addons/Utils.java @@ -0,0 +1,4 @@ +package me.driftay.addons; + +public class Utils { +} diff --git a/src/main/java/me/driftay/addons/bankxp/Deposit.java b/src/main/java/me/driftay/addons/bankxp/Deposit.java new file mode 100644 index 00000000..a8e3f338 --- /dev/null +++ b/src/main/java/me/driftay/addons/bankxp/Deposit.java @@ -0,0 +1,103 @@ +package me.driftay.addons.bankxp; + +import com.massivecraft.factions.SavageFactions; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Scanner; + +public class Deposit implements Listener { + + @EventHandler + public void DepositEvent(PlayerInteractEvent e) { + Player p = e.getPlayer(); + Action a = e.getAction(); + ItemStack mainhand = p.getInventory().getItemInHand(); + if (mainhand != null && (a.equals(Action.RIGHT_CLICK_AIR) || a.equals(Action.RIGHT_CLICK_BLOCK)) && mainhand.hasItemMeta() && mainhand.getItemMeta().hasLore()) { + try { + Material item = Material.getMaterial(SavageFactions.plugin.getConfig().getString("Banknote.Item.ID")); + if (mainhand.getType() == item) { + this.takeBanknote(e, mainhand); + return; + } + } catch (Exception e3) { + try { + Material item2 = Material.getMaterial(String.valueOf(SavageFactions.plugin.getConfig().getInt("Banknote.Item.ID"))); + if (mainhand.getType() == item2) { + this.takeBanknote(e, mainhand); + return; + } + } catch (Exception e2) { + e2.printStackTrace(); + } + } + try { + Material item = Material.getMaterial(SavageFactions.plugin.getConfig().getString("XpBottle.Item.ID")); + if (mainhand.getType() == item) { + this.takeXpBottle(e, mainhand); + } + } catch (Exception e3) { + try { + Material item2 = Material.getMaterial(String.valueOf(SavageFactions.plugin.getConfig().getInt("XpBottle.Item.ID"))); + if (mainhand.getType() == item2) { + this.takeXpBottle(e, mainhand); + } + } catch (Exception e2) { + e.getPlayer().sendMessage("&c&l[!] &7Unknown Command!"); + e2.printStackTrace(); + } + } + } + } + + public void takeXpBottle(PlayerInteractEvent e, ItemStack mainhand) { + Player p = e.getPlayer(); + ItemMeta meta = mainhand.getItemMeta(); + for (String lore : meta.getLore()) { + String newlore = ChatColor.stripColor(lore.replace(",", "")); + if (newlore.startsWith(ChatColor.stripColor(SavageFactions.plugin.getConfig().getString("XpBottle.Item.Checks-for")))) { + try { + Scanner in = new Scanner(newlore).useDelimiter("[^0-9]+"); + int value = in.nextInt() * mainhand.getAmount(); + ExperienceFIX.setTotalExperience(p, ExperienceFIX.getTotalExperience(p) + value); + p.sendMessage(color(SavageFactions.plugin.getConfig().getString("Messages.xpbottle.deposit")).replace("{exp}", String.valueOf(value)).replace("{exp-balance}", String.valueOf(p.getTotalExperience()))); + e.setCancelled(true); + p.getInventory().removeItem(mainhand); + } catch (Exception x) { + } + } + } + } + + public void takeBanknote(PlayerInteractEvent e, ItemStack mainhand) { + Player p = e.getPlayer(); + ItemMeta meta = mainhand.getItemMeta(); + for (String lore : meta.getLore()) { + String newlore = ChatColor.stripColor(lore.replace(",", "")); + if (newlore.startsWith(ChatColor.stripColor(SavageFactions.plugin.getConfig().getString("Banknote.Item.Checks-for")))) { + try { + Scanner in = new Scanner(newlore).useDelimiter("[^0-9]+"); + long value = in.nextLong() * mainhand.getAmount(); + SavageFactions.econ.depositPlayer( p, (double) value); + p.sendMessage(color(SavageFactions.plugin.getConfig().getString("Messages.banknote.deposit")).replace("{money}", SavageFactions.econ.format((double) value)).replace("{balance}", SavageFactions.econ.format(SavageFactions.econ.getBalance(p)))); + e.setCancelled(true); + p.getInventory().remove(mainhand); + } catch (Exception x) { + } + } + } + } + + public String color(String message){ + message = ChatColor.translateAlternateColorCodes('&', message); + return message; + } +} + diff --git a/src/main/java/me/driftay/addons/bankxp/ExperienceFIX.java b/src/main/java/me/driftay/addons/bankxp/ExperienceFIX.java new file mode 100644 index 00000000..12452b05 --- /dev/null +++ b/src/main/java/me/driftay/addons/bankxp/ExperienceFIX.java @@ -0,0 +1,70 @@ +package me.driftay.addons.bankxp; + +import org.bukkit.entity.Player; + +public class ExperienceFIX { + public static void setTotalExperience(Player player, int exp) { + if (exp < 0) { + throw new IllegalArgumentException("Experience is negative!"); + } + player.setExp(0.0f); + player.setLevel(0); + player.setTotalExperience(0); + int amount = exp; + while (amount > 0) { + int expToLevel = getExpAtLevel(player); + amount -= expToLevel; + if (amount >= 0) { + player.giveExp(expToLevel); + } else { + amount += expToLevel; + player.giveExp(amount); + amount = 0; + } + } + } + + private static int getExpAtLevel(Player player) { + return getExpAtLevel(player.getLevel()); + } + + public static int getExpAtLevel(int level) { + if (level <= 15) { + return 2 * level + 7; + } + if (level >= 16 && level <= 30) { + return 5 * level - 38; + } + return 9 * level - 158; + } + + public static int getExpToLevel(int level) { + int currentLevel = 0; + int exp = 0; + while (currentLevel < level) { + exp += getExpAtLevel(currentLevel); + ++currentLevel; + } + if (exp < 0) { + exp = Integer.MAX_VALUE; + } + return exp; + } + + public static int getTotalExperience(Player player) { + int exp = Math.round(getExpAtLevel(player) * player.getExp()); + for (int currentLevel = player.getLevel(); currentLevel > 0; --currentLevel, exp += getExpAtLevel(currentLevel)) { + } + if (exp < 0) { + exp = Integer.MAX_VALUE; + } + return exp; + } + + public static int getExpUntilNextLevel(Player player) { + int exp = Math.round(getExpAtLevel(player) * player.getExp()); + int nextLevel = player.getLevel(); + return getExpAtLevel(nextLevel) - exp; + } +} + diff --git a/src/main/java/me/driftay/addons/bankxp/Withdraw.java b/src/main/java/me/driftay/addons/bankxp/Withdraw.java new file mode 100644 index 00000000..ab624992 --- /dev/null +++ b/src/main/java/me/driftay/addons/bankxp/Withdraw.java @@ -0,0 +1,162 @@ +package me.driftay.addons.bankxp; + +import com.massivecraft.factions.SavageFactions; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class Withdraw implements CommandExecutor { + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (cmd.getName().equalsIgnoreCase("withdraw")) { + if (sender.hasPermission("factions.withdraw.money")) { + Player p; + if ((p = Bukkit.getPlayer(sender.getName())) != null) { + if (args.length == 1) { + long max = SavageFactions.plugin.getConfig().getLong("Banknote.Range.MAX"); + long min = SavageFactions.plugin.getConfig().getLong("Banknote.Range.MIN"); + List lore = SavageFactions.plugin.getConfig().getStringList("Banknote.Item.Display.lore"); + String name = SavageFactions.plugin.getConfig().getString("Banknote.Item.Display.name"); + boolean glow = SavageFactions.plugin.getConfig().getBoolean("Banknote.Item.Display.glow"); + try { + long value = Long.parseLong(args[0]); + if (value >= min && max >= value) { + if (value <= SavageFactions.econ.getBalance(p)) { + try { + ItemStack item = new ItemStack(Material.getMaterial(SavageFactions.plugin.getConfig().getString("Banknote.Item.ID"))); + item.setDurability((short) SavageFactions.plugin.getConfig().getInt("Banknote.Item.DamageValue")); + p.getInventory().addItem(this.Item(p.getName(), p, item, name, lore, value, (int) value, glow)); + SavageFactions.econ.withdrawPlayer(p, (double) value); + this.banknotemsg(p, value); + } catch (Exception e) { + try { + ItemStack item2 = new ItemStack(Material.getMaterial(String.valueOf(SavageFactions.plugin.getConfig().getInt("Banknote.Item.ID")))); + item2.setDurability((short) SavageFactions.plugin.getConfig().getInt("Banknote.Item.DamageValue")); + p.getInventory().addItem(this.Item(p.getName(), p, item2, name, lore, value, (int) value, glow)); + SavageFactions.econ.withdrawPlayer(p, (double) value); + this.banknotemsg(p, value); + } catch (Exception x2) { + sender.sendMessage("&c&l[!] &7Unknown Command!"); + e.printStackTrace(); + } + } + } else { + p.sendMessage(TL.BANKNOTE_WITHDRAW_NOT_ENOUGH.toString()); + } + } else { + sender.sendMessage(color("&c&l[!] &b" + args[0] + " &7is not in range of " + min + " - " + max)); + //sender.sendMessage(color(SavageFactions.plugin.getConfig().getString("Messages.Not-In-Range")).replace("{min}", String.valueOf(min)).replace("{max}", String.valueOf(max)).replace("{arg}", args[0])); + } + } catch (Exception e2) { + sender.sendMessage(color("&c&l[!] &b" + args[0] + " &7is not a number!")); + } + } else { + sender.sendMessage(TL.BANKNOTE_WITHDRAW_NO_ARGS.toString()); + } + } else { + sender.sendMessage(color("&4Umm... Your not a player, you don't have an inventory to give this too")); + } + return true; + } + sender.sendMessage(TL.GENERIC_NOPERMISSION.toString()); + } + if (cmd.getName().equalsIgnoreCase("bottle")) { + if (sender.hasPermission("factions.withdraw.exp")) { + Player p; + if ((p = Bukkit.getPlayer(sender.getName())) != null) { + if (args.length == 1) { + int max2 = SavageFactions.plugin.getConfig().getInt("XpBottle.Range.MAX"); + int min2 = SavageFactions.plugin.getConfig().getInt("XpBottle.Range.MIN"); + List lore2 = SavageFactions.plugin.getConfig().getStringList("XpBottle.Item.Display.lore"); + String name2 = SavageFactions.plugin.getConfig().getString("XpBottle.Item.Display.name"); + boolean glow2 = SavageFactions.plugin.getConfig().getBoolean("XpBottle.Item.Display.glow"); + try { + int value2 = Integer.parseInt(args[0]); + if (value2 >= min2 && max2 >= value2) { + if (value2 <= ExperienceFIX.getTotalExperience(p)) { + try { + ItemStack item3 = new ItemStack(Material.getMaterial(SavageFactions.plugin.getConfig().getString("XpBottle.Item.ID"))); + item3.setDurability((short) SavageFactions.plugin.getConfig().getInt("XpBottle.Item.DamageValue")); + p.getInventory().addItem(this.Item(p.getName(), p, item3, name2, lore2, value2, value2, glow2)); + ExperienceFIX.setTotalExperience(p, ExperienceFIX.getTotalExperience(p) - value2); + this.xpbottlemsg(p, value2); + } catch (Exception e3) { + try { + ItemStack item4 = new ItemStack(Material.getMaterial(String.valueOf(SavageFactions.plugin.getConfig().getInt("XpBottle.Item.ID")))); + item4.setDurability((short) SavageFactions.plugin.getConfig().getInt("XpBottle.Item.DamageValue")); + p.getInventory().addItem(this.Item(p.getName(), p, item4, name2, lore2, value2, value2, glow2)); + ExperienceFIX.setTotalExperience(p, value2); + this.xpbottlemsg(p, value2); + } catch (Exception x) { + sender.sendMessage("&c&l[!] &7Unknown Command!"); + x.printStackTrace(); + } + } + } else { + p.sendMessage(TL.XPBOTTLE_NOT_ENOUGH.toString()); + } + } else { + sender.sendMessage(color("&c&l[!] &b" + args[0] + " &7is not in range of " + min2 + " - " + max2)); + //sender.sendMessage(color(SavageFactions.plugin.getConfig().getString("Messages.Not-In-Range")).replace("{min}", String.valueOf(min2)).replace("{max}", String.valueOf(max2)).replace("{arg}", args[0])); + } + } catch (Exception e4) { + sender.sendMessage(color("&c&l[!] &b" + args[0] + " &7is not a number!")); + } + } else { + sender.sendMessage(TL.XPBOTTLE_WITHDRAW_NO_ARGS.toString()); + } + } else { + sender.sendMessage(color("&4Umm... Your not a player, you don't have an inventory to give this too")); + } + } else { + sender.sendMessage(TL.GENERIC_NOPERMISSION.toString()); + } + return true; + } + return true; + } + + private void banknotemsg(Player p, long l) { + p.sendMessage(color(SavageFactions.plugin.getConfig().getString("Messages.banknote.withdraw")).replace("{money}", SavageFactions.econ.format((double) l)).replace("{balance}", SavageFactions.econ.format(SavageFactions.econ.getBalance(p))).replace("{player}", p.getName()).replace("{displayname}", p.getDisplayName())); + } + + private void xpbottlemsg(Player p, int i) { + p.sendMessage(color(SavageFactions.plugin.getConfig().getString("Messages.xpbottle.withdraw")).replace("{exp}", String.valueOf(i)).replace("{exp-balance}", String.valueOf(p.getTotalExperience())).replace("{player}", p.getName()).replace("{displayname}", p.getDisplayName())); + } + + public String color(String message) { + message = ChatColor.translateAlternateColorCodes('&', message); + return message; + } + + ItemStack Item(String getPlayer, Player p, ItemStack Item, String name, List lore, long l, int i, boolean b) { + ItemMeta meta = Item.getItemMeta(); + meta.setDisplayName(color(name.replace("{player}", getPlayer).replace("{money}", SavageFactions.econ.format((double) l)).replace("{exp}", String.valueOf(i)).replace("{balance}", SavageFactions.econ.format(SavageFactions.econ.getBalance(p))))); + List list = new ArrayList(); + for (String s : lore) { + String old = color(s.replace("{player}", getPlayer).replace("{money}", SavageFactions.econ.format((double) l)).replace("{exp}", String.valueOf(i)).replace("{balance}", SavageFactions.econ.format(SavageFactions.econ.getBalance(p)))); + list.add(old); + } + lore.addAll(list); + meta.setLore(list); + if (b) { + meta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 0, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + } + Item.setItemMeta(meta); + return Item; + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 283f011f..9ffc4805 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -703,6 +703,51 @@ fwarp-gui: - + +############################################################ +# +------------------------------------------------------+ # +# | BankNote/XPBottles | # +# +------------------------------------------------------+ # +############################################################ +XP-BankNote-Enabled: true +Banknote: + Item: + Display: + glow: true + name: '&aBanknote' + lore: + - '&eValue: &6{money}' + - '&eOwner: &6{player}' + - '&fThis is just a peace of paper' + ID: PAPER + DamageValue: 0 + Checks-for: 'Value: ' + Range: + MIN: 1000 + MAX: 9999999999 +XpBottle: + Item: + Display: + glow: true + name: '&eXpBottle' + lore: + - '&eValue: &6{exp} EXP' + - '&eOwner: &6{player}' + - '&fThis is just a XpBottle' + ID: EXP_BOTTLE + DamageValue: 0 + Checks-for: 'Value: ' + Range: + MIN: 100 + MAX: 2147483647 +Messages: + banknote: + withdraw: '&bYou have withdrawn &d{money} &bfrom your balance, you now have &d{balance}' + deposit: '&bYou have deposited &d{money} &bto your balance, you now have &d{balance}' + xpbottle: + withdraw: '&bYou have withdrawn &d{exp} &bfrom your experience, you know have &d{exp-balance}' + deposit: '&bYou have deposited &d{exp} &bto your experience, you know have &d{exp-balance}' + ############################################################ # +------------------------------------------------------+ # # | Faction Creation/Disband Broadcast | # diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ceec1070..cdee15f1 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -9,6 +9,10 @@ commands: factions: description: Reference command for Factions. aliases: [f] + bottle: + description: withdraw experience. + withdraw: + description: withdraw money. permissions: factions.kit.admin: description: All faction permissions.