diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java new file mode 100644 index 000000000..7d074ddff --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java @@ -0,0 +1,18 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; + +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; + +public class SlimefunBackpack extends SlimefunItem { + + public int size; + + public SlimefunBackpack(int size, Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, name, recipeType, recipe); + + this.size = size; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 31775de17..0aa812b1f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -253,6 +253,7 @@ public class SlimefunItem { if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; + else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi; } return null; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundBackpack.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundBackpack.java new file mode 100644 index 000000000..2f01346bb --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundBackpack.java @@ -0,0 +1,17 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; + +import org.bukkit.inventory.ItemStack; + +public class SoulboundBackpack extends SlimefunBackpack { + + public SoulboundBackpack(int size, Category category, ItemStack item, String name, ItemStack[] recipe) { + super(size, category, item, name, RecipeType.MAGIC_WORKBENCH, recipe); + } + public SoulboundBackpack(int size, Category category, ItemStack item, String name, RecipeType type, ItemStack[] recipe) { + super(size, category, item, name, type, recipe); + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 1567fa5d2..7322e27d1 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1,19 +1,23 @@ package me.mrCookieSlime.Slimefun.Setup; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.UUID; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.*; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.*; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Chest; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.Dispenser; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Arrow; @@ -81,11 +85,13 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SolarHelmet; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; @@ -101,7 +107,38 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BowShootHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.MultiBlockInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AdvancedCargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AnimalGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoAnvil; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoBreeder; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDisenchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CarbonPress; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoInputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ChargingBench; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricFurnace; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricGoldPan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricIngotFactory; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricSmeltery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectrifiedCrucible; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FluidPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodComposter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodFabricator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Freezer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HeatedPressureChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.NetherDrill; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OilPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Refinery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; +import me.mrCookieSlime.Slimefun.api.Backpacks; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; @@ -167,12 +204,21 @@ public class SlimefunSetup { boolean craft = true; for (int j = 0; j < inv.getContents().length; j++) { if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { + craft = false; + break; + } } } + if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone(); if (Slimefun.hasUnlocked(p, adding, true)) { Inventory inv2 = Bukkit.createInventory(null, 9, "test"); for (int j = 0; j < inv.getContents().length; j++) { @@ -189,6 +235,63 @@ public class SlimefunSetup { } } p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + } + inv.addItem(adding); } else Messages.local.sendTranslation(p, "machines.full-inventory", true); @@ -2161,19 +2264,19 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(9, Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(18, Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(36, Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) .register(true); @@ -2336,7 +2439,7 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(45, Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K}) .register(true); @@ -2360,7 +2463,7 @@ public class SlimefunSetup { new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3}) .register(true); - new SoulboundItem(Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", + new SoulboundBackpack(36, Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) .register(true);