Items? Repairing?

Discussion in 'Spigot Plugin Development' started by Inkzzz, Jun 13, 2015.

  1. Inkzzz

    Resource Staff

    I'm trying to make a fix all plugin, easy....But, when I do /fix all it turns potions into water bottles, and god apples into golden apples, why?

    I've also tried checking if the item is a golden apple etc...

    Command Class:
    Code (Text):
    package me.bukkit.aRepair.Inkzzz;

    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;

    public class RepairCMD implements CommandExecutor {

        public boolean onCommand(CommandSender sender, Command cmd, String string,
                String[] args) {
            if (sender instanceof Player) {
                Player p = (Player) sender;
                if (cmd.getName().equalsIgnoreCase("fix")) {
                    if (args.length == 0) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&',
                                "&cUsage> &7/fix all"));
                        return true;
                    } else if (args.length == 1) {
                        if (args[0].equalsIgnoreCase("all")) {
                            if (p.hasPermission("repair.all")) {
                                if (RepairHandle.inCooldown(p)) {
                                    if (RepairHandle.canRepair(p)) {
                                        for (ItemStack item : p.getInventory()
                                                .getContents()) {
                                            if (item != null) {
                                                if (RepairHandle.isRepairable(item))
                                                    item.setDurability((short) 0);
                                            }
                                        }
                                        for (ItemStack item : p.getInventory()
                                                .getArmorContents()) {
                                            if (item != null)
                                                item.setDurability((short) 0);
                                        }
                                        p.sendMessage(ChatColor
                                                .translateAlternateColorCodes('&',
                                                        "&cRepair> &7Your items have been repaired!"));
                                        RepairHandle.setCooldown(p);
                                        return true;
                                    } else {
                                        RepairHandle.sendCooldownMSG(p);
                                        return true;
                                    }
                                } else {
                                    for (ItemStack item : p.getInventory()
                                            .getContents()) {
                                        if (item != null) {
                                            Bukkit.broadcastMessage("hi");
                                            if (RepairHandle.isRepairable(item))
                                                item.setDurability((short) 0);
                                        }
                                    }
                                    for (ItemStack item : p.getInventory()
                                            .getArmorContents()) {
                                        if (item != null)
                                            item.setDurability((short) 0);
                                    }
                                    p.sendMessage(ChatColor
                                            .translateAlternateColorCodes('&',
                                                    "&cRepair> &7Your items have been repaired!"));
                                    RepairHandle.setCooldown(p);
                                    return true;
                                }
                            } else
                                p.sendMessage(ChatColor
                                        .translateAlternateColorCodes('&',
                                                "&cError> &7Sorry, but you don't have permission!"));
                        }
                    }
                }
            }
            return false;
        }
    }
     
    Repair Handler class:
    Code (Text):
    package me.bukkit.aRepair.Inkzzz;

    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;

    public class RepairHandle {

        private final static ItemStack gapple = new ItemStack(
                Material.GOLDEN_APPLE, 1, (short) 1);
        static DataManager dm = DataManager.getInstance();

        public static boolean inCooldown(Player p) {
            if (dm.getData().getString("Cooldown." + p.getUniqueId().toString()) != null) {
                return true;
            } else
                return false;
        }

        public static void setCooldown(Player p) {
            dm.getData().set("Cooldown." + p.getUniqueId().toString() + ".DayUsed",
                    System.currentTimeMillis());
            dm.getData().set(
                    "Cooldown." + p.getUniqueId().toString() + ".TimeLeft",
                    System.currentTimeMillis() + 43200000);
            dm.saveData();
        }

        public static boolean canRepair(Player p) {
            if (System.currentTimeMillis() > getTimeLeft(p)) {
                return false;
            } else {
                dm.getData().set("Cooldown." + p.getUniqueId().toString(), null);
                dm.saveData();
                return true;
            }
        }

        public static int getTimeLeft(Player p) {
            return dm.getData().getInt(
                    "Cooldown." + p.getUniqueId().toString() + ".TimeLeft");
        }

        public static int getDayUsed(Player p) {
            return dm.getData().getInt(
                    "Cooldown." + p.getUniqueId().toString() + ".DayUsed");
        }

        public static void sendCooldownMSG(Player p) {

            int timeleft = (int) (getTimeLeft(p) - System.currentTimeMillis());
            int seconds = (int) ((timeleft / 1000) % 60);
            int minutes = (int) ((timeleft / 1000) / 60);
            int hours = (int) ((minutes / 60) % 24);

            if (hours > 1) {
                p.sendMessage(ChatColor.translateAlternateColorCodes('&',
                        "&cRepair> &7You can repair again in &e" + hours
                                + " &7hour(s). "));
            } else if (hours < 1 && minutes > 1) {
                p.sendMessage(ChatColor.translateAlternateColorCodes(
                        '&',
                        "&cRepair> &7You can repair again in &e" + minutes
                                + " &7minutes(s).").replace("-", ""));
            } else if (minutes < 1 && seconds > 0) {
                p.sendMessage(ChatColor.translateAlternateColorCodes(
                        '&',
                        "&cRepair> &7You can repair again in &e" + seconds
                                + " &7seconds(s).").replace("-", ""));
            } else {
                dm.getData().set("Cooldown." + p.getUniqueId().toString(), null);
                dm.saveData();
                p.sendMessage(ChatColor
                        .translateAlternateColorCodes(
                                '&',
                                "&cRepair> &7To confirm to repair all your inventory items, run the command &e/fix all&7."));
            }
        }

        public static boolean isRepairable(ItemStack item) {
            if (item == gapple)
                return false;
            return true;
        }

    }
     
     
    #1 Inkzzz, Jun 13, 2015
    Last edited: Jun 13, 2015
  2. I think you should show us some code because we cant know what have you done wrong when we don't know what exactly did you did.
     
  3. Inkzzz

    Resource Staff

    I've updated my post.
     
  4. It's because you're setting the durability to 0, with items like those their data is the durability. So you would have to check for the items.
     
  5. What Nathan says, yes. Some items use the durability for metadata, so make sure the item you're trying to repair is actually repairable ;)
     
  6. I would just check if the items are armor, weapons or tools instead. Would take a lot less time.
     
  7. TimeUnit class was made for a reason ;)
     
  8. Inkzzz

    Resource Staff

    Yeah - This is old code, but I didn't finish it, so I thought I'd finish it haha
     
  9. So many incorrect naming conventions....

    Don't use Bukkit in your packages (they have a sticky on their website explaining this)
    Don't use uppercases in package names
     
  10. Because if (RepairHandle.isRepairable(item))
    item.setDurability((short) 0); isRepairable is only a gapple. Modify the method so if it's not a gapple or a potion etc repair it.
     
  11. @Inkzzzmc even better: only set the durability to 0 is Material#getMaxDurability() is greater than 0
     
    • Like Like x 1