From 2b4c4c20b5eccab1a58f7ef3a99e09474d7aa14b Mon Sep 17 00:00:00 2001 From: GabrielAugustoTI Date: Sat, 5 Nov 2016 20:46:21 -0300 Subject: [PATCH] =?UTF-8?q?Fazendo=20upload=20do=20c=C3=B3digo=20para=20o?= =?UTF-8?q?=20GitHub!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 17 ++ .gitignore | 17 ++ src/com/satoshicraft/bottle/Main.java | 55 ++++++ src/com/satoshicraft/bottle/NumberCheck.java | 19 +++ src/com/satoshicraft/bottle/XpItem.java | 68 ++++++++ src/com/satoshicraft/bottle/XpLevel.java | 44 +++++ src/com/satoshicraft/bottle/YmlMaker.java | 94 ++++++++++ .../bottle/commands/XpBottle.java | 160 ++++++++++++++++++ .../bottle/listener/XpBottleThrow.java | 155 +++++++++++++++++ src/config.yml | 22 +++ src/plugin.yml | 10 ++ 11 files changed, 661 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 src/com/satoshicraft/bottle/Main.java create mode 100644 src/com/satoshicraft/bottle/NumberCheck.java create mode 100644 src/com/satoshicraft/bottle/XpItem.java create mode 100644 src/com/satoshicraft/bottle/XpLevel.java create mode 100644 src/com/satoshicraft/bottle/YmlMaker.java create mode 100644 src/com/satoshicraft/bottle/commands/XpBottle.java create mode 100644 src/com/satoshicraft/bottle/listener/XpBottleThrow.java create mode 100644 src/config.yml create mode 100644 src/plugin.yml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..bdb0cab --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00716b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +gradle/ +.gradle/ +gradlew* +.idea/ +.metadata/ +.settings/ +bin/ +build/ +.classpath +.project +RemoteSystemsTempFiles/.project +*.iml +*.eml +out/ +target/ +dependency-reduced-pom.xml + diff --git a/src/com/satoshicraft/bottle/Main.java b/src/com/satoshicraft/bottle/Main.java new file mode 100644 index 0000000..29bd2a4 --- /dev/null +++ b/src/com/satoshicraft/bottle/Main.java @@ -0,0 +1,55 @@ +package com.satoshicraft.bottle; + +import java.util.HashMap; + +import org.bukkit.event.Listener; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.satoshicraft.bottle.commands.XpBottle; +import com.satoshicraft.bottle.listener.XpBottleThrow; + +public class Main + extends JavaPlugin + implements Listener +{ + public HashMap xpitemlore; + public XpLevel xpl = new XpLevel(); + public XpItem xpBottle = new XpItem(this); + private YmlMaker cfg; + + public void onEnable() + { + this.cfg = new YmlMaker(this, "config.yml"); + this.cfg.saveDefaultConfig(); + onRegisterCommands(); + onRegisterEvents(); + this.xpitemlore = new HashMap(); + getServer().getPluginManager().registerEvents(this, this); + double dropPercentage = this.cfg.getConfig().getDouble("DropPercentage"); + if ((dropPercentage <= 0.0D) || (dropPercentage > 100.0D)) + { + this.cfg.getConfig().set("DropPercentage", Integer.valueOf(100)); + this.cfg.saveConfig(); + this.cfg.reloadConfig(); + } + } + + public void onRegisterCommands() + { + getCommand("satoshixp").setExecutor(new XpBottle(this)); + } + + public void onRegisterEvents() + { + PluginManager pm = getServer().getPluginManager(); + pm.registerEvents(new XpBottleThrow(this), this); + } + + public void onDisable() {} + + public YmlMaker getCfg() + { + return this.cfg; + } +} diff --git a/src/com/satoshicraft/bottle/NumberCheck.java b/src/com/satoshicraft/bottle/NumberCheck.java new file mode 100644 index 0000000..965d571 --- /dev/null +++ b/src/com/satoshicraft/bottle/NumberCheck.java @@ -0,0 +1,19 @@ +package com.satoshicraft.bottle; + +import org.bukkit.entity.Player; + +public class NumberCheck +{ + public static boolean isInt(String s, Player p) + { + try + { + Integer.parseInt(s); + } + catch (NumberFormatException nfe) + { + return false; + } + return true; + } +} diff --git a/src/com/satoshicraft/bottle/XpItem.java b/src/com/satoshicraft/bottle/XpItem.java new file mode 100644 index 0000000..37c9c61 --- /dev/null +++ b/src/com/satoshicraft/bottle/XpItem.java @@ -0,0 +1,68 @@ +package com.satoshicraft.bottle; + +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class XpItem +{ + @SuppressWarnings("unused") +private Main pl; + private ItemStack Xpb; + + public XpItem(Main plugin) + { + this.pl = plugin; + } + + public void setXpb(int takenXp, Player p) + { + this.Xpb = new ItemStack(Material.EXP_BOTTLE, 1); + ItemMeta xpbmeta = this.Xpb.getItemMeta(); + String BottleName = "&6&lFrasco de XP &7(%value% XP)"; + BottleName = BottleName.replaceAll("&", "§"); + BottleName = BottleName.replace("%value%", String.valueOf(takenXp)); + xpbmeta.setDisplayName(BottleName); + List lore = new ArrayList(); + String value = "&dValor&r %value% XP"; + value = value.replaceAll("&", "§"); + value = value.replace("%value%", String.valueOf(takenXp)); + lore.add(value); + String enchanter = "&dEngarrafado por&r %player%"; + enchanter = enchanter.replaceAll("&", "§"); + if (enchanter.contains("%player%")) { + enchanter = enchanter.replace("%player%", p.getName()); + } + lore.add(enchanter); + xpbmeta.setLore(lore); + this.Xpb.setItemMeta(xpbmeta); + } + + public void setXpbServer(int takenXp) + { + this.Xpb = new ItemStack(Material.EXP_BOTTLE, 1); + ItemMeta xpbmeta = this.Xpb.getItemMeta(); + String BottleName = "&6&lFrasco de XP &7(%value% XP)"; + BottleName = BottleName.replaceAll("&", "�"); + BottleName = BottleName.replace("%value%", String.valueOf(takenXp)); + xpbmeta.setDisplayName(BottleName); + List lore = new ArrayList(); + String value = "&dValor&r %value% XP"; + value = value.replaceAll("&", "�"); + value = value.replace("%value%", String.valueOf(takenXp)); + lore.add(value); + String enchanter = "&dEngarrafado por &rServer"; + enchanter = enchanter.replaceAll("&", "�"); + lore.add(enchanter); + xpbmeta.setLore(lore); + this.Xpb.setItemMeta(xpbmeta); + } + + public ItemStack getXpb() + { + return this.Xpb; + } +} diff --git a/src/com/satoshicraft/bottle/XpLevel.java b/src/com/satoshicraft/bottle/XpLevel.java new file mode 100644 index 0000000..0c963b6 --- /dev/null +++ b/src/com/satoshicraft/bottle/XpLevel.java @@ -0,0 +1,44 @@ +package com.satoshicraft.bottle; + +import org.bukkit.entity.Player; + +public class XpLevel +{ + private static double xplevel; + private static int xpe; + private static int result; + + public static void setXpLevel(int level, float cExp) + { + if (level > 30) + { + xplevel = 4.5D * level * level - 162.5D * level + 2220.0D; + xpe = 9 * level - 158; + xplevel += Math.round(cExp * xpe); + result = (int)xplevel; + return; + } + if (level > 15) + { + xplevel = 2.5D * level * level - 40.5D * level + 360.0D; + xpe = 5 * level - 38; + xplevel += Math.round(cExp * xpe); + result = (int)xplevel; + return; + } + if (level <= 15) + { + xplevel = level * level + 6 * level; + xpe = 2 * level + 7; + xplevel += Math.round(cExp * xpe); + result = (int)xplevel; + return; + } + } + + public static int getXp(Player p) + { + setXpLevel(p.getLevel(), p.getExp()); + return result; + } +} diff --git a/src/com/satoshicraft/bottle/YmlMaker.java b/src/com/satoshicraft/bottle/YmlMaker.java new file mode 100644 index 0000000..d119754 --- /dev/null +++ b/src/com/satoshicraft/bottle/YmlMaker.java @@ -0,0 +1,94 @@ +package com.satoshicraft.bottle; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.util.logging.Level; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +public class YmlMaker +{ + Main Plugin; + public String fileName; + private JavaPlugin plugin; + public File ConfigFile; + private FileConfiguration Configuration; + + public YmlMaker(Main Plugin) + { + this.Plugin = Plugin; + } + + public YmlMaker(JavaPlugin plugin, String fileName) + { + if (plugin == null) { + throw new IllegalArgumentException("plugin cannot be null"); + } + this.plugin = plugin; + this.fileName = fileName; + File dataFolder = plugin.getDataFolder(); + if (dataFolder == null) { + throw new IllegalStateException(); + } + this.ConfigFile = new File(dataFolder.toString() + File.separatorChar + this.fileName); + } + + public void reloadConfig() + { + try + { + this.Configuration = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(this.ConfigFile), "UTF-8")); + } + catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + } + catch (FileNotFoundException e) + { + e.printStackTrace(); + } + InputStream defConfigStream = this.plugin.getResource(this.fileName); + if (defConfigStream != null) + { + @SuppressWarnings("deprecation") + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); + this.Configuration.setDefaults(defConfig); + } + } + + public FileConfiguration getConfig() + { + if (this.Configuration == null) { + reloadConfig(); + } + return this.Configuration; + } + + public void saveConfig() + { + if ((this.Configuration == null) || (this.ConfigFile == null)) { + return; + } + try + { + getConfig().save(this.ConfigFile); + } + catch (IOException ex) + { + this.plugin.getLogger().log(Level.SEVERE, "Could not save config to " + this.ConfigFile, ex); + } + } + + public void saveDefaultConfig() + { + if (!this.ConfigFile.exists()) { + this.plugin.saveResource(this.fileName, false); + } + } +} diff --git a/src/com/satoshicraft/bottle/commands/XpBottle.java b/src/com/satoshicraft/bottle/commands/XpBottle.java new file mode 100644 index 0000000..879c6d5 --- /dev/null +++ b/src/com/satoshicraft/bottle/commands/XpBottle.java @@ -0,0 +1,160 @@ +package com.satoshicraft.bottle.commands; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import com.satoshicraft.bottle.Main; +import com.satoshicraft.bottle.NumberCheck; +import com.satoshicraft.bottle.XpLevel; + +public class XpBottle + implements CommandExecutor +{ + private Main pl; + String message; + List messagel; + + public XpBottle(Main plugin) + { + this.pl = plugin; + } + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if ((!(sender instanceof Player)) && + (args.length != 2)) + { + sender.sendMessage("�cTo give xp Bottle to player use /xpb "); + return true; + } + Player p = null; + if ((sender instanceof Player)) { + p = (Player)sender; + } + if (sender.hasPermission("satoshicraft.bottle")) + { + if ((args.length == 0) && + (p.hasPermission("satoshicraft.bottle"))) + { + this.messagel = this.pl.getCfg().getConfig().getStringList("Messages.Xpb"); + for (String s : this.messagel) + { + s = ChatColor.translateAlternateColorCodes('&', s); + p.sendMessage(s); + } + return true; + } + String xpargs0 = args[0].replaceAll("\\-", ""); + if (NumberCheck.isInt(xpargs0, p)) + { + int takenXp = Integer.parseInt(xpargs0); + if ((args.length == 1) && + (p.hasPermission("satoshicraft.bottle"))) + { + if (p.getInventory().firstEmpty() == -1) + { + this.message = this.pl.getCfg().getConfig().getString("Messages.FullInventory"); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + int MinXp = this.pl.getCfg().getConfig().getInt("MinXp"); + if (takenXp < MinXp) + { + this.message = this.pl.getCfg().getConfig().getString("Messages.MinXpMessage"); + this.message = this.message.replaceAll("%minxp%", String.valueOf(MinXp)); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + int MaxXp = this.pl.getCfg().getConfig().getInt("MaxXp"); + if (takenXp > MaxXp) + { + this.message = this.pl.getCfg().getConfig().getString("Messages.MaxXpMessage"); + this.message = this.message.replaceAll("%maxxp%", String.valueOf(MaxXp)); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + int xp = XpLevel.getXp(p); + if (xp >= takenXp) + { + xp -= takenXp; + this.pl.xpBottle.setXpb(takenXp, p); + p.setTotalExperience(0); + p.setLevel(0); + p.setExp(0.0F); + p.giveExp(xp); + ItemStack Xpb = this.pl.xpBottle.getXpb(); + p.getInventory().addItem(new ItemStack[] { Xpb }); + this.messagel = this.pl.getCfg().getConfig().getStringList("Messages.XpTransferred"); + for (String s : this.messagel) + { + s = ChatColor.translateAlternateColorCodes('&', s); + s = s.replaceAll("%takenxp%", String.valueOf(takenXp)); + p.sendMessage(s); + } + return true; + } + this.message = this.pl.getCfg().getConfig().getString("Messages.NotEnough"); + this.message = this.message.replaceAll("%pxp%", String.valueOf(xp)); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + if (sender.hasPermission("satoshicraft.bottleadmin")) + { + if (args.length == 2) + { + Player target = Bukkit.getServer().getPlayer(args[1]); + if (target == null) + { + sender.sendMessage("�cCan t find player " + args[0] + "!"); + this.message = this.pl.getCfg().getConfig().getString("Messages.CantFind"); + this.message = this.message.replaceAll("%target%", args[0]); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + this.pl.xpBottle.setXpbServer(takenXp); + ItemStack Xpb = this.pl.xpBottle.getXpb(); + target.getInventory().addItem(new ItemStack[] { Xpb }); + this.message = this.pl.getCfg().getConfig().getString("Messages.BottleRecive"); + this.message = this.message.replaceAll("%xp%", String.valueOf(takenXp)); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + sender.sendMessage(this.message); + return true; + } + } + else + { + this.message = this.pl.getCfg().getConfig().getString("Messages.NoPermission"); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + } + else + { + this.message = this.pl.getCfg().getConfig().getString("Messages.NoNumber"); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + } + else + { + this.message = this.pl.getCfg().getConfig().getString("Messages.NoPermission"); + this.message = ChatColor.translateAlternateColorCodes('&', this.message); + p.sendMessage(this.message); + return true; + } + return false; + } +} diff --git a/src/com/satoshicraft/bottle/listener/XpBottleThrow.java b/src/com/satoshicraft/bottle/listener/XpBottleThrow.java new file mode 100644 index 0000000..c2c93ec --- /dev/null +++ b/src/com/satoshicraft/bottle/listener/XpBottleThrow.java @@ -0,0 +1,155 @@ +package com.satoshicraft.bottle.listener; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.ThrownExpBottle; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.ExpBottleEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import com.satoshicraft.bottle.Main; +import com.satoshicraft.bottle.XpLevel; + +public class XpBottleThrow + implements Listener +{ + private Main pl; + + public XpBottleThrow(Main plugin) + { + this.pl = plugin; + } + + @SuppressWarnings("deprecation") +@EventHandler + public void onPlayerInteractEvent(PlayerInteractEvent e) + { + if (((e.getAction() == Action.RIGHT_CLICK_AIR) || (e.getAction() == Action.RIGHT_CLICK_BLOCK)) && + (e.getPlayer().getItemInHand().getType().equals(Material.EXP_BOTTLE))) + { + Block block = e.getClickedBlock(); + if ((e.getAction() == Action.RIGHT_CLICK_BLOCK) && ( + (block.getType() == Material.CHEST) || (block.getType() == Material.FURNACE) || + (block.getType() == Material.BURNING_FURNACE) || (block.getType() == Material.ENDER_CHEST) || + (block.getType() == Material.TRAPPED_CHEST) || (block.getType() == Material.ANVIL) || + (block.getType() == Material.BED_BLOCK) || (block.getType() == Material.ENCHANTMENT_TABLE) || + (block.getType() == Material.DISPENSER) || (block.getType() == Material.NOTE_BLOCK) || + (block.getType() == Material.LEVER) || (block.getType() == Material.DIODE_BLOCK_OFF) || + (block.getType() == Material.DIODE_BLOCK_ON) || (block.getType() == Material.SPRUCE_DOOR) || + (block.getType() == Material.BIRCH_DOOR) || (block.getType() == Material.JUNGLE_DOOR) || + (block.getType() == Material.ACACIA_FENCE_GATE) || (block.getType() == Material.DARK_OAK_FENCE_GATE) || + (block.getType() == Material.JUNGLE_FENCE_GATE) || (block.getType() == Material.BIRCH_FENCE_GATE) || + (block.getType() == Material.SPRUCE_FENCE_GATE) || (block.getType() == Material.WOOD_DOOR) || + (block.getType() == Material.IRON_DOOR_BLOCK) || (block.getType() == Material.DARK_OAK_DOOR) || + (block.getType() == Material.ACACIA_DOOR) || (block.getType() == Material.WORKBENCH) || + (block.getType() == Material.HOPPER) || (block.getType() == Material.DROPPER) || + (block.getType() == Material.FENCE_GATE) || (block.getType() == Material.TRAP_DOOR) || + (block.getType() == Material.IRON_TRAPDOOR) || (block.getType() == Material.STONE_BUTTON) || + (block.getType() == Material.WOOD_BUTTON) || (block.getType() == Material.BEACON) || + (block.getType() == Material.CAULDRON))) + { + if (this.pl.xpitemlore.containsKey(e.getPlayer().getName())) { + this.pl.xpitemlore.remove(e.getPlayer().getName()); + } + e.getPlayer().updateInventory(); + return; + } + Player p = e.getPlayer(); + String ExpName = this.pl.getCfg().getConfig().getString("BottleName"); + ExpName = ExpName.replaceAll("&", "�"); + ExpName = ExpName.replaceAll("\\d",""); + if (!p.getItemInHand().hasItemMeta()) + { + if (this.pl.xpitemlore.containsKey(p.getName())) + { + e.setCancelled(true); + p.updateInventory(); + } + return; + } + if (!p.getItemInHand().getItemMeta().hasLore()) { + return; + } + if (p.getItemInHand().getItemMeta().getDisplayName().contains("Frasco de XP")) + { + if (this.pl.xpitemlore.containsKey(p.getName())) + { + e.setCancelled(true); + p.updateInventory(); + return; + } + String lore = (String)e.getPlayer().getItemInHand().getItemMeta().getLore().get(0); + if (e.hasItem()) + { + lore = ChatColor.stripColor(lore); + String[] values = lore.split(" "); + String[] arrayOfString1; + int j = (arrayOfString1 = values).length; + for (int i = 0; i < j; i++) + { + String bottlevalue = arrayOfString1[i]; + try + { + int exp = Integer.parseInt(bottlevalue); + this.pl.xpitemlore.put(p.getName(), Integer.valueOf(exp)); + } + catch (NumberFormatException localNumberFormatException) {} + } + } + } + } + } + + @EventHandler + public void onExp(ExpBottleEvent e) + { + Projectile pro = e.getEntity(); + if (!(pro.getShooter() instanceof Player)) { + return; + } + Player p = (Player)pro.getShooter(); + if (!(pro instanceof ThrownExpBottle)) { + return; + } + if (!this.pl.xpitemlore.isEmpty()) + { + int xp = ((Integer)this.pl.xpitemlore.get(p.getName())).intValue(); + + e.setExperience(xp); + this.pl.xpitemlore.remove(p.getName()); + p.updateInventory(); + } + else {} + } + + @EventHandler + public void PlayerDeath(PlayerDeathEvent e) + { + Player p = e.getEntity(); + if (!p.hasPermission("exp.drop")) { + return; + } + int xp = XpLevel.getXp(p); + if (xp <= 0) { + return; + } + double dropPercentage = this.pl.getCfg().getConfig().getDouble("DropPercentage") / 100.0D; + xp = (int)(xp * dropPercentage); + this.pl.xpBottle.setXpb(xp, p); + + ItemStack Xpb = this.pl.xpBottle.getXpb(); + + p.getWorld().dropItem(p.getLocation(), Xpb); + p.setTotalExperience(0); + p.setLevel(0); + p.setExp(0.0F); + e.setDroppedExp(0); + } +} diff --git a/src/config.yml b/src/config.yml new file mode 100644 index 0000000..b84078e --- /dev/null +++ b/src/config.yml @@ -0,0 +1,22 @@ +BottleName: "&6&lFrasco de XP &7(%value% XP)" +BottleEnchanter: "&dEngarrafado por&r %player%" +Value: "&dValor&r %value% XP" +AdminName: "&dEngarrafado por &rServer" +MinXp: 1 +MaxXp: 1000000 +DropPercentage: 100 +Messages: + NotEnough: &c"Você só tem %pxp%!" + Xpb: + - "&6/satoshixp " + - "&7Converte xp em frasco." + XpTransferred: + - "&6Seu XP foi transferido para o frasco!" + - "&c- %takenxp% XP" + FullInventory: "&cSeu inventário está cheio, por favor libere algum espaço." + MinXpMessage: "&cVocê tem que transformar no minimo %minxp% XP por frasco." + MaxXpMessage: "&cVocê só pode colocar %maxxp% em um Frasco!" + CantFind: "&cNão foi possivel encontrar %target%!" + BottleRecive: "&6Jogador recebeu %xp%!" + NoPermission: "&cVocê não tem permissão para usar esse comando!" + NoNumber: "&cIsso não é um numero!" \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml new file mode 100644 index 0000000..353effc --- /dev/null +++ b/src/plugin.yml @@ -0,0 +1,10 @@ +name: SatoshiBottle +version: 1.0 +main: com.satoshicraft.bottle.Main +description: Transferir XP para frasco. + +commands: + satoshixp: + usage: / + aliases: [bottle,sbottle,satoshibottle,satoshiengarrafar,engarrafar,xpbottle] + description: Transferir XP para frasco. \ No newline at end of file