From dd148165040a6d2508ac27fdc00879d271ea8164 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 2 Sep 2019 11:25:06 +0200 Subject: [PATCH 01/34] Added Blue Ice to Freezer --- .../SlimefunItem/machines/electric/Freezer.java | 3 ++- .../SlimefunItem/multiblocks/TableSaw.java | 16 ++++++++++++++++ .../Slimefun/Setup/SlimefunSetup.java | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java index 52d177863..107d2d939 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java @@ -24,7 +24,8 @@ public abstract class Freezer extends AContainer implements RecipeDisplayItem { registerRecipe(2, new ItemStack[] {new ItemStack(Material.WATER_BUCKET)}, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.ICE)}); registerRecipe(8, new ItemStack[] {new ItemStack(Material.LAVA_BUCKET)}, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.OBSIDIAN)}); registerRecipe(4, new ItemStack[] {new ItemStack(Material.ICE)}, new ItemStack[] {new ItemStack(Material.PACKED_ICE)}); - registerRecipe(6, new ItemStack[] {new ItemStack(Material.PACKED_ICE)}, new ItemStack[] {SlimefunItems.REACTOR_COOLANT_CELL}); + registerRecipe(6, new ItemStack[] {new ItemStack(Material.PACKED_ICE)}, new ItemStack[] {new ItemStack(Material.BLUE_ICE)}); + registerRecipe(8, new ItemStack[] {new ItemStack(Material.BLUE_ICE)}, new ItemStack[] {SlimefunItems.REACTOR_COOLANT_CELL}); } @Override diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java index dec794fec..79b4ac163 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java @@ -1,7 +1,11 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks; +import java.util.ArrayList; +import java.util.List; + import org.bukkit.Effect; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -11,6 +15,8 @@ import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; public class TableSaw extends MultiBlockMachine { + + private final List displayRecipes = new ArrayList(); public TableSaw() { super( @@ -21,6 +27,16 @@ public class TableSaw extends MultiBlockMachine { new ItemStack[0], Material.STONECUTTER ); + + for (Material log: Tag.LOGS.getValues()) { + displayRecipes.add(new ItemStack(log)); + displayRecipes.add(new ItemStack(MaterialHelper.getWoodFromLog(log), 8)); + } + } + + @Override + public List getDisplayRecipes() { + return displayRecipes; } @Override diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 29b595e51..f08f83c3e 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -3563,7 +3563,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.REACTOR_COOLANT_CELL, "REACTOR_COOLANT_CELL", new RecipeType(SlimefunItems.FREEZER), - new ItemStack[] {new ItemStack(Material.PACKED_ICE), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.BLUE_ICE), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.NETHER_ICE_COOLANT_CELL, "NETHER_ICE_COOLANT_CELL", new RecipeType(SlimefunItems.HEATED_PRESSURE_CHAMBER), From 6473988df4e27bd61028d4a7c3acd9b23a325a99 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 2 Sep 2019 11:27:32 +0200 Subject: [PATCH 02/34] Fixed Durability Enchantment on damageable Items --- src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java b/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java index 6db351177..2e0db06d2 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java +++ b/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java @@ -13,7 +13,11 @@ public interface DamageableItem { boolean isDamageable(); default void damageItem(Player p, ItemStack item) { - if (item != null && item.getType() != null && item.getType() != Material.AIR && item.getAmount() > 0 && isDamageable() && item.getEnchantments().containsKey(Enchantment.DURABILITY) && Math.random() * 100 <= (60 + Math.floorDiv(40, (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1)))) { + if (item != null && item.getType() != null && item.getType() != Material.AIR && item.getAmount() > 0 && isDamageable()) { + if (item.getEnchantments().containsKey(Enchantment.DURABILITY) && Math.random() * 100 <= (60 + Math.floorDiv(40, (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1)))) { + return; + } + ItemMeta meta = item.getItemMeta(); Damageable damageable = (Damageable) meta; From 38c4333d72a0db961f2e74732e5b6bf04ee63a85 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 2 Sep 2019 13:36:34 +0200 Subject: [PATCH 03/34] Retextured Categories --- .../Slimefun/Lists/Categories.java | 55 +++++++------------ .../Slimefun/Objects/Category.java | 7 +++ 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/Categories.java b/src/me/mrCookieSlime/Slimefun/Lists/Categories.java index 0935b3387..65e59cace 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/Categories.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/Categories.java @@ -1,18 +1,13 @@ package me.mrCookieSlime.Slimefun.Lists; -import java.util.logging.Level; - import org.bukkit.Color; import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomArmor; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.LockedCategory; import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory; -import me.mrCookieSlime.Slimefun.api.Slimefun; /** * Built-in categories. @@ -25,39 +20,31 @@ public final class Categories { private Categories() {} - private static final String lore = "&a> Click to open"; + private static final String LORE = "&a> Click to open"; - public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", lore), 1); - public static final Category PORTABLE = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&7Items", "", lore), 1); - public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", lore), 2); - public static final Category MACHINES_1 = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Basic Machines", "", lore), 1); - public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19"), "&bEnergy and Electricity", "", lore), 4, MACHINES_1); - public static final LockedCategory GPS = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS-based Machines", "", lore), 4, MACHINES_1); - public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", lore), 2); - public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", lore), 2); - public static final Category MAGIC = new Category(new CustomItem(SlimefunItems.ENDER_BACKPACK, "&7Magical Gadgets", "", lore), 3); - public static final Category MISC = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&7Miscellaneous", "", lore), 2); - public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", lore), Color.SILVER), 3); - public static final Category RESOURCES = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&7Resources", "", lore), 1); - public static final Category CARGO = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&cCargo Management", "", lore), 4, MACHINES_1); - public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", lore), 2); - public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", lore), 2); - public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", lore), 2); - public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", lore), 3, TALISMANS_1); - public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", lore), 1); + public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", LORE), 1); + public static final Category PORTABLE = new Category(new CustomItem(SlimefunItems.BACKPACK_MEDIUM, "&7Items", "", LORE), 1); + public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", LORE), 2); + public static final Category MACHINES_1 = new Category(new CustomItem(Material.SMITHING_TABLE, "&7Basic Machines", "", LORE), 1); + public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity", "", LORE), 4, MACHINES_1); + public static final LockedCategory GPS = new LockedCategory(new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines", "", LORE), 4, MACHINES_1); + public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", LORE), 2); + public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", LORE), 2); + public static final Category MAGIC = new Category(new CustomItem(Material.ELYTRA, "&7Magical Gadgets", "", LORE), 3); + public static final Category MISC = new Category(new CustomItem(SlimefunItems.CAN, "&7Miscellaneous", "", LORE), 2); + public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", LORE), Color.SILVER), 3); + public static final Category RESOURCES = new Category(new CustomItem(SlimefunItems.SYNTHETIC_SAPPHIRE, "&7Resources", "", LORE), 1); + public static final Category CARGO = new LockedCategory(new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management", "", LORE), 4, MACHINES_1); + public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", LORE), 2); + public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", LORE), 2); + public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", LORE), 2); + public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", LORE), 3, TALISMANS_1); + public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", LORE), 1); + + // Seasonal Categories public static final SeasonalCategory CHRISTMAS = new SeasonalCategory(12, 1, new CustomItem(Material.NETHER_STAR, "&aC&ch&ar&ci&as&ct&am&ca&as", "", "&c> Click to help &aSanta")); public static final SeasonalCategory VALENTINES_DAY = new SeasonalCategory(2, 2, new CustomItem(Material.POPPY, "&dValentine's Day", "", "&d> Click to celebrate Love")); public static final SeasonalCategory EASTER = new SeasonalCategory(4, 2, new CustomItem(Material.EGG, "&6Easter", "", "&a> Click to paint some Eggs")); public static final SeasonalCategory BIRTHDAY = new SeasonalCategory(10, 1, new CustomItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)", "", "&a> Click to celebrate with me")); - private static ItemStack getSkull(String texture) { - try { - return CustomSkull.getItem(texture); - } - catch(Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while initializing the Categories for Slimefun " + Slimefun.getVersion(), x); - - return new ItemStack(Material.PLAYER_HEAD); - } - } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Category.java b/src/me/mrCookieSlime/Slimefun/Objects/Category.java index 32f200a74..2a0d0472a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/Category.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/Category.java @@ -5,7 +5,9 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; @@ -44,6 +46,11 @@ public class Category { */ public Category(ItemStack item) { this.item = item; + + ItemMeta meta = item.getItemMeta(); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + this.item.setItemMeta(meta); + this.items = new ArrayList<>(); this.tier = 3; } From a49877964e9a1d8597b683d7a5694ea326b1401f Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 2 Sep 2019 23:14:48 +0200 Subject: [PATCH 04/34] Reduced technical debt --- .../Objects/SlimefunItem/SlimefunItem.java | 4 ++ .../abstractItems/AContainer.java | 51 ++++++++------- .../SlimefunItem/abstractItems/AFarm.java | 62 +++---------------- .../abstractItems/AGenerator.java | 38 +++++------- .../SlimefunItem/abstractItems/AReactor.java | 56 ++++++++--------- .../machines/ReactorAccessPort.java | 52 +++++++--------- .../electric/AnimalGrowthAccelerator.java | 25 +++----- .../machines/electric/AutoBreeder.java | 24 +++---- .../machines/electric/CarbonPress.java | 16 ----- .../electric/CropGrowthAccelerator.java | 23 +++---- .../electric/ElectricIngotFactory.java | 15 ----- .../machines/electric/ElectricSmeltery.java | 39 +++++------- .../machines/electric/FoodComposter.java | 16 ----- .../Slimefun/SlimefunPlugin.java | 10 +-- .../androids/ProgrammableAndroid.java | 22 ++----- .../mrCookieSlime/Slimefun/api/Slimefun.java | 2 +- .../Slimefun/api/TickerTask.java | 20 ++++-- .../Slimefun/api/energy/EnergyNet.java | 2 +- .../Slimefun/api/item_transport/CargoNet.java | 8 +-- .../Slimefun/utils/Utilities.java | 2 +- 20 files changed, 178 insertions(+), 309 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 53b0ee567..2290ce97d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -151,7 +151,10 @@ public class SlimefunItem { * @since 4.1.11, rename of {@link #getName()}. */ public String getID() { return id; } + + @Deprecated public String getHash() { return hash; } + public State getState() { return state; } public ItemStack getItem() { return item; } public Category getCategory() { return category; } @@ -278,6 +281,7 @@ public class SlimefunItem { this.research = r; } + @Deprecated public void setHash(String hash) { this.hash = hash; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index edaf92cec..f5dbaf470 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -18,9 +18,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -45,31 +43,27 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock createPreset(id, getInventoryTitle(), this::constructMenu); - registerBlockHandler(id, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getInputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - - for (int slot : getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(id, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - progress.remove(b); - processing.remove(b); - return true; + for (int slot : getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } } + + progress.remove(b); + processing.remove(b); + return true; }); this.registerDefaultRecipes(); @@ -121,6 +115,17 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock // Override this method to register your machine recipes } + public List getDisplayRecipes() { + List displayRecipes = new ArrayList<>(recipes.size() * 2); + + for (MachineRecipe recipe: recipes) { + displayRecipes.add(recipe.getInput()[0]); + displayRecipes.add(recipe.getOutput()[0]); + } + + return displayRecipes; + } + @Override public int[] getInputSlots() { return new int[] {19, 20}; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index 07452a502..e51053087 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -16,9 +16,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; @@ -53,61 +51,17 @@ public abstract class AFarm extends SlimefunItem { } }; - registerBlockHandler(id, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(id, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - return true; - } - }); - } - - public AFarm(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { - super(category, item, id, recipeType, recipe, recipeOutput); - - new BlockMenuPreset(id, getInventoryTitle()) { - - @Override - public void init() { - constructMenu(this); - } - - @Override - public boolean canOpen(Block b, Player p) { - return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true); - } - - @Override - public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) { - if (flow == ItemTransportFlow.WITHDRAW) return getOutputSlots(); - return new int[0]; - } - }; - - registerBlockHandler(id, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - } - return true; } + return true; }); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java index 066a8343a..c1570ff5b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java @@ -23,9 +23,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; @@ -67,29 +65,25 @@ public abstract class AGenerator extends SlimefunItem { } }; - registerBlockHandler(id, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getInputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - for (int slot : getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(id, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } + for (int slot : getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - progress.remove(b.getLocation()); - processing.remove(b.getLocation()); - return true; } + progress.remove(b.getLocation()); + processing.remove(b.getLocation()); + return true; }); this.registerDefaultRecipes(); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index 0db7d9f2a..cbe735c1c 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -26,9 +26,7 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -138,39 +136,35 @@ public abstract class AReactor extends SlimefunItem { } }; - registerBlockHandler(id, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getFuelSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - - for (int slot : getCoolantSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - - for (int slot : getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(id, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getFuelSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - progress.remove(b.getLocation()); - processing.remove(b.getLocation()); - ReactorHologram.remove(b.getLocation()); - return true; + for (int slot : getCoolantSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } + + for (int slot : getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } } + + progress.remove(b.getLocation()); + processing.remove(b.getLocation()); + ReactorHologram.remove(b.getLocation()); + return true; }); this.registerDefaultRecipes(); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index c06ae96b0..fe8432bb9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -16,9 +16,7 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -97,36 +95,32 @@ public class ReactorAccessPort extends SlimefunItem { } }; - registerBlockHandler(name, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - - if (inv != null) { - for (int slot : getFuelSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - - for (int slot : getCoolantSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - - for (int slot : getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(name, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + + if (inv != null) { + for (int slot : getFuelSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } + + for (int slot : getCoolantSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } + + for (int slot : getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - return true; } + return true; }); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java index 585cfe0d1..a744672a2 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java @@ -8,7 +8,6 @@ import org.bukkit.block.Block; import org.bukkit.entity.Ageable; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; @@ -17,9 +16,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -38,22 +35,18 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl super(category, item, name, recipeType, recipe); createPreset(getID(), "&bGrowth Accelerator", this::constructMenu); - registerBlockHandler(name, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - AnimalGrowthAcceleratorHologram.remove(b); - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getInputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(name, (p, b, tool, reason) -> { + AnimalGrowthAcceleratorHologram.remove(b); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - return true; } + return true; }); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java index 8c773a8d5..98dac1a58 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java @@ -18,9 +18,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.World.Animals; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -57,22 +55,18 @@ public class AutoBreeder extends SlimefunItem { } }; - registerBlockHandler(name, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - AutoBreederHologram.remove(b); - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getInputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(name, (p, b, tool, reason) -> { + AutoBreederHologram.remove(b); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - return true; } + return true; }); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java index a0e793913..a54508bfe 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java @@ -1,8 +1,5 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -11,7 +8,6 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; public abstract class CarbonPress extends AContainer implements RecipeDisplayItem { @@ -29,18 +25,6 @@ public abstract class CarbonPress extends AContainer implements RecipeDisplayIte registerRecipe(60, new ItemStack[] {SlimefunItems.CARBON_CHUNK}, new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND}); registerRecipe(90, new ItemStack[] {SlimefunItems.RAW_CARBONADO}, new ItemStack[] {SlimefunItems.CARBONADO}); } - - @Override - public List getDisplayRecipes() { - List displayRecipes = new ArrayList<>(recipes.size() * 2); - - for (MachineRecipe recipe: recipes) { - displayRecipes.add(recipe.getInput()[0]); - displayRecipes.add(recipe.getOutput()[0]); - } - - return displayRecipes; - } @Override public String getMachineIdentifier() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java index 856064390..086545974 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java @@ -8,7 +8,6 @@ import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.block.data.Ageable; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; @@ -17,9 +16,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -49,21 +46,17 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve super(category, item, name, recipeType, recipe); createPreset(getID(), "&bGrowth Accelerator", this::constructMenu); - registerBlockHandler(name, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot: getInputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(name, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - return true; } + return true; }); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java index 2a3b1e7c8..2d52548f3 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java @@ -1,8 +1,5 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -32,18 +29,6 @@ public abstract class ElectricIngotFactory extends AContainer implements RecipeD registerRecipe(new MachineRecipe(8, new ItemStack[] {SlimefunItems.ZINC_DUST}, new ItemStack[] {SlimefunItems.ZINC_INGOT})); } - @Override - public List getDisplayRecipes() { - List displayRecipes = new ArrayList<>(recipes.size() * 2); - - for (MachineRecipe recipe: recipes) { - displayRecipes.add(recipe.getInput()[0]); - displayRecipes.add(recipe.getOutput()[0]); - } - - return displayRecipes; - } - @Override public String getMachineIdentifier() { return "ELECTRIC_INGOT_FACTORY"; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java index ab3c0354b..9e8c888f6 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java @@ -16,9 +16,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -82,29 +79,25 @@ public abstract class ElectricSmeltery extends AContainer { } }; - registerBlockHandler(name, new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - BlockMenu inv = BlockStorage.getInventory(b); - if (inv != null) { - for (int slot : getInputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } - } - for (int slot : getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.replaceExistingItem(slot, null); - } + registerBlockHandler(name, (p, b, tool, reason) -> { + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot : getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } + } + for (int slot : getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); } } - progress.remove(b); - processing.remove(b); - return true; } + progress.remove(b); + processing.remove(b); + return true; }); this.registerDefaultRecipes(); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java index ca225bd0d..1559e9f31 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java @@ -1,15 +1,11 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; -import java.util.ArrayList; -import java.util.List; - import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; public abstract class FoodComposter extends AContainer implements RecipeDisplayItem { @@ -29,18 +25,6 @@ public abstract class FoodComposter extends AContainer implements RecipeDisplayI registerRecipe(30, new ItemStack[] {SlimefunItems.APPLE_ORGANIC_FOOD}, new ItemStack[] {SlimefunItems.APPLE_FERTILIZER}); } - @Override - public List getDisplayRecipes() { - List displayRecipes = new ArrayList<>(recipes.size() * 2); - - for (MachineRecipe recipe: recipes) { - displayRecipes.add(recipe.getInput()[0]); - displayRecipes.add(recipe.getOutput()[0]); - } - - return displayRecipes; - } - @Override public String getMachineIdentifier() { return "FOOD_COMPOSTER"; diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 94cedb005..cbdbf5163 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -46,7 +46,6 @@ import me.mrCookieSlime.Slimefun.api.SlimefunBackup; import me.mrCookieSlime.Slimefun.api.TickerTask; import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy; import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; -import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; import me.mrCookieSlime.Slimefun.autosave.BlockAutoSaver; import me.mrCookieSlime.Slimefun.autosave.PlayerAutoSaver; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; @@ -86,7 +85,7 @@ public final class SlimefunPlugin extends JavaPlugin { private Config whitelist; private Config config; - public GPSNetwork gps = new GPSNetwork(); + private final GPSNetwork gps = new GPSNetwork(); private ProtectionManager protections; private Utilities utilities = new Utilities(); private Settings settings; @@ -331,7 +330,7 @@ public final class SlimefunPlugin extends JavaPlugin { if (ticker != null) { // Finishes all started movements/removals of block data - ticker.halted = true; + ticker.halt(); ticker.run(); } @@ -369,7 +368,6 @@ public final class SlimefunPlugin extends JavaPlugin { SlimefunItem.mapID = null; AContainer.processing = null; AContainer.progress = null; - CargoNet.faces = null; OreWasher.items = null; instance = null; @@ -412,6 +410,10 @@ public final class SlimefunPlugin extends JavaPlugin { return CSCoreLib.randomizer().nextInt(max) <= percentage; } + public GPSNetwork getGPS() { + return gps; + } + public static SlimefunHooks getHooks() { return instance.hooks; } diff --git a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index 924bf8604..f5ad6c723 100644 --- a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -531,16 +531,9 @@ public abstract class ProgrammableAndroid extends SlimefunItem { if (fits(b, item.getItem()) && SlimefunPlugin.getUtilities().blockHandlers.containsKey(item.getID()) && SlimefunPlugin.getUtilities().blockHandlers.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG)) { pushItems(b, BlockStorage.retrieve(block)); block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - block.setType(Material.PLAYER_HEAD); - Rotatable blockData = (Rotatable) block.getBlockData(); - blockData.setRotation(face.getOppositeFace()); - block.setBlockData(blockData); - try { - CustomSkull.setSkull(block, CustomSkull.getTexture(getItem())); - } catch (Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while moving an Android for Slimefun " + Slimefun.getVersion(), x); - } + block.setType(Material.AIR); + move(b, face, block); b.setType(Material.AIR); BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation()); @@ -551,16 +544,9 @@ public abstract class ProgrammableAndroid extends SlimefunItem { if (fits(b, items)) { pushItems(b, items); block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - block.setType(Material.PLAYER_HEAD); - Rotatable blockData = (Rotatable) block.getBlockData(); - blockData.setRotation(face.getOppositeFace()); - block.setBlockData(blockData); - try { - CustomSkull.setSkull(block, CustomSkull.getTexture(getItem())); - } catch (Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while moving an Android for Slimefun " + Slimefun.getVersion(), x); - } + block.setType(Material.AIR); + move(b, face, block); b.setType(Material.AIR); BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/api/Slimefun.java b/src/me/mrCookieSlime/Slimefun/api/Slimefun.java index 5a993b58d..4afb7deb0 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Slimefun.java +++ b/src/me/mrCookieSlime/Slimefun/api/Slimefun.java @@ -39,7 +39,7 @@ public final class Slimefun { * @return the GPSNetwork instance. */ public static GPSNetwork getGPSNetwork() { - return SlimefunPlugin.instance.gps; + return SlimefunPlugin.instance.getGPS(); } public static Logger getLogger() { diff --git a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java index 1e19f844a..261120a65 100644 --- a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -24,11 +24,11 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; public class TickerTask implements Runnable { - public boolean halted = false; + private boolean halted = false; - public Map move = new HashMap<>(); - public Map delete = new HashMap<>(); - public Map blockTimings = new HashMap<>(); + protected Map move = new HashMap<>(); + protected Map delete = new HashMap<>(); + protected Map blockTimings = new HashMap<>(); private Set tickers = new HashSet<>(); @@ -285,6 +285,18 @@ public class TickerTask implements Runnable { public long getTimings(Chunk c) { return chunkTimings.containsKey(c.toString()) ? chunkTimings.get(c.toString()): 0L; } + + public void addBlockTimings(Location l, long time) { + blockTimings.put(l, time); + } + + public boolean isHalted() { + return halted; + } + + public void halt() { + halted = true; + } @Override public String toString() { diff --git a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java index 8819f161f..0df5f304e 100644 --- a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java @@ -145,7 +145,7 @@ public class EnergyNet extends Network { else { supply = supply + energy; } - SlimefunPlugin.getTicker().blockTimings.put(source, System.currentTimeMillis() - timestamp); + SlimefunPlugin.getTicker().addBlockTimings(source, System.currentTimeMillis() - timestamp); } input.removeAll(exploded); diff --git a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java index c51eae9a6..fa9cac3dc 100644 --- a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java @@ -1,7 +1,6 @@ package me.mrCookieSlime.Slimefun.api.item_transport; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -15,7 +14,6 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.block.data.Directional; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; @@ -40,14 +38,14 @@ public class CargoNet extends Network { public static boolean extraChannels = false; private static final int RANGE = 5; - public static List faces = Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST); private static final int[] slots = new int[] {19, 20, 21, 28, 29, 30, 37, 38, 39}; // Chest Terminal Stuff - private static final ChestTerminalSorter sorter = new ChestTerminalSorter(); public static final int[] terminal_slots = new int[] {0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 39, 40, 41, 42}; - private static final int TERMINAL_OUT_SLOT = 17; + public static final int TERMINAL_OUT_SLOT = 17; + + private static final ChestTerminalSorter sorter = new ChestTerminalSorter(); private static final ItemStack terminal_noitem_item = new CustomItem(new ItemStack(Material.BARRIER), "&4No Item cached"); private static final MenuClickHandler terminal_noitem_handler = (p, slot, item, action) -> false; diff --git a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java index 9a118a67d..9117f25c9 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -42,7 +42,7 @@ import me.mrCookieSlime.Slimefun.hooks.github.GitHubConnector; public final class Utilities { public int vanillaItems = 0; - + public final Set radioactiveItems = new HashSet<>(); public final Map> itemHandlers = new HashMap<>(); public final Map blockHandlers = new HashMap<>(); From 4282bfee5d5c504fb6535f528d2facf06a63deaa Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 3 Sep 2019 13:06:24 +0200 Subject: [PATCH 05/34] Reduced technical debt --- pom.xml | 2 +- .../Slimefun/GEO/OreGenResource.java | 16 +- .../Slimefun/Objects/MultiBlock.java | 16 +- .../Slimefun/Objects/Research.java | 18 +- .../Objects/SlimefunItem/EnhancedFurnace.java | 43 ++-- .../Objects/SlimefunItem/ExcludedBlock.java | 2 +- .../Objects/SlimefunItem/ExcludedGadget.java | 2 +- .../SlimefunItem/ExcludedSoulboundTool.java | 2 +- .../Objects/SlimefunItem/ExcludedTool.java | 2 +- .../SlimefunItem/Interfaces/NotPlaceable.java | 5 - .../Objects/SlimefunItem/SlimefunGadget.java | 2 +- .../Objects/SlimefunItem/SlimefunItem.java | 13 +- .../Objects/SlimefunItem/SlimefunMachine.java | 2 +- .../abstractItems/AContainer.java | 4 +- .../interfaces}/DamageableItem.java | 2 +- .../interfaces}/InventoryBlock.java | 10 +- .../SlimefunItem/interfaces/NotPlaceable.java | 5 + .../interfaces}/RecipeDisplayItem.java | 2 +- .../SlimefunItem/items/ExplosivePickaxe.java | 4 +- .../SlimefunItem/items/ExplosiveShovel.java | 4 +- .../items/PickaxeOfTheSeeker.java | 2 +- .../SlimefunItem/items/SeismicAxe.java | 4 +- .../SlimefunItem/items/SwordOfBeheading.java | 83 +++++++ .../SlimefunItem/machines/TrashCan.java | 4 +- .../SlimefunItem/machines/XPCollector.java | 4 +- .../electric/AnimalGrowthAccelerator.java | 4 +- .../machines/electric/AutoBreeder.java | 32 +-- .../machines/electric/AutoDrier.java | 2 +- .../electric/AutomatedCraftingChamber.java | 2 +- .../machines/electric/CarbonPress.java | 2 +- .../electric/CropGrowthAccelerator.java | 7 +- .../machines/electric/ElectricGoldPan.java | 2 +- .../electric/ElectricIngotFactory.java | 2 +- .../electric/ElectricIngotPulverizer.java | 2 +- .../machines/electric/FluidPump.java | 10 +- .../machines/electric/FoodComposter.java | 2 +- .../machines/electric/Freezer.java | 2 +- .../machines/electric/Refinery.java | 2 +- .../Objects/handlers/EntityKillHandler.java | 16 ++ .../Slimefun/Setup/SlimefunSetup.java | 3 +- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 2 +- .../Slimefun/SlimefunPlugin.java | 5 - .../androids/ProgrammableAndroid.java | 203 ++++++------------ .../Slimefun/listeners/DamageListener.java | 66 ++---- .../Slimefun/listeners/ItemListener.java | 15 +- .../Slimefun/listeners/ToolListener.java | 2 +- .../Slimefun/utils/Utilities.java | 8 + 47 files changed, 317 insertions(+), 327 deletions(-) delete mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java rename src/me/mrCookieSlime/Slimefun/{utils => Objects/SlimefunItem/interfaces}/DamageableItem.java (93%) rename src/me/mrCookieSlime/Slimefun/{utils => Objects/SlimefunItem/interfaces}/InventoryBlock.java (78%) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java rename src/me/mrCookieSlime/Slimefun/{utils => Objects/SlimefunItem/interfaces}/RecipeDisplayItem.java (71%) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java diff --git a/pom.xml b/pom.xml index 4455ca9ce..19336b0a1 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.3.10 + 0.3.11 compile diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java index daf92475a..71e50e7c0 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java @@ -5,16 +5,24 @@ import org.bukkit.inventory.ItemStack; public interface OreGenResource { - // Returns the default supply of this resource in that biome + /** + * Returns the default supply of this resource in that biome + */ int getDefaultSupply(Biome biome); - // Name/ID e.g. "Oil" + /** + * Name/ID e.g. "Oil" + */ String getName(); - // For the GEO-Scanner + /** + * For the GEO-Scanner + */ ItemStack getIcon(); - // Measurement Unit e.g. "Buckets" + /** + * Measurement Unit e.g. "Buckets" + */ String getMeasurementUnit(); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java index 988d37656..d1630e1a4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java @@ -1,18 +1,16 @@ package me.mrCookieSlime.Slimefun.Objects; -import java.util.ArrayList; import java.util.List; -import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; - import org.bukkit.Material; +import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; + public class MultiBlock { - public static List list = new ArrayList<>(); - private Material[] blocks; private Material trigger; @@ -30,11 +28,11 @@ public class MultiBlock { } public void register() { - list.add(this); + SlimefunPlugin.getUtilities().allMultiblocks.add(this); } public static List list() { - return list; + return SlimefunPlugin.getUtilities().allMultiblocks; } public boolean isMultiBlock(SlimefunItem machine) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/me/mrCookieSlime/Slimefun/Objects/Research.java index 19f048602..8392cee84 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -3,7 +3,6 @@ package me.mrCookieSlime.Slimefun.Objects; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.UUID; @@ -40,13 +39,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; public class Research { private static final int[] research_progress = {23, 44, 57, 92}; - - /** - * Contains all the registered researches; - * @since 4.0 - * @see ResearchSetup - */ - public static List list = new LinkedList<>(); private int id; private String name; @@ -116,7 +108,7 @@ public class Research { */ @Deprecated public int getLevel() { - return cost; + return getCost(); } /** @@ -129,7 +121,7 @@ public class Research { */ @Deprecated public void setLevel(int level) { - this.cost = level; + setCost(level); } /** @@ -303,7 +295,7 @@ public class Research { this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost"); this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled"); - list.add(this); + SlimefunPlugin.getUtilities().allResearches.add(this); if (SlimefunPlugin.getSettings().printOutLoading) { Slimefun.getLogger().log(Level.INFO, "Loaded Research \"" + this.getName() + "\""); } @@ -318,7 +310,7 @@ public class Research { * @see ResearchSetup */ public static List list() { - return list; + return SlimefunPlugin.getUtilities().allResearches; } /** @@ -388,7 +380,7 @@ public class Research { * @since 4.0 */ public static Research getByID(int id) { - for (Research research: list) { + for (Research research: list()) { if (research.getID() == id) return research; } return null; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java index be3a6c28e..b01620841 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java @@ -12,7 +12,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; -public class EnhancedFurnace extends SlimefunItem { +public class EnhancedFurnace extends SimpleSlimefunItem { private int speed; private int efficiency; @@ -24,8 +24,27 @@ public class EnhancedFurnace extends SlimefunItem { this.speed = speed - 1; this.efficiency = efficiency - 1; this.fortune = fortune - 1; - - addItemHandler(new BlockTicker() { + } + + public int getSpeed() { + return speed; + } + + public int getFuelEfficiency() { + return efficiency; + } + + public int getOutput() { + int fortune = this.fortune; + fortune = new Random().nextInt(fortune + 2) - 1; + if (fortune <= 0) fortune = 0; + fortune++; + return fortune; + } + + @Override + public BlockTicker getItemHandler() { + return new BlockTicker() { @Override public void tick(Block b, SlimefunItem item, Config data) { @@ -49,22 +68,6 @@ public class EnhancedFurnace extends SlimefunItem { public boolean isSynchronized() { return true; } - }); - } - - public int getSpeed() { - return speed; - } - - public int getFuelEfficiency() { - return efficiency; - } - - public int getOutput() { - int fortune = this.fortune; - fortune = new Random().nextInt(fortune + 2) - 1; - if (fortune <= 0) fortune = 0; - fortune++; - return fortune; + }; } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java index 8a75fee13..c20512b9a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java @@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; public class ExcludedBlock extends SlimefunItem implements NotPlaceable { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java index 6bd151202..1a35ecc55 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java @@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; public class ExcludedGadget extends SlimefunGadget implements NotPlaceable { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java index 8be575860..120ab916f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java @@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; public class ExcludedSoulboundTool extends SoulboundItem implements NotPlaceable { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java index 6f2e49c7d..06dba6a1e 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java @@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; public class ExcludedTool extends SlimefunItem implements NotPlaceable { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java deleted file mode 100644 index 41c515d34..000000000 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java +++ /dev/null @@ -1,5 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces; - -public interface NotPlaceable { - -} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java index afff7f633..26da5ca11 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; public class SlimefunGadget extends SlimefunItem implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 2290ce97d..b6f07219e 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -2,10 +2,8 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.logging.Level; @@ -37,7 +35,6 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; public class SlimefunItem { public static List items = new ArrayList<>(); - public static Map mapID = new HashMap<>(); public static List all = new ArrayList<>(); private String id; @@ -208,7 +205,9 @@ public class SlimefunItem { public void register(boolean slimefun) { this.addon = !slimefun; try { - if (mapID.containsKey(this.id)) throw new IllegalArgumentException("ID \"" + this.id + "\" already exists"); + if (SlimefunPlugin.getUtilities().itemIDs.containsKey(this.id)) { + throw new IllegalArgumentException("ID \"" + this.id + "\" already exists"); + } if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null}; all.add(this); @@ -247,7 +246,7 @@ public class SlimefunItem { this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission"); items.add(this); if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++; - mapID.put(this.id, this); + SlimefunPlugin.getUtilities().itemIDs.put(this.id, this); create(); @@ -312,14 +311,14 @@ public class SlimefunItem { */ @Deprecated public static SlimefunItem getByName(String name) { - return mapID.get(name); + return getByID(name); } /** * @since 4.1.11, rename of {@link #getByName(String)}. */ public static SlimefunItem getByID(String id) { - return mapID.get(id); + return SlimefunPlugin.getUtilities().itemIDs.get(id); } public static SlimefunItem getByItem(ItemStack item) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java index 70be933dc..a986a7245 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java @@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.MultiBlock; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index f5dbaf470..31924ee9f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -19,13 +19,13 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public abstract class AContainer extends SlimefunItem implements InventoryBlock { @@ -41,7 +41,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { super(category, item, id, recipeType, recipe); - createPreset(id, getInventoryTitle(), this::constructMenu); + createPreset(this, getInventoryTitle(), this::constructMenu); registerBlockHandler(id, (p, b, tool, reason) -> { BlockMenu inv = BlockStorage.getInventory(b); diff --git a/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java similarity index 93% rename from src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java index 2e0db06d2..0c0ace468 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.utils; +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; diff --git a/src/me/mrCookieSlime/Slimefun/utils/InventoryBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java similarity index 78% rename from src/me/mrCookieSlime/Slimefun/utils/InventoryBlock.java rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java index d405afe8b..b6dddcef2 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/InventoryBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.utils; +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces; import java.util.function.Consumer; @@ -13,7 +13,9 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Math.Calculator; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; @@ -22,8 +24,8 @@ public interface InventoryBlock { int[] getInputSlots(); int[] getOutputSlots(); - default void createPreset(String id, String title, Consumer setup) { - new BlockMenuPreset(id, title) { + default void createPreset(SlimefunItem item, String title, Consumer setup) { + new BlockMenuPreset(item.getID(), title) { @Override public void init() { @@ -38,7 +40,7 @@ public interface InventoryBlock { @Override public boolean canOpen(Block b, Player p) { - return p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES); + return p.hasPermission("slimefun.inventory.bypass") || (SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES) && Slimefun.hasUnlocked(p, item, false)); } }; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java new file mode 100644 index 000000000..e06465fac --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java @@ -0,0 +1,5 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces; + +public interface NotPlaceable { + +} diff --git a/src/me/mrCookieSlime/Slimefun/utils/RecipeDisplayItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java similarity index 71% rename from src/me/mrCookieSlime/Slimefun/utils/RecipeDisplayItem.java rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java index bfdde8001..a52363b7f 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/RecipeDisplayItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.utils; +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces; import java.util.List; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java index a10c77c78..9e3f8a116 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java @@ -19,12 +19,12 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.utils.DamageableItem; public class ExplosivePickaxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java index 77e453fc7..69b2c432e 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java @@ -13,11 +13,11 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.utils.DamageableItem; public class ExplosiveShovel extends SimpleSlimefunItem implements NotPlaceable, DamageableItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java index 712e9d874..39db089c7 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java @@ -7,10 +7,10 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.utils.DamageableItem; public class PickaxeOfTheSeeker extends SimpleSlimefunItem implements DamageableItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java index d24641b4b..9c1d5b67e 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java @@ -21,10 +21,10 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.utils.DamageableItem; public class SeismicAxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java new file mode 100644 index 000000000..dae0619fe --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java @@ -0,0 +1,83 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.Random; + +import org.bukkit.Material; +import org.bukkit.entity.Creeper; +import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton; +import org.bukkit.entity.WitherSkeleton; +import org.bukkit.entity.Zombie; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.Slimefun; + +public class SwordOfBeheading extends SimpleSlimefunItem { + + private final Random random = new Random(); + + private int chanceZombie; + private int chanceSkeleton; + private int chanceCreeper; + private int chanceWitherSkeleton; + private int chancePlayer; + + public SwordOfBeheading(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) { + super(category, item, id, recipeType, recipe, keys, values); + } + + @Override + public EntityKillHandler getItemHandler() { + return (e, entity, killer, item) -> { + if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + if (e.getEntity() instanceof Zombie) { + if (random.nextInt(100) < chanceZombie) { + e.getDrops().add(new ItemStack(Material.ZOMBIE_HEAD)); + } + } + else if (e.getEntity() instanceof WitherSkeleton) { + if (random.nextInt(100) < chanceWitherSkeleton) + e.getDrops().add(new ItemStack(Material.WITHER_SKELETON_SKULL)); + } + else if (e.getEntity() instanceof Skeleton) { + if (random.nextInt(100) < chanceSkeleton) + e.getDrops().add(new ItemStack(Material.SKELETON_SKULL)); + } + else if (e.getEntity() instanceof Creeper) { + if (random.nextInt(100) < chanceCreeper) { + e.getDrops().add(new ItemStack(Material.CREEPER_HEAD)); + } + } + else if (e.getEntity() instanceof Player) { + if (random.nextInt(100) < chancePlayer) { + ItemStack skull = new ItemStack(Material.PLAYER_HEAD); + ItemMeta meta = skull.getItemMeta(); + ((SkullMeta) meta).setOwningPlayer((Player) e.getEntity()); + skull.setItemMeta(meta); + + e.getDrops().add(skull); + } + } + return true; + } + else return false; + }; + } + + @Override + public void postRegister() { + chanceZombie = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.ZOMBIE"); + chanceSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.SKELETON"); + chanceCreeper = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.CREEPER"); + chanceWitherSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.WITHER_SKELETON"); + chancePlayer = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.PLAYER"); + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java index 253c3ab13..fe77c876f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java @@ -9,11 +9,11 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public class TrashCan extends SlimefunItem implements InventoryBlock { @@ -21,7 +21,7 @@ public class TrashCan extends SlimefunItem implements InventoryBlock { public TrashCan(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - createPreset(getID(), "&4Trash Can", this::constructMenu); + createPreset(this, "&4Trash Can", this::constructMenu); } private void constructMenu(BlockMenuPreset preset) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index d1cb51de8..768176a42 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -17,6 +17,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -24,7 +25,6 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.holograms.XPCollectorHologram; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public class XPCollector extends SlimefunItem implements InventoryBlock { @@ -32,7 +32,7 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { public XPCollector(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - createPreset(getID(), "&aEXP Collector", this::constructMenu); + createPreset(this, "&aEXP Collector", this::constructMenu); registerBlockHandler(name, new SlimefunBlockHandler() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java index a744672a2..87ac9b391 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java @@ -17,6 +17,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -25,7 +26,6 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAcceleratorHologram; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBlock { @@ -33,7 +33,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl public AnimalGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - createPreset(getID(), "&bGrowth Accelerator", this::constructMenu); + createPreset(this, "&bGrowth Accelerator", this::constructMenu); registerBlockHandler(name, (p, b, tool, reason) -> { AnimalGrowthAcceleratorHologram.remove(b); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java index 98dac1a58..b1bd79961 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java @@ -7,10 +7,8 @@ import org.bukkit.Particle; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; @@ -19,6 +17,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -26,34 +25,15 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.holograms.AutoBreederHologram; -public class AutoBreeder extends SlimefunItem { +public class AutoBreeder extends SlimefunItem implements InventoryBlock { private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; public AutoBreeder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - - new BlockMenuPreset(name, "&6Auto Breeder") { - - @Override - public void init() { - constructMenu(this); - } - - @Override - public boolean canOpen(Block b, Player p) { - return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true); - } - - @Override - public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) { - if (flow == ItemTransportFlow.INSERT) return getInputSlots(); - return new int[0]; - } - }; + createPreset(this, "&6Auto Breeder", this::constructMenu); registerBlockHandler(name, (p, b, tool, reason) -> { AutoBreederHologram.remove(b); @@ -80,10 +60,16 @@ public class AutoBreeder extends SlimefunItem { return 60; } + @Override public int[] getInputSlots() { return new int[] {10, 11, 12, 13, 14, 15, 16}; } + @Override + public int[] getOutputSlots() { + return new int[0]; + } + @Override public void register(boolean slimefun) { addItemHandler(new BlockTicker() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java index 21a10c933..c72346212 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java @@ -16,10 +16,10 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; public class AutoDrier extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java index 91f9c90b7..49fdf68ec 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java @@ -24,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; @@ -31,7 +32,6 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.api.item_transport.RecipeSorter; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public abstract class AutomatedCraftingChamber extends SlimefunItem implements InventoryBlock { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java index a54508bfe..483946cbb 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java @@ -8,7 +8,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; public abstract class CarbonPress extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java index 086545974..c080ec1d3 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java @@ -17,6 +17,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -24,13 +25,11 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public abstract class CropGrowthAccelerator extends SlimefunItem implements InventoryBlock { private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; - - public static final Map crops = new EnumMap<>(Material.class); + private static final Map crops = new EnumMap<>(Material.class); static { crops.put(Material.WHEAT, 7); @@ -44,7 +43,7 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve public CropGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - createPreset(getID(), "&bGrowth Accelerator", this::constructMenu); + createPreset(this, "&bGrowth Accelerator", this::constructMenu); registerBlockHandler(name, (p, b, tool, reason) -> { BlockMenu inv = BlockStorage.getInventory(b); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java index 73c245cef..6da65a837 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java @@ -16,10 +16,10 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; public abstract class ElectricGoldPan extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java index 2d52548f3..e4d891d36 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java @@ -8,7 +8,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; public abstract class ElectricIngotFactory extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java index cb4f4fa88..319f53474 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java @@ -11,7 +11,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; public class ElectricIngotPulverizer extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java index dbded71b0..494f594e5 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java @@ -1,9 +1,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.bukkit.Location; import org.bukkit.Material; @@ -22,19 +20,15 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.utils.InventoryBlock; public class FluidPump extends SlimefunItem implements InventoryBlock { - public static Map processing = new HashMap<>(); - public static Map progress = new HashMap<>(); - private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44, 22}; private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30}; private static final int[] border_out = {14, 15, 16, 17, 23, 26, 32, 33, 34, 35}; @@ -42,7 +36,7 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { public FluidPump(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - createPreset(getID(), "&9Fluid Pump", this::constructMenu); + createPreset(this, "&9Fluid Pump", this::constructMenu); } private void constructMenu(BlockMenuPreset preset) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java index 1559e9f31..aab8479c8 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java @@ -6,7 +6,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; public abstract class FoodComposter extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java index 107d2d939..946c2b7d4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java @@ -5,7 +5,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import java.util.ArrayList; import java.util.List; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java index 38294d8d6..49129e58a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java @@ -15,10 +15,10 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; public abstract class Refinery extends AContainer implements RecipeDisplayItem { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java new file mode 100644 index 000000000..7dd695a97 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java @@ -0,0 +1,16 @@ +package me.mrCookieSlime.Slimefun.Objects.handlers; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.inventory.ItemStack; + +@FunctionalInterface +public interface EntityKillHandler extends ItemHandler { + + boolean onKill(EntityDeathEvent e, Entity entity, Player killer, ItemStack item); + + default String toCodename() { + return "EntityKillHandler"; + } +} diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index f08f83c3e..f81937003 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -104,6 +104,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.BlockPlacer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Composter; @@ -341,7 +342,7 @@ public final class SlimefunSetup { new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) .register(true); - new SlimefunItem(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE, + new SwordOfBeheading(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.EMERALD), SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.BLAZE_ROD), null}, new String[] {"chance.PLAYER", "chance.SKELETON", "chance.WITHER_SKELETON", "chance.ZOMBIE", "chance.CREEPER"}, new Integer[] {70, 40, 25, 40, 40}) .register(true); diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index e39501c34..08f0edb04 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -42,6 +42,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.GuideHandler; @@ -50,7 +51,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.hooks.github.Contributor; import me.mrCookieSlime.Slimefun.hooks.github.IntegerFormat; -import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem; public final class SlimefunGuide { diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index cbdbf5163..7cef6b1d5 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -25,8 +25,6 @@ import me.mrCookieSlime.Slimefun.GEO.Resources.NetherIceResource; import me.mrCookieSlime.Slimefun.GEO.Resources.OilResource; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; -import me.mrCookieSlime.Slimefun.Objects.MultiBlock; -import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; @@ -361,11 +359,8 @@ public final class SlimefunPlugin extends JavaPlugin { // Prevent Memory Leaks Messages.local = null; - MultiBlock.list = null; - Research.list = null; SlimefunItem.all = null; SlimefunItem.items = null; - SlimefunItem.mapID = null; AContainer.processing = null; AContainer.progress = null; OreWasher.items = null; diff --git a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index f5ad6c723..e615a2e43 100644 --- a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -8,6 +8,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.function.Predicate; @@ -33,7 +34,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; @@ -57,6 +57,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; @@ -68,7 +69,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.holograms.AndroidHologram; -public abstract class ProgrammableAndroid extends SlimefunItem { +public abstract class ProgrammableAndroid extends SlimefunItem implements InventoryBlock { private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 18, 24, 25, 26, 27, 33, 35, 36, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; private static final int[] border_out = {10, 11, 12, 13, 14, 19, 23, 28, 32, 37, 38, 39, 40, 41}; @@ -83,6 +84,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem { blockblacklist.add(Material.BEDROCK); blockblacklist.add(Material.BARRIER); blockblacklist.add(Material.END_PORTAL_FRAME); + blockblacklist.add(Material.END_PORTAL); + blockblacklist.add(Material.NETHER_PORTAL); blockblacklist.add(Material.COMMAND_BLOCK); blockblacklist.add(Material.CHAIN_COMMAND_BLOCK); blockblacklist.add(Material.REPEATING_COMMAND_BLOCK); @@ -90,11 +93,18 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } private Set recipes = new HashSet<>(); + private Random random = new Random(); public String getInventoryTitle() { return "Programmable Android"; } + + @Override + public int[] getInputSlots() { + return new int[0]; + } + @Override public int[] getOutputSlots() { return new int[] {20, 21, 22, 29, 30, 31}; } @@ -247,13 +257,16 @@ public abstract class ProgrammableAndroid extends SlimefunItem { float fuel = Float.parseFloat(BlockStorage.getLocationInfo(b.getLocation(), "fuel")); if (fuel < 0.001) { ItemStack item = BlockStorage.getInventory(b).getItemInSlot(43); + if (item != null) { for (MachineFuel recipe: recipes) { if (SlimefunManager.isItemSimiliar(item, recipe.getInput(), true)) { BlockStorage.getInventory(b).replaceExistingItem(43, InvUtils.decreaseItem(item, 1)); + if (getTier() == 2) { pushItems(b, new ItemStack(Material.BUCKET)); } + BlockStorage.addBlockInfo(b, "fuel", String.valueOf((int) (recipe.getTicks() * this.getFuelEfficiency()))); break; } @@ -264,6 +277,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { String[] script = BlockStorage.getLocationInfo(b.getLocation(), "script").split("-"); int index = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "index")) + 1; if (index >= script.length) index = 0; + boolean refresh = true; BlockStorage.addBlockInfo(b, "fuel", String.valueOf(fuel - 1)); ScriptPart part = ScriptPart.valueOf(script[index]); @@ -314,8 +328,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem { Block water = b.getRelative(BlockFace.DOWN); if (water.getType() == Material.WATER) { water.getWorld().playSound(water.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - if (CSCoreLib.randomizer().nextInt(100) < 10 * getTier()) { - ItemStack drop = fish[CSCoreLib.randomizer().nextInt(fish.length)]; + if (random.nextInt(100) < 10 * getTier()) { + ItemStack drop = fish[random.nextInt(fish.length)]; if (fits(b, drop)) pushItems(b, drop); } @@ -394,11 +408,14 @@ public abstract class ProgrammableAndroid extends SlimefunItem { Block log = list.get(list.size() - 1).getBlock(); Collection drops = log.getDrops(); log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType()); + if (!drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), log)) { ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); + if (fits(b, items)) { pushItems(b, items); log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType()); + if (log.getY() == b.getRelative(face).getY()) { log.setType(MaterialHelper.getSaplingFromLog(log.getType())); } @@ -433,46 +450,32 @@ public abstract class ProgrammableAndroid extends SlimefunItem { private void killEntities(Block b, double damage, Predicate predicate) { for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) { if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && predicate.test(n)) { + boolean attack = false; + switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { case NORTH: - if (n.getLocation().getZ() < b.getZ()) { - if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); - n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); - - ((LivingEntity) n).damage(damage); - return; - } + attack = n.getLocation().getZ() < b.getZ(); break; case EAST: - if (n.getLocation().getX() > b.getX()) { - if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); - n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); - - ((LivingEntity) n).damage(damage); - return; - } + attack = n.getLocation().getX() > b.getX(); break; case SOUTH: - if (n.getLocation().getZ() > b.getZ()) { - if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); - n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); - - ((LivingEntity) n).damage(damage); - return; - } + attack = n.getLocation().getZ() > b.getZ(); break; case WEST: - if (n.getLocation().getX() < b.getX()) { - if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); - n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); - - ((LivingEntity) n).damage(damage); - return; - } + attack = n.getLocation().getX() < b.getX(); break; default: break; } + + if (attack) { + if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); + n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); + + ((LivingEntity) n).damage(damage); + break; + } } } } @@ -559,86 +562,47 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } private boolean isFullGrown(Block block){ + if (!(block.getBlockData() instanceof Ageable)) return false; Ageable ageable = ((Ageable) block.getBlockData()); return ageable.getAge() >= ageable.getMaximumAge(); } private void farm(Block b, Block block) { - switch (block.getType()) { + if (isFullGrown(block)) { + ItemStack drop = null; + switch (block.getType()) { case WHEAT: - if (isFullGrown(block)) { - ItemStack drop = new ItemStack(Material.WHEAT, CSCoreLib.randomizer().nextInt(3) + 1); - if (fits(b, drop)) { - pushItems(b, drop); - Ageable ageable = (Ageable) block.getBlockData(); - ageable.setAge(0); - block.setBlockData(ageable); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - } - } + drop = new ItemStack(Material.WHEAT, random.nextInt(2) + 1); break; case POTATOES: - if (isFullGrown(block)) { - ItemStack drop = new ItemStack(Material.POTATO, CSCoreLib.randomizer().nextInt(3) + 1); - if (fits(b, drop)) { - pushItems(b, drop); - Ageable ageable = (Ageable) block.getBlockData(); - ageable.setAge(0); - block.setBlockData(ageable); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - } - } + drop = new ItemStack(Material.POTATO, random.nextInt(3) + 1); break; case CARROTS: - if (isFullGrown(block)) { - ItemStack drop = new ItemStack(Material.CARROT, CSCoreLib.randomizer().nextInt(3) + 1); - if (fits(b, drop)) { - pushItems(b, drop); - Ageable ageable = (Ageable) block.getBlockData(); - ageable.setAge(0); - block.setBlockData(ageable); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - } - } + drop = new ItemStack(Material.CARROT, random.nextInt(3) + 1); break; case BEETROOTS: - if (isFullGrown(block)) { - ItemStack drop = new ItemStack(Material.BEETROOT, CSCoreLib.randomizer().nextInt(3) + 1); - if (fits(b, drop)) { - pushItems(b, drop); - Ageable ageable = (Ageable) block.getBlockData(); - ageable.setAge(0); - block.setBlockData(ageable); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - } - } + drop = new ItemStack(Material.BEETROOT, random.nextInt(3) + 1); break; case COCOA: - if (isFullGrown(block)) { - ItemStack drop = new ItemStack(Material.COCOA_BEANS, CSCoreLib.randomizer().nextInt(3) + 1); - if (fits(b, drop)) { - pushItems(b, drop); - Ageable ageable = (Ageable) block.getBlockData(); - ageable.setAge(0); - block.setBlockData(ageable); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - } - } + drop = new ItemStack(Material.COCOA_BEANS, random.nextInt(3) + 1); break; case NETHER_WART: - if (isFullGrown(block)) { - ItemStack drop = new ItemStack(Material.NETHER_WART, CSCoreLib.randomizer().nextInt(3) + 1); - if (fits(b, drop)) { - pushItems(b, drop); - Ageable ageable = (Ageable) block.getBlockData(); - ageable.setAge(0); - block.setBlockData(ageable); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - } - } + drop = new ItemStack(Material.NETHER_WART, random.nextInt(3) + 1); + break; + case SWEET_BERRY_BUSH: + drop = new ItemStack(Material.SWEET_BERRIES, random.nextInt(3) + 1); break; default: break; + } + + if (drop != null && fits(b, drop)) { + pushItems(b, drop); + Ageable ageable = (Ageable) block.getBlockData(); + ageable.setAge(0); + block.setBlockData(ageable); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + } } } @@ -655,14 +619,10 @@ public abstract class ProgrammableAndroid extends SlimefunItem { private void constructMenu(BlockMenuPreset preset) throws Exception { for (int i : border) { - preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), - (p, slot, item, action) -> false - ); + preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false); } for (int i : border_out) { - preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), - (p, slot, item, action) -> false - ); + preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false); } for (int i : getOutputSlots()) { @@ -681,19 +641,13 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } if (getTier() == 1) { - preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on solid Fuel", "&re.g. Coal, Wood, etc..."), - (p, slot, item, action) -> false - ); + preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on solid Fuel", "&re.g. Coal, Wood, etc..."), (p, slot, item, action) -> false); } else if (getTier() == 2){ - preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on liquid Fuel", "&re.g. Lava, Oil, Fuel, etc..."), - (p, slot, item, action) -> false - ); + preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on liquid Fuel", "&re.g. Lava, Oil, Fuel, etc..."), (p, slot, item, action) -> false); } else { - preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on radioactive Fuel", "&re.g. Uranium, Neptunium or Boosted Uranium"), - (p, slot, item, action) -> false - ); + preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on radioactive Fuel", "&re.g. Uranium, Neptunium or Boosted Uranium"), (p, slot, item, action) -> false); } } @@ -744,6 +698,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { for (int i = 1; i < commands.length; i++) { final int index = i; + if (i == commands.length - 1) { int additional = commands.length == 54 ? 0: 1; @@ -838,8 +793,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { return false; }); - try { - + try { menu.addItem(48, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTA1YTJjYWI4YjY4ZWE1N2UzYWY5OTJhMzZlNDdjOGZmOWFhODdjYzg3NzYyODE5NjZmOGMzY2YzMWEzOCJ9fX0="), "&eUpload a Script", "", "&6Click &7to upload your Android's Script", "&7to the Database")); menu.addMenuClickHandler(48, (pl, slot, item, action) -> { final String code = BlockStorage.getLocationInfo(b.getLocation(), "script"); @@ -900,6 +854,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } int categoryIndex = 45 * (page - 1); + for (int i = 0; i < 45; i++) { int target = categoryIndex + i; if (target >= scripts.size()) break; @@ -1049,34 +1004,6 @@ public abstract class ProgrammableAndroid extends SlimefunItem { menu.open(p); } - private Inventory inject(Block b) { - int size = BlockStorage.getInventory(b).toInventory().getSize(); - Inventory inv = Bukkit.createInventory(null, size); - - for (int i = 0; i < size; i++) { - inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US")); - } - - for (int slot: getOutputSlots()) { - inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot)); - } - - return inv; - } - - protected boolean fits(Block b, ItemStack... items) { - return inject(b).addItem(items).isEmpty(); - } - - protected void pushItems(Block b, ItemStack... items) { - Inventory inv = inject(b); - inv.addItem(items); - - for (int slot : getOutputSlots()) { - BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot)); - } - } - public void addItems(Block b, ItemStack... items) { this.pushItems(b, items); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index 49a09c8e1..81bdc4773 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -5,16 +5,11 @@ import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; -import java.util.Random; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.ChestedHorse; -import org.bukkit.entity.Creeper; import org.bukkit.entity.Player; -import org.bukkit.entity.Skeleton; -import org.bukkit.entity.WitherSkeleton; -import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; @@ -22,8 +17,6 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants; import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment; @@ -32,6 +25,8 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; +import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.Soul; @@ -41,7 +36,6 @@ public class DamageListener implements Listener { private SimpleDateFormat format = new SimpleDateFormat("(MMM d, yyyy @ hh:mm)"); private Utilities utilities; - private Random random = new Random(); public DamageListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); @@ -78,59 +72,33 @@ public class DamageListener implements Listener { if (SlimefunPlugin.getUtilities().drops.containsKey(e.getEntity().getType())) { for (ItemStack drop : SlimefunPlugin.getUtilities().drops.get(e.getEntity().getType())) { - if (Slimefun.hasUnlocked(p, item, true)) { + if (Slimefun.hasUnlocked(p, drop, true)) { e.getDrops().add(drop); } } } - - if (item != null && Slimefun.hasUnlocked(p, item, true) && SlimefunManager.isItemSimiliar(item, SlimefunItem.getItem("SWORD_OF_BEHEADING"), true)) { - if (e.getEntity() instanceof Zombie) { - if (random.nextInt(100) < (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.ZOMBIE")) { - e.getDrops().add(new ItemStack(Material.ZOMBIE_HEAD)); - } - } - else if (e.getEntity() instanceof WitherSkeleton) { - if (random.nextInt(100) < (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.WITHER_SKELETON")) - e.getDrops().add(new ItemStack(Material.WITHER_SKELETON_SKULL)); - } - else if (e.getEntity() instanceof Skeleton) { - if (random.nextInt(100) < (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.SKELETON")) - e.getDrops().add(new ItemStack(Material.SKELETON_SKULL)); - } - else if (e.getEntity() instanceof Creeper) { - if (random.nextInt(100) < (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.CREEPER")) { - e.getDrops().add(new ItemStack(Material.CREEPER_HEAD)); - } - } - else if (e.getEntity() instanceof Player && random.nextInt(100) < (Integer) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.PLAYER")) { - ItemStack skull = new ItemStack(Material.PLAYER_HEAD); - ItemMeta meta = skull.getItemMeta(); - ((SkullMeta) meta).setOwningPlayer((Player) e.getEntity()); - skull.setItemMeta(meta); - - e.getDrops().add(skull); - } + + if (item != null && item.getType() != null && item.getType() != Material.AIR) { + for (ItemHandler handler : SlimefunItem.getHandlers("EntityKillHandler")) { + if (((EntityKillHandler) handler).onKill(e, e.getEntity(), p, item)) return; + } } if (!e.getEntity().getCanPickupItems() && Talisman.checkFor(e, SlimefunItem.getByID("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { - - List newDrops = new ArrayList<>(); - for (ItemStack drop : e.getDrops()) { - newDrops.add(drop); - } - for (ItemStack drop : newDrops) { - e.getDrops().add(drop); - } + List extraDrops = new ArrayList<>(e.getDrops()); - if(e.getEntity() instanceof ChestedHorse) { - for(ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) { - e.getDrops().remove(invItem); + if (e.getEntity() instanceof ChestedHorse) { + for (ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) { + extraDrops.remove(invItem); } //The chest is not included in getStorageContents() - e.getDrops().remove(new ItemStack(Material.CHEST)); + extraDrops.remove(new ItemStack(Material.CHEST)); } + + for (ItemStack drop: extraDrops) { + e.getDrops().add(drop); + } } } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 1157d20eb..e4136f4b3 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -228,6 +228,7 @@ public class ItemListener implements Listener { for (ItemHandler handler : SlimefunItem.getHandlers("ItemInteractionHandler")) { if (((ItemInteractionHandler) handler).onRightClick(e, p, item)) return; } + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DURALUMIN_MULTI_TOOL, false) || SlimefunManager.isItemSimiliar(item, SlimefunItems.SOLDER_MULTI_TOOL, false) || SlimefunManager.isItemSimiliar(item, SlimefunItems.BILLON_MULTI_TOOL, false) @@ -274,11 +275,21 @@ public class ItemListener implements Listener { if (storage.hasUniversalInventory(id)) { UniversalBlockMenu menu = storage.getUniversalInventory(id); - if (menu.canOpen(e.getClickedBlock(), p)) menu.open(p); + if (menu.canOpen(e.getClickedBlock(), p)) { + menu.open(p); + } + else { + Messages.local.sendTranslation(p, "inventory.no-access", true); + } } else if (storage.hasInventory(e.getClickedBlock().getLocation())) { BlockMenu menu = BlockStorage.getInventory(e.getClickedBlock().getLocation()); - if (menu.canOpen(e.getClickedBlock(), p)) menu.open(p); + if (menu.canOpen(e.getClickedBlock(), p)) { + menu.open(p); + } + else { + Messages.local.sendTranslation(p, "inventory.no-access", true); + } } } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index 8d24cd790..c73f414e0 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -29,7 +29,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; diff --git a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java index 9117f25c9..5b2024847 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.EnumMap; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -17,7 +18,10 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.GEO.OreGenResource; import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.MultiBlock; +import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.PostSlimefunLoadingHandler; import me.mrCookieSlime.Slimefun.ancient_altar.AltarRecipe; @@ -42,6 +46,10 @@ import me.mrCookieSlime.Slimefun.hooks.github.GitHubConnector; public final class Utilities { public int vanillaItems = 0; + + public final Map itemIDs = new HashMap<>(); + public final List allMultiblocks = new LinkedList<>(); + public final List allResearches = new LinkedList<>(); public final Set radioactiveItems = new HashSet<>(); public final Map> itemHandlers = new HashMap<>(); From 00de4d93612ad2bb6f82b8b6bee9480845d3ea43 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 3 Sep 2019 13:09:58 +0200 Subject: [PATCH 06/34] Refactored Code --- .../GEO/{Resources => resources}/NetherIceResource.java | 2 +- .../Slimefun/GEO/{Resources => resources}/OilResource.java | 2 +- src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/me/mrCookieSlime/Slimefun/GEO/{Resources => resources}/NetherIceResource.java (92%) rename src/me/mrCookieSlime/Slimefun/GEO/{Resources => resources}/OilResource.java (97%) diff --git a/src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java similarity index 92% rename from src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java rename to src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java index 4c2cac513..2a86ea450 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.GEO.Resources; +package me.mrCookieSlime.Slimefun.GEO.resources; import org.bukkit.block.Biome; import org.bukkit.inventory.ItemStack; diff --git a/src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java similarity index 97% rename from src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java rename to src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java index 26b3c4cd3..cac4cbd09 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.GEO.Resources; +package me.mrCookieSlime.Slimefun.GEO.resources; import org.bukkit.block.Biome; import org.bukkit.inventory.ItemStack; diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 7cef6b1d5..6af513583 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -21,8 +21,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; -import me.mrCookieSlime.Slimefun.GEO.Resources.NetherIceResource; -import me.mrCookieSlime.Slimefun.GEO.Resources.OilResource; +import me.mrCookieSlime.Slimefun.GEO.resources.NetherIceResource; +import me.mrCookieSlime.Slimefun.GEO.resources.OilResource; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; From 9277b120e18fea3eb2a5aa3da30fba2800c0a5f7 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 3 Sep 2019 16:29:46 +0200 Subject: [PATCH 07/34] Refactored Code --- pom.xml | 2 +- .../SlimefunItem/SimpleSlimefunItem.java | 3 +- .../Objects/SlimefunItem/SlimefunItem.java | 9 +++- .../Objects/SlimefunItem/Talisman.java | 2 +- .../abstractItems/AContainer.java | 4 +- .../SlimefunItem/abstractItems/AFarm.java | 4 +- .../abstractItems/AGenerator.java | 4 +- .../SlimefunItem/abstractItems/AReactor.java | 4 +- .../SlimefunItem/items/HunterTalisman.java | 54 +++++++++++++++++++ .../SlimefunItem/machines/Composter.java | 4 +- .../SlimefunItem/machines/Crucible.java | 4 +- .../SlimefunItem/machines/TrashCan.java | 4 +- .../SlimefunItem/machines/XPCollector.java | 4 +- .../electric/AnimalGrowthAccelerator.java | 4 +- .../machines/electric/AutoBreeder.java | 4 +- .../electric/AutomatedCraftingChamber.java | 4 +- .../electric/CropGrowthAccelerator.java | 4 +- .../machines/electric/EnergyRegulator.java | 4 +- .../machines/electric/FluidPump.java | 4 +- .../electric/HeatedPressureChamber.java | 4 +- .../machines/electric/WitherAssembler.java | 4 +- .../Slimefun/listeners/DamageListener.java | 23 +------- .../Slimefun/listeners/ItemListener.java | 25 ++++----- 23 files changed, 95 insertions(+), 87 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java diff --git a/pom.xml b/pom.xml index 19336b0a1..d50ff0df5 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.3.11 + 0.3.12 compile diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java index 2a91594a0..5e8f4c29b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java @@ -21,9 +21,8 @@ public abstract class SimpleSlimefunItem extends Slimefun } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(getItemHandler()); - super.register(slimefun); } public abstract T getItemHandler(); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index b6f07219e..31420ffa8 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -201,10 +201,12 @@ public class SlimefunItem { public void register() { register(false); } - + public void register(boolean slimefun) { this.addon = !slimefun; try { + preRegister(); + if (SlimefunPlugin.getUtilities().itemIDs.containsKey(this.id)) { throw new IllegalArgumentException("ID \"" + this.id + "\" already exists"); } @@ -531,6 +533,11 @@ public class SlimefunItem { ChargableBlock.registerCapacitor(id, capacity); } + public void preRegister() { + // Override this method to execute code before the Item has been registered + // Useful for calls to addItemHandler(...) + } + public void postRegister() { // Override this method to execute code after the Item has been registered // Useful for calls to Slimefun.getItemValue(...) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java index 11ec3e485..598a51d9a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java @@ -124,7 +124,7 @@ public class Talisman extends SlimefunItem { @Override public void create() { EnderTalisman talisman = new EnderTalisman(this); - talisman.register(true); + talisman.register(!isAddonItem()); } @Override diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 31924ee9f..083e24d10 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -154,7 +154,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -167,8 +167,6 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock return false; } }); - - super.register(slimefun); } protected void tick(Block b) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index e51053087..a5a780fd9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -128,7 +128,7 @@ public abstract class AFarm extends SlimefunItem { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -141,8 +141,6 @@ public abstract class AFarm extends SlimefunItem { return true; } }); - - super.register(slimefun); } private Inventory inject(Block b) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java index c1570ff5b..9512702b9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java @@ -151,7 +151,7 @@ public abstract class AGenerator extends SlimefunItem { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new EnergyTicker() { @Override @@ -210,8 +210,6 @@ public abstract class AGenerator extends SlimefunItem { return false; } }); - - super.register(slimefun); } private MachineFuel findRecipe(BlockMenu menu, Map found) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index cbe735c1c..933360392 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -246,7 +246,7 @@ public abstract class AReactor extends SlimefunItem { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new EnergyTicker() { private Set explode = new HashSet<>(); @@ -359,8 +359,6 @@ public abstract class AReactor extends SlimefunItem { return explosion; } }); - - super.register(slimefun); } private void restockCoolant(Location l, BlockMenu port) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java new file mode 100644 index 000000000..4c62a098c --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java @@ -0,0 +1,54 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.entity.ChestedHorse; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; +import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; + +public class HunterTalisman extends Talisman { + + public HunterTalisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix) { + super(item, id, recipe, messageSuffix, 0); + } + + @Override + public void preRegister() { + addItemHandler(getItemHandler()); + } + + public EntityKillHandler getItemHandler() { + return (e, entity, killer, item) -> { + if (Talisman.checkFor(e, SlimefunItem.getByID("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { + if (!e.getEntity().getCanPickupItems()) { + List extraDrops = new ArrayList<>(e.getDrops()); + + if (e.getEntity() instanceof ChestedHorse) { + for (ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) { + extraDrops.remove(invItem); + } + + //The chest is not included in getStorageContents() + extraDrops.remove(new ItemStack(Material.CHEST)); + } + + for (ItemStack drop: extraDrops) { + e.getDrops().add(drop); + } + } + + return true; + } + else { + return false; + } + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java index 1b4f9a46f..f68893a66 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java @@ -28,7 +28,7 @@ public class Composter extends SlimefunGadget { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new ItemInteractionHandler() { @Override @@ -73,8 +73,6 @@ public class Composter extends SlimefunGadget { return false; } }); - - super.register(slimefun); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java index c5b0f234d..d349db5f0 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java @@ -29,7 +29,7 @@ public class Crucible extends SlimefunGadget { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new ItemInteractionHandler() { @Override @@ -81,8 +81,6 @@ public class Crucible extends SlimefunGadget { return false; } }); - - super.register(slimefun); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java index fe77c876f..25721f1f9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java @@ -43,7 +43,7 @@ public class TrashCan extends SlimefunItem implements InventoryBlock { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -59,8 +59,6 @@ public class TrashCan extends SlimefunItem implements InventoryBlock { return false; } }); - - super.register(slimefun); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index 768176a42..183faa3b9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -81,7 +81,7 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -98,8 +98,6 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { return true; } }); - - super.register(slimefun); } protected void tick(Block b) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java index 87ac9b391..e0d2774d4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java @@ -71,7 +71,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -88,8 +88,6 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl return true; } }); - - super.register(slimefun); } protected void tick(Block b) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java index b1bd79961..9f334880b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java @@ -71,7 +71,7 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -88,8 +88,6 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { return true; } }); - - super.register(slimefun); } protected void tick(Block b) throws Exception { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java index 49fdf68ec..8ac0a250f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java @@ -172,7 +172,7 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem implements I } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -185,8 +185,6 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem implements I return false; } }); - - super.register(slimefun); } protected void tick(Block b) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java index c080ec1d3..493b2805b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java @@ -82,7 +82,7 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -99,8 +99,6 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve return true; } }); - - super.register(slimefun); } protected void tick(Block b) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java index 11ca83572..d4bd78166 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java @@ -36,7 +36,7 @@ public class EnergyRegulator extends SlimefunItem { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -49,8 +49,6 @@ public class EnergyRegulator extends SlimefunItem { EnergyNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); } }); - - super.register(slimefun); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java index 494f594e5..da7f5fb29 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java @@ -127,7 +127,7 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -140,8 +140,6 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { return true; } }); - - super.register(slimefun); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java index bef4a3c05..cf41b2a35 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java @@ -117,7 +117,7 @@ public abstract class HeatedPressureChamber extends AContainer { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -130,8 +130,6 @@ public abstract class HeatedPressureChamber extends AContainer { return false; } }); - - super.register(slimefun); } @Override diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java index 417a710e9..91f4633d7 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java @@ -179,7 +179,7 @@ public class WitherAssembler extends SlimefunItem { } @Override - public void register(boolean slimefun) { + public void preRegister() { addItemHandler(new BlockTicker() { @Override @@ -259,8 +259,6 @@ public class WitherAssembler extends SlimefunItem { return false; } }); - - super.register(slimefun); } public int getEnergyConsumption() { diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index 81bdc4773..e64d53b3b 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -1,14 +1,11 @@ package me.mrCookieSlime.Slimefun.listeners; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.Iterator; -import java.util.List; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -24,7 +21,6 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; @@ -78,28 +74,11 @@ public class DamageListener implements Listener { } } - if (item != null && item.getType() != null && item.getType() != Material.AIR) { + if (item != null && item.getType() != null && item.getType() != Material.AIR && Slimefun.hasUnlocked(p, item, true)) { for (ItemHandler handler : SlimefunItem.getHandlers("EntityKillHandler")) { if (((EntityKillHandler) handler).onKill(e, e.getEntity(), p, item)) return; } } - - if (!e.getEntity().getCanPickupItems() && Talisman.checkFor(e, SlimefunItem.getByID("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { - List extraDrops = new ArrayList<>(e.getDrops()); - - if (e.getEntity() instanceof ChestedHorse) { - for (ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) { - extraDrops.remove(invItem); - } - - //The chest is not included in getStorageContents() - extraDrops.remove(new ItemStack(Material.CHEST)); - } - - for (ItemStack drop: extraDrops) { - e.getDrops().add(drop); - } - } } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index e4136f4b3..4b0b9a7d6 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -25,6 +25,7 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.BrewerInventory; @@ -113,13 +114,14 @@ public class ItemListener implements Listener { e.setCancelled(true); } } + @EventHandler public void debug(PlayerInteractEvent e) { if (e.getAction() == Action.PHYSICAL || e.getHand() != EquipmentSlot.HAND) return; Player p = e.getPlayer(); - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.DEBUG_FISH, true) || SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInOffHand(), SlimefunItems.DEBUG_FISH, true)) { + if (SlimefunManager.isItemSimiliar(e.getItem(), SlimefunItems.DEBUG_FISH, true)) { e.setCancelled(true); if (p.isOp()) { switch (e.getAction()) { @@ -189,6 +191,15 @@ public class ItemListener implements Listener { } } } + + @EventHandler + public void onBucketUse(PlayerBucketEmptyEvent e) { + // Fix for placing water on player heads + Location l = e.getBlockClicked().getRelative(e.getBlockFace()).getLocation(); + if (BlockStorage.hasBlockInfo(l)) { + e.setCancelled(true); + } + } @EventHandler(priority = EventPriority.NORMAL) public void onRightClick(ItemUseEvent e) { @@ -199,16 +210,6 @@ public class ItemListener implements Listener { final Player p = e.getPlayer(); ItemStack item = e.getItem(); - // Fix for placing water on player heads - if (e.getParentEvent().getAction() == Action.RIGHT_CLICK_BLOCK && item != null && item.getType() == Material.WATER_BUCKET) { - Location water = e.getClickedBlock().getRelative(e.getParentEvent().getBlockFace()).getLocation(); - if ((p.getWorld().getBlockAt(water).getType() == Material.PLAYER_HEAD || p.getWorld().getBlockAt(water).getType() == Material.PLAYER_WALL_HEAD) && BlockStorage.hasBlockInfo(water)) { - e.setCancelled(true); - p.getWorld().getBlockAt(water).getState().update(true, false); - return; - } - } - if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { if (p.isSneaking()) SlimefunGuide.openSettings(p, item); else SlimefunGuide.openGuide(p, true); @@ -221,7 +222,7 @@ public class ItemListener implements Listener { if (p.isSneaking()) SlimefunGuide.openSettings(p, item); else p.chat("/sf cheat"); } - else if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.DEBUG_FISH, true) || SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInOffHand(), SlimefunItems.DEBUG_FISH, true)) { + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) { // Ignore the debug fish in here } else if (Slimefun.hasUnlocked(p, item, true)) { From 4651baf13fc78ed206be18b6535a1fcc7aa1e722 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 3 Sep 2019 16:44:59 +0200 Subject: [PATCH 08/34] Code Cleanup --- .../Objects/SlimefunItem/ExcludedTool.java | 1 + .../SlimefunItem/items/HerculesPickaxe.java | 41 +++++ .../SlimefunItem/items/HunterTalisman.java | 7 +- .../Objects/SlimefunItem/items/LumberAxe.java | 55 ++++++ .../items/PickaxeOfContainment.java | 61 +++++++ .../items/PickaxeOfVeinMining.java | 56 +++++++ .../SlimefunItem/items/SmeltersPickaxe.java | 50 ++++++ .../Slimefun/Setup/SlimefunSetup.java | 157 ++---------------- 8 files changed, 284 insertions(+), 144 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java index 06dba6a1e..2ac5f15cb 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java @@ -6,6 +6,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; +@Deprecated public class ExcludedTool extends SlimefunItem implements NotPlaceable { public ExcludedTool(Category category, ItemStack item, String id,RecipeType recipeType, ItemStack[] recipe) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java new file mode 100644 index 000000000..5d6bd4d7b --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java @@ -0,0 +1,41 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; + +public class HerculesPickaxe extends SimpleSlimefunItem { + + public HerculesPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public BlockBreakHandler getItemHandler() { + return (e, item, fortune, drops) -> { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) { + if (e.getBlock().getType() == Material.IRON_ORE) { + drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2)); + } + else if (e.getBlock().getType() == Material.GOLD_ORE) { + drops.add(new CustomItem(SlimefunItems.GOLD_DUST, 2)); + } + else { + for (ItemStack drop: e.getBlock().getDrops()) { + drops.add(new CustomItem(drop, drop.getAmount() * 2)); + } + } + return true; + } + else return false; + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java index 4c62a098c..0db06913d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java @@ -8,14 +8,13 @@ import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; public class HunterTalisman extends Talisman { - public HunterTalisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix) { - super(item, id, recipe, messageSuffix, 0); + public HunterTalisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance) { + super(item, id, recipe, consumable, cancelEvent, messageSuffix, chance); } @Override @@ -25,7 +24,7 @@ public class HunterTalisman extends Talisman { public EntityKillHandler getItemHandler() { return (e, entity, killer, item) -> { - if (Talisman.checkFor(e, SlimefunItem.getByID("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { + if (Talisman.checkFor(e, this) && !(e.getEntity() instanceof Player)) { if (!e.getEntity().getCanPickupItems()) { List extraDrops = new ArrayList<>(e.getDrops()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java new file mode 100644 index 000000000..67b763b92 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java @@ -0,0 +1,55 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action; +import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; +import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; + +public class LumberAxe extends SimpleSlimefunItem implements NotPlaceable { + + public LumberAxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public BlockBreakHandler getItemHandler() { + return (e, item, fortune, drops) -> { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), getItem(), true)) { + if (MaterialHelper.isLog( e.getBlock().getType())) { + List logs = new ArrayList<>(); + TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs); + + if (logs.contains(e.getBlock().getLocation())) logs.remove(e.getBlock().getLocation()); + for (Location b: logs) { + if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b, Action.BREAK_BLOCK)) { + b.getWorld().playEffect(b, Effect.STEP_SOUND, b.getBlock().getType()); + + for (ItemStack drop: b.getBlock().getDrops()) { + b.getWorld().dropItemNaturally(b, drop); + } + + b.getBlock().setType(Material.AIR); + } + } + } + return true; + } + else return false; + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java new file mode 100644 index 000000000..13c235d4c --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java @@ -0,0 +1,61 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.BlockStorage; + +public class PickaxeOfContainment extends SimpleSlimefunItem { + + public PickaxeOfContainment(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public BlockBreakHandler getItemHandler() { + return (e, item, fortune, drops) -> { + if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + // Refactored it into this so we don't need to call e.getBlock() all the time. + Block b = e.getBlock(); + if (b.getType() != Material.SPAWNER) return true; + + // If the spawner's BlockStorage has BlockInfo, then it's not a vanilla spawner and shouldn't give a broken spawner. + ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone(); + if (BlockStorage.hasBlockInfo(b)) { + spawner = SlimefunItems.REPAIRED_SPAWNER.clone(); + } + + ItemMeta im = spawner.getItemMeta(); + List lore = im.getLore(); + + for (int i = 0; i < lore.size(); i++) { + if (lore.get(i).contains("")) lore.set(i, lore.get(i).replace("", StringUtils.format(((CreatureSpawner) b.getState()).getSpawnedType().toString()))); + } + + im.setLore(lore); + spawner.setItemMeta(im); + b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner); + e.setExpToDrop(0); + e.setDropItems(false); + return true; + } + else { + if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false); + return false; + } + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java new file mode 100644 index 000000000..58353ddb9 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java @@ -0,0 +1,56 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action; +import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; + +public class PickaxeOfVeinMining extends SimpleSlimefunItem { + + public PickaxeOfVeinMining(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public BlockBreakHandler getItemHandler() { + return (e, item, fortune, drops) -> { + if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + if (e.getBlock().getType().toString().endsWith("_ORE")) { + List blocks = new ArrayList<>(); + Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16); + + for (Location block: blocks) { + if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), block, Action.BREAK_BLOCK)) { + Block b = block.getBlock(); + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); + + for (ItemStack drop: b.getDrops()) { + b.getWorld().dropItemNaturally(b.getLocation(), drop.getType().isBlock() ? drop: new CustomItem(drop, fortune)); + } + + b.setType(Material.AIR); + } + } + } + + return true; + } + else return false; + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java new file mode 100644 index 000000000..9309af0d4 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java @@ -0,0 +1,50 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.List; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.BlockStorage; + +public class SmeltersPickaxe extends SimpleSlimefunItem { + + public SmeltersPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public BlockBreakHandler getItemHandler() { + return (e, item, fortune, drops) -> { + if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + if (BlockStorage.hasBlockInfo(e.getBlock())) return true; + if (e.getBlock().getType() == Material.PLAYER_HEAD) return true; + + int j = -1; + List dropsList = (List) e.getBlock().getDrops(); + for (int i = 0; i < dropsList.size(); i++) { + if (dropsList.get(i) != null) { + j++; + drops.add(e.getBlock().getType().toString().endsWith("_ORE") ? new CustomItem(dropsList.get(i), fortune): dropsList.get(i)); + if (RecipeCalculator.getSmeltedOutput(drops.get(i).getType()) != null) { + e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + drops.set(j, new CustomItem(RecipeCalculator.getSmeltedOutput(drops.get(i).getType()), drops.get(i).getAmount())); + } + } + } + + return true; + } + else return false; + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index f81937003..32ccae43c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -26,31 +26,24 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; -import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; -import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator; -import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler; import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow; import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory; -import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator; -import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.GPS.Elevator; @@ -65,7 +58,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Alloy; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.EnhancedFurnace; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedSoulboundTool; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedTool; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; @@ -96,13 +88,19 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosivePickaxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosiveShovel; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GoldPan; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GrapplingHook; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HerculesPickaxe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HunterTalisman; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.InfernalBonemeal; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeFlask; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeTome; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.LumberAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll; @@ -153,7 +151,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.OreWasher; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.PressureChamber; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Smeltery; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.TableSaw; -import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler; @@ -775,34 +772,9 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.RUNE_LIGHTNING, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_LIGHTNING, SlimefunItems.STAFF_WATER, SlimefunItems.MAGIC_SUGAR, SlimefunItems.STAFF_WIND, SlimefunItems.RUNE_LIGHTNING, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_LIGHTNING}) .register(true); - new SlimefunItem(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, + new SmeltersPickaxe(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.AUTO_SMELT_PICKAXE, true)) { - if (BlockStorage.hasBlockInfo(e.getBlock())) return true; - if (e.getBlock().getType() == Material.PLAYER_HEAD) return true; - - int j = -1; - List dropsList = (List) e.getBlock().getDrops(); - for (int i = 0; i < dropsList.size(); i++) { - if (dropsList.get(i) != null) { - j++; - drops.add(e.getBlock().getType().toString().endsWith("_ORE") ? new CustomItem(dropsList.get(i), fortune): dropsList.get(i)); - if (RecipeCalculator.getSmeltedOutput(drops.get(i).getType()) != null) { - e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - drops.set(j, new CustomItem(RecipeCalculator.getSmeltedOutput(drops.get(i).getType()), drops.get(i).getAmount())); - } - } - } - - return true; - } - else return false; - } - }); + .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.TALISMAN, "COMMON_TALISMAN", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}, @@ -819,7 +791,7 @@ public final class SlimefunSetup { false, false, "miner", 20) .register(true); - new Talisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN", + new HunterTalisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN", new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, false, false, "hunter", 20) .register(true); @@ -884,33 +856,9 @@ public final class SlimefunSetup { false, false, "wizard", 60) .register(true); - new ExcludedTool(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH, + new LumberAxe(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_DIAMOND, null, SlimefunItems.SYNTHETIC_EMERALD, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.LUMBER_AXE, true)) { - if (MaterialHelper.isLog( e.getBlock().getType())) { - List logs = new ArrayList<>(); - TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs); - - if (logs.contains(e.getBlock().getLocation())) logs.remove(e.getBlock().getLocation()); - for (Location b: logs) { - if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b.getBlock())) { - b.getWorld().playEffect(b, Effect.STEP_SOUND, b.getBlock().getType()); - for (ItemStack drop: b.getBlock().getDrops()) { - b.getWorld().dropItemNaturally(b, drop); - } - b.getBlock().setType(Material.AIR); - } - } - } - return true; - } - else return false; - } - }); + .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.SALT, "SALT", RecipeType.ORE_WASHER, new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null}) @@ -1090,63 +1038,13 @@ public final class SlimefunSetup { new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 20)}) .register(true); - new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH, + new PickaxeOfContainment(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) - .register(true, new BlockBreakHandler() { + .register(true); - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { - // Refactored it into this so we don't need to call e.getBlock() all the time. - Block b = e.getBlock(); - if (b.getType() != Material.SPAWNER) return true; - - // If the spawner's BlockStorage has BlockInfo, then it's not a vanilla spawner and shouldn't give a broken spawner. - ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone(); - if (BlockStorage.hasBlockInfo(b)) { - spawner = SlimefunItems.REPAIRED_SPAWNER.clone(); - } - - ItemMeta im = spawner.getItemMeta(); - List lore = im.getLore(); - - for (int i = 0; i < lore.size(); i++) { - if (lore.get(i).contains("")) lore.set(i, lore.get(i).replace("", StringUtils.format(((CreatureSpawner) b.getState()).getSpawnedType().toString()))); - } - - im.setLore(lore); - spawner.setItemMeta(im); - b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner); - e.setExpToDrop(0); - e.setDropItems(false); - return true; - } - else { - if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false); - return false; - } - } - }); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH, + new HerculesPickaxe(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) { - if (e.getBlock().getType() == Material.IRON_ORE) drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2)); - else if (e.getBlock().getType() == Material.GOLD_ORE) drops.add(new CustomItem(SlimefunItems.GOLD_DUST, 2)); - else { - for (ItemStack drop: e.getBlock().getDrops()) { - drops.add(new CustomItem(drop, 2)); - } - } - return true; - } - else return false; - } - }); + .register(true); new TableSaw().register(); @@ -1496,30 +1394,9 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.STAFF_ELEMENTAL, null, null, SlimefunItems.STAFF_ELEMENTAL, null}) .register(true); - new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH, + new PickaxeOfVeinMining(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {new ItemStack(Material.EMERALD_ORE), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.EMERALD_ORE), null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_VEIN_MINING, true)) { - if (e.getBlock().getType().toString().endsWith("_ORE")) { - List blocks = new ArrayList<>(); - Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16); - for (Location block: blocks) { - Block b = block.getBlock(); - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); - for (ItemStack drop: b.getDrops()) { - b.getWorld().dropItemNaturally(b.getLocation(), drop.getType().isBlock() ? drop: new CustomItem(drop, fortune)); - } - b.setType(Material.AIR); - } - } - return true; - } - else return false; - } - }); + .register(true); new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_SWORD, "SOULBOUND_SWORD", new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SWORD), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) From 2a8c6265b04137dd6c77eb038736abbaf6996209 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Tue, 3 Sep 2019 20:25:59 +0300 Subject: [PATCH 09/34] Added Soulbound Rune. - Added Soulbound Rune with a research and recipe. - Did the requested changes. - Moved isSoulbound check from DamageListener.java to SlimefunManager.java. - Added a new ItemHandler called ItemDropHandler. --- .../Slimefun/Objects/SlimefunItem/items/SoulboundRune.java | 4 ++++ .../Slimefun/Objects/handlers/ItemDropHandler.java | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java new file mode 100644 index 000000000..29ad507c9 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -0,0 +1,4 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +public class SoulboundRune { +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java new file mode 100644 index 000000000..4e07eef22 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java @@ -0,0 +1,4 @@ +package me.mrCookieSlime.Slimefun.Objects.handlers; + +public interface ItemDropHandler { +} From 7501dc9afbb4f32c5706ab692626d8a8c9efd672 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Tue, 3 Sep 2019 20:30:58 +0300 Subject: [PATCH 10/34] Actual commit adding the Soulbound Rune. - Added Soulbound Rune with a research and recipe. - Did the requested changes. - Moved isSoulbound check from DamageListener.java to SlimefunManager.java. - Added a new ItemHandler called ItemDropHandler. --- .../Slimefun/Lists/SlimefunItems.java | 14 ++- .../SlimefunItem/items/SoulboundRune.java | 116 +++++++++++++++++- .../Objects/handlers/ItemDropHandler.java | 13 +- .../Slimefun/Setup/Messages.java | 2 + .../Slimefun/Setup/ResearchSetup.java | 1 + .../Slimefun/Setup/SlimefunManager.java | 46 ++++++- .../Slimefun/Setup/SlimefunSetup.java | 5 + .../Slimefun/listeners/DamageListener.java | 30 +---- .../Slimefun/listeners/ItemListener.java | 9 ++ 9 files changed, 198 insertions(+), 38 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 9096d7832..0ea50cc93 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -531,6 +531,7 @@ public final class SlimefunItems { public static final ItemStack RUNE_ENDER; public static final ItemStack RUNE_RAINBOW; public static final ItemStack RUNE_LIGHTNING; + public static final ItemStack RUNE_SOULBOUND; static { ItemStack itemB = new ItemStack(Material.FIREWORK_STAR); @@ -563,7 +564,7 @@ public final class SlimefunItems { ItemStack itemE = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imE = (FireworkEffectMeta) itemE.getItemMeta(); - imE.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.ORANGE).build()); + imE.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(112, 47, 7)).build()); imE.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&c&lEarth&8&l]")); itemE.setItemMeta(imE); RUNE_EARTH = itemE; @@ -577,17 +578,24 @@ public final class SlimefunItems { ItemStack itemR = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imR = (FireworkEffectMeta) itemR.getItemMeta(); - imR.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.PURPLE).build()); + imR.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.FUCHSIA).build()); imR.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&d&lRainbow&8&l]")); itemR.setItemMeta(imR); RUNE_RAINBOW = itemR; ItemStack itemL = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imL = (FireworkEffectMeta) itemL.getItemMeta(); - imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.YELLOW).build()); + imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(255, 255, 95)).build()); imL.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&e&lLightning&8&l]")); itemL.setItemMeta(imL); RUNE_LIGHTNING = itemL; + + ItemStack itemS = new ItemStack(Material.FIREWORK_STAR); + FireworkEffectMeta imS = (FireworkEffectMeta) itemS.getItemMeta(); + imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build()); + imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); + itemS.setItemMeta(imS); + RUNE_SOULBOUND = itemS; } /* Electricity */ diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 29ad507c9..56450dcc7 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -1,4 +1,118 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; -public class SoulboundRune { +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.Research; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; +import me.mrCookieSlime.Slimefun.Setup.Messages; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class SoulboundRune extends SimpleSlimefunItem { + + public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { + super(category, item, id, type, recipe); + } + + @Override + public ItemDropHandler getItemHandler() { + return (e, p, i) -> { + ItemStack item = i.getItemStack(); + // We are using a boolean array because we will change the boolean's value inside a lambda + // but you can't access non-final variables from outside the lambda inside the lambda. + final boolean[] boo = {false}; + + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { + if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(Research.getByID(246))) { + Messages.local.sendTranslation(p, "messages.not-researched", true); + return true; + } + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + // Being sure the entity is still valid and not picked up or whatsoever. + if (!i.isValid()) return; + + Location l = i.getLocation(); + Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5, + entity -> entity.getType() == EntityType.DROPPED_ITEM && + !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) + ); + + ItemStack ench = null; + Item ent = null; + // Collections do not have a #get method so we need to use a for loop. + // We do not use streams for foreach loops as they are more resource consuming. + for (Entity entity: entites) { + ItemStack dropped = ((Item) entity).getItemStack(); + if (SlimefunManager.isItemSoulbound(dropped)) { + boo[0] = false; + return; + } + ench = ((Item) entity).getItemStack(); + ent = (Item) entity; + break; + } + + if (ench == null || ench.getAmount() == 1) { + e.setCancelled(true); + + Item finalEnt = ent; + ItemStack finalEnch = ench; + + ItemMeta enchMeta = finalEnch.getItemMeta(); + if (enchMeta == null) enchMeta = Bukkit.getItemFactory().getItemMeta(finalEnch.getType()); + ItemMeta finalMeta = enchMeta; + + List lore = finalMeta.getLore(); + if (lore == null) lore = new ArrayList<>(); + List finalLore = lore; + + // This lightning is just an effect, it deals no damage. + l.getWorld().strikeLightningEffect(l); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + + // Being sure entities are still valid and not picked up or whatsoever. + if (i.isValid() && finalEnt.isValid()) { + + l.getWorld().createExplosion(l, 0.0F); + l.getWorld().playSound(l, Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); + + finalLore.add(ChatColor.GRAY + "Soulbound"); + + finalMeta.setLore(finalLore); + finalEnch.setItemMeta(finalMeta); + + finalEnt.remove(); + i.remove(); + l.getWorld().dropItemNaturally(l, finalEnch); + + Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); + boo[0] = true; + } + }, 10L); + } else { + Messages.local.sendTranslation(p, "messages.soulbound-rune.fail", true); + } + }, 20L); + } + return boo[0]; + }; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java index 4e07eef22..ed1913840 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java @@ -1,4 +1,15 @@ package me.mrCookieSlime.Slimefun.Objects.handlers; -public interface ItemDropHandler { +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerDropItemEvent; + +@FunctionalInterface +public interface ItemDropHandler extends ItemHandler { + + boolean onItemDrop(PlayerDropItemEvent e, Player p, Item item); + + default String toCodename() { + return "ItemDropHandler"; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java index 718f24b9f..b5ebfa34c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java @@ -56,6 +56,8 @@ public final class Messages { local.setDefault("messages.talisman.knight", "&a&oYour Talisman gave you 5 Seconds of Regeneration"); local.setDefault("messages.talisman.whirlwind", "&a&oYour Talisman reflected the Projectile"); local.setDefault("messages.talisman.wizard", "&a&oYour Talisman has given you a better Fortune Level but maybe also lowered some other Enchantment Levels"); + local.setDefault("messages.soulbound-rune.fail", "&cYou can only enchant 1 item with soulbound at a time."); + local.setDefault("messages.soulbound-rune.success", "&aSuccessfully soulbound enchanted this item."); local.setDefault("messages.broken-leg", "&c&oSeems like you broke your Leg, maybe a Splint could help?"); local.setDefault("messages.fixed-leg", "&a&oThe Splint helps. It feels better now."); local.setDefault("messages.start-bleeding", "&c&oYou started to bleed. Maybe a Bandage could help?"); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index a8bbd7377..195947c07 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -243,5 +243,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(243, "A Dry Day", 15), SlimefunItems.AUTO_DRIER); Slimefun.registerResearch(new Research(244, "Diet Cookie", 3), SlimefunItems.DIET_COOKIE); Slimefun.registerResearch(new Research(245, "Storm Staff", 30), SlimefunItems.STAFF_STORM); + Slimefun.registerResearch(new Research(246, "Soulbound Rune", 60), SlimefunItems.RUNE_SOULBOUND); } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index f05aa753d..b1e3ada80 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -3,15 +3,24 @@ package me.mrCookieSlime.Slimefun.Setup; import java.util.ArrayList; import java.util.List; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; +import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants; +import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; public final class SlimefunManager { @@ -116,14 +125,41 @@ public final class SlimefunManager { } private static boolean equalsLore(List lore, List lore2) { - String string1 = ""; - String string2 = ""; + StringBuilder string1 = new StringBuilder(); + StringBuilder string2 = new StringBuilder(); + String colors = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString(); for (String string: lore) { - if (!string.startsWith("&e&e&7")) string1 = string1 + "-NEW LINE-" + string; + if (string.equals(ChatColor.GRAY + "Soulbound")) continue; + if (!string.startsWith(colors)) string1.append("-NEW LINE-").append(string); } for (String string: lore2) { - if (!string.startsWith("&e&e&7")) string2 = string2 + "-NEW LINE-" + string; + if (string.equals(ChatColor.GRAY + "Soulbound")) continue; + if (!string.startsWith(colors)) string2.append("-NEW LINE-").append(string); + } + return string1.toString().equals(string2.toString()); + } + + public static boolean isItemSoulbound(ItemStack item) { + if (item == null || item.getType() == Material.AIR) return false; + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) return true; + else { + ItemStack strippedItem = item.clone(); + + for (Enchantment enchantment : item.getEnchantments().keySet()) { + strippedItem.removeEnchantment(enchantment); + } + + if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) { + for (ItemEnchantment enchantment : EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)){ + EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0); + } + } + if (SlimefunItem.getByItem(strippedItem) instanceof SoulboundItem) return true; + else if (item.hasItemMeta()) { + ItemMeta im = item.getItemMeta(); + return (im.hasLore() && im.getLore().contains(ChatColor.GRAY + "Soulbound")); + } + return false; } - return string1.equals(string2); } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 32ccae43c..9795d1277 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -101,6 +101,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SoulboundRune; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll; @@ -2892,6 +2893,10 @@ public final class SlimefunSetup { new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.CYAN_DYE), new ItemStack(Material.WHITE_WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.YELLOW_DYE), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.MAGENTA_DYE)}) .register(true); + new SoulboundRune(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_SOULBOUND, "ANCIENT_RUNE_SOULBOUND", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ENDER_PEARL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.ENDER_PEARL), SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3}) + .register(true); + new InfernalBonemeal(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.NETHER_WART), SlimefunItems.RUNE_EARTH, new ItemStack(Material.NETHER_WART), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.BONE_MEAL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.NETHER_WART), new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.NETHER_WART)}, new CustomItem(SlimefunItems.INFERNAL_BONEMEAL, 8)) .register(true); diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index e64d53b3b..98bbcf78c 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -5,7 +5,6 @@ import java.util.Date; import java.util.Iterator; import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,12 +14,9 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants; -import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; @@ -49,7 +45,7 @@ public class DamageListener implements Listener { for (int slot = 0; slot < p.getInventory().getSize(); slot++) { ItemStack item = p.getInventory().getItem(slot); - if (isSoulbound(item)) { + if (SlimefunManager.isItemSoulbound(item)) { Soul.storeItem(p.getUniqueId(), slot, item); } } @@ -57,7 +53,7 @@ public class DamageListener implements Listener { Iterator drops = e.getDrops().iterator(); while (drops.hasNext()) { ItemStack item = drops.next(); - if (isSoulbound(item)) drops.remove(); + if (SlimefunManager.isItemSoulbound(item)) drops.remove(); } } @@ -82,13 +78,6 @@ public class DamageListener implements Listener { } } - private boolean isSoulbound(ItemStack item) { - if (item == null || item.getType() == null || item.getType() == Material.AIR) return false; - else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) return true; - else if (SlimefunItem.getByItem(removeEnchantments(item)) instanceof SoulboundItem) return true; - else return false; - } - @EventHandler public void onArrowHit(EntityDamageEvent e) { if (e.getEntity() instanceof Player && e.getCause() == DamageCause.FALL && utilities.damage.contains(e.getEntity().getUniqueId())) { @@ -101,19 +90,4 @@ public class DamageListener implements Listener { public void onRespawn(PlayerRespawnEvent e) { Soul.retrieveItems(e.getPlayer()); } - - private ItemStack removeEnchantments(ItemStack itemStack) { - ItemStack strippedItem = itemStack.clone(); - - for (Enchantment enchantment : itemStack.getEnchantments().keySet()) { - strippedItem.removeEnchantment(enchantment); - } - - if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) { - for(ItemEnchantment enchantment : EmeraldEnchants.getInstance().getRegistry().getEnchantments(itemStack)){ - EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0); - } - } - return strippedItem; - } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 4b0b9a7d6..8aa809e56 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -26,6 +26,7 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.BrewerInventory; @@ -47,6 +48,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Setup.Messages; @@ -440,4 +442,11 @@ public class ItemListener implements Listener { if (inventory instanceof BrewerInventory && inventory.getHolder() instanceof BrewingStand && e.getRawSlot() < inventory.getSize()) e.setCancelled(SlimefunItem.getByItem(e.getCursor()) != null); } + @EventHandler + public void onItemDrop(PlayerDropItemEvent e) { + for (ItemHandler handler : SlimefunItem.getHandlers("ItemDropHandler")) { + if (((ItemDropHandler) handler).onItemDrop(e, e.getPlayer(), e.getItemDrop())) return; + } + } + } From a1a3ee68ef7216fe269c1b50606f1e30aeefdd48 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 3 Sep 2019 20:35:21 +0200 Subject: [PATCH 11/34] Added Tier 2 Coal and Lava Generators --- .../Slimefun/Lists/SlimefunItems.java | 14 +- .../SlimefunItem/cargo/CargoManagerBlock.java | 66 ++++ .../machines/electric/CarbonPress.java | 10 +- .../electric/ElectricIngotFactory.java | 10 + .../machines/electric/ElectricOreGrinder.java | 32 ++ .../machines/electric/ElevatorPlate.java | 52 +++ .../machines/electric/FoodComposter.java | 11 + .../machines/electric/FoodFabricator.java | 16 +- .../machines/electric/Freezer.java | 10 + .../electric/generators/CoalGenerator.java | 46 +++ .../generators/CombustionGenerator.java | 34 ++ .../electric/generators/LavaGenerator.java | 32 ++ .../Slimefun/Setup/SlimefunSetup.java | 363 +++--------------- 13 files changed, 374 insertions(+), 322 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 9096d7832..cc02ae1c6 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -8,8 +8,8 @@ import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Type; -import org.bukkit.enchantments.Enchantment; import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.FireworkEffectMeta; import org.bukkit.potion.PotionEffect; @@ -486,8 +486,13 @@ public final class SlimefunItems { public static final ItemStack SOLAR_PANEL = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Panel", "", "&a&oTransforms Sunlight to Energy"); public static final ItemStack SOLAR_ARRAY = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Array", "", "&a&oTransforms Sunlight to Energy"); - public static final ItemStack DIGITAL_MINER = new CustomItem(Material.IRON_PICKAXE, "&bDigital Miner", "", "&a&oDigs out everything!"); - public static final ItemStack ADVANCED_DIGITAL_MINER = new CustomItem(Material.DIAMOND_PICKAXE, "&6Advanced Digital Miner", "", "&a&oDigs out everything!", "&a&oAutomatically crushes your Ores"); + + @Deprecated + public static final ItemStack DIGITAL_MINER = new CustomItem(Material.IRON_PICKAXE, "&bDigital Miner", "", "&4DEPRECATED", "&cThis machine will soon be removed!"); + + @Deprecated + public static final ItemStack ADVANCED_DIGITAL_MINER = new CustomItem(Material.DIAMOND_PICKAXE, "&6Advanced Digital Miner", "", "&4DEPRECATED", "&cThis machine will soon be removed!"); + public static final ItemStack AUTOMATED_PANNING_MACHINE = new CustomItem(Material.BOWL, "&aAutomated Panning Machine", "", "&a&oA MultiBlock Version of the Gold Pan"); public static final ItemStack OUTPUT_CHEST = new CustomItem(Material.CHEST, "&4Output Chest", "", "&c&oA basic machine will try to put", "&c&oitems in this chest if it's placed", "&c&oadjacent to the dispenser."); public static final ItemStack HOLOGRAM_PROJECTOR = new CustomItem(Material.QUARTZ_SLAB, "&bHologram Projector", "", "&rProjects an Editable Hologram"); @@ -597,7 +602,10 @@ public final class SlimefunItems { public static final ItemStack SOLAR_GENERATOR_4 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&eEnergized Solar Generator", "", "&9Works at Night", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &7256 J/s (Day)", "&8\u21E8 &e\u26A1 &7128 J/s (Night)"); public static final ItemStack COAL_GENERATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &764 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s"); + public static final ItemStack COAL_GENERATOR_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator &7(&eII&7)", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s"); + public static final ItemStack LAVA_GENERATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s"); + public static final ItemStack LAVA_GENERATOR_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator &7&eII&7)", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &740 J/s"); public static final ItemStack ELECTRIC_FURNACE = new CustomItem(Material.FURNACE, "&cElectric Furnace", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &74 J/s"); public static final ItemStack ELECTRIC_FURNACE_2 = new CustomItem(Material.FURNACE, "&cElectric Furnace &7- &eII", "", "&aMedium Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &76 J/s"); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java new file mode 100644 index 000000000..817715d95 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java @@ -0,0 +1,66 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo; + +import org.bukkit.ChatColor; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; +import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; +import me.mrCookieSlime.Slimefun.holograms.CargoHologram; + +public class CargoManagerBlock extends SlimefunItem { + + public CargoManagerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + + SlimefunItem.registerBlockHandler("CARGO_MANAGER", (p, b, tool, reason) -> { + CargoHologram.remove(b); + return true; + }); + } + + @Override + public void preRegister() { + addItemHandler(new BlockTicker() { + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); + } + + @Override + public boolean isSynchronized() { + return false; + } + + }, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + String item = BlockStorage.checkID(e.getClickedBlock()); + if (item == null || !item.equals(getID())) return false; + e.setCancelled(true); + + if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "visualizer") == null) { + BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", "disabled"); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718")); + } + else { + BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", null); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714")); + } + return true; + } + }); + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java index 483946cbb..831200b03 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java @@ -31,6 +31,14 @@ public abstract class CarbonPress extends AContainer implements RecipeDisplayIte return "CARBON_PRESS"; } - + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&cCarbon Press"; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java index e4d891d36..ee0c76b9c 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java @@ -33,5 +33,15 @@ public abstract class ElectricIngotFactory extends AContainer implements RecipeD public String getMachineIdentifier() { return "ELECTRIC_INGOT_FACTORY"; } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cElectric Ingot Factory"; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java new file mode 100644 index 000000000..f2439dcd4 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java @@ -0,0 +1,32 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; + +public abstract class ElectricOreGrinder extends AContainer implements RecipeDisplayItem { + + public ElectricOreGrinder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, name, recipeType, recipe); + } + + @Override + public String getMachineIdentifier() { + return "ELECTRIC_ORE_GRINDER"; + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.IRON_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&bElectric Ore Grinder"; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java new file mode 100644 index 000000000..5a08dceca --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java @@ -0,0 +1,52 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.GPS.Elevator; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.api.BlockStorage; + +public class ElevatorPlate extends SimpleSlimefunItem { + + public ElevatorPlate(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, id, recipeType, recipe, recipeOutput); + + SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "floor", "&rFloor #0"); + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + return true; + } + }); + } + + @Override + public ItemInteractionHandler getItemHandler() { + return (e, p, item) -> { + if (e.getClickedBlock() == null) return false; + String id = BlockStorage.checkID(e.getClickedBlock()); + if (id == null || !id.equals(getID())) return false; + + if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) { + Elevator.openEditor(p, e.getClickedBlock()); + } + + return true; + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java index aab8479c8..962d9738b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java @@ -1,5 +1,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; @@ -29,5 +30,15 @@ public abstract class FoodComposter extends AContainer implements RecipeDisplayI public String getMachineIdentifier() { return "FOOD_COMPOSTER"; } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLDEN_HOE); + } + + @Override + public String getInventoryTitle() { + return "&cFood Composter"; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java index eea001c0b..bdd210f5f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java @@ -1,13 +1,13 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - public abstract class FoodFabricator extends AContainer { public FoodFabricator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { @@ -28,5 +28,15 @@ public abstract class FoodFabricator extends AContainer { public String getMachineIdentifier() { return "FOOD_FABRICATOR"; } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLDEN_HOE); + } + + @Override + public String getInventoryTitle() { + return "&cFood Fabricator"; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java index 946c2b7d4..d0fc50fba 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java @@ -40,6 +40,16 @@ public abstract class Freezer extends AContainer implements RecipeDisplayItem { return displayRecipes; } + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLDEN_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&bFreezer"; + } + @Override public String getMachineIdentifier() { return "FREEZER"; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java new file mode 100644 index 000000000..11db7221d --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java @@ -0,0 +1,46 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators; + +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; + +public abstract class CoalGenerator extends AGenerator { + + public CoalGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(8, new ItemStack(Material.COAL))); + registerFuel(new MachineFuel(8, new ItemStack(Material.CHARCOAL))); + registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK))); + registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD))); + + // Logs + for (Material mat: Tag.LOGS.getValues()) { + registerFuel(new MachineFuel(2, new ItemStack(mat))); + } + + // Wooden Planks + for (Material mat: Tag.PLANKS.getValues()) { + registerFuel(new MachineFuel(1, new ItemStack(mat))); + } + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cCoal Generator"; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java new file mode 100644 index 000000000..080e9bc86 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java @@ -0,0 +1,34 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; + +public abstract class CombustionGenerator extends AGenerator { + + public CombustionGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(30, SlimefunItems.BUCKET_OF_OIL)); + registerFuel(new MachineFuel(90, SlimefunItems.BUCKET_OF_FUEL)); + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cCombustion Reactor"; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java new file mode 100644 index 000000000..a6705e8f9 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java @@ -0,0 +1,32 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; + +public abstract class LavaGenerator extends AGenerator { + + public LavaGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(40, new ItemStack(Material.LAVA_BUCKET))); + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&4Lava Generator"; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 32ccae43c..bce313dad 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -46,7 +46,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow; import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.GPS.Elevator; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.GPS.NetworkStatus; import me.mrCookieSlime.Slimefun.Lists.Categories; @@ -75,13 +74,13 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.AdvancedCargoOutputNode; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoInputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoManagerBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoOutputNode; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.DietCookie; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosivePickaxe; @@ -127,8 +126,10 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Electric import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricGoldPan; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricIngotFactory; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricIngotPulverizer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricOreGrinder; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricSmeltery; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectrifiedCrucible; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElevatorPlate; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.EnergyRegulator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FluidPump; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FoodComposter; @@ -139,6 +140,9 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.NetherDr import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.OilPump; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Refinery; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.WitherAssembler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CoalGenerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CombustionGenerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.LavaGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.ArmorForge; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.AutomatedPanningMachine; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Compressor; @@ -166,7 +170,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker; import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; -import me.mrCookieSlime.Slimefun.holograms.CargoHologram; import me.mrCookieSlime.Slimefun.holograms.ReactorHologram; public final class SlimefunSetup { @@ -1002,8 +1005,8 @@ public final class SlimefunSetup { if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2)); p.setFireTicks(0); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2)); e.setCancelled(true); return true; } @@ -1101,6 +1104,7 @@ public final class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) { + p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!"); if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { Block chestBlock = b.getRelative(BlockFace.UP); @@ -1158,6 +1162,7 @@ public final class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) { + p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!"); if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { Block chestBlock = b.getRelative(BlockFace.UP); @@ -2012,17 +2017,7 @@ public final class SlimefunSetup { new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY, "ELECTRIC_INGOT_FACTORY", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.FLINT_AND_STEEL), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - + @Override public int getEnergyConsumption() { return 4; @@ -2038,16 +2033,6 @@ public final class SlimefunSetup { new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, "ELECTRIC_INGOT_FACTORY_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.BRASS_INGOT}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - @Override public int getEnergyConsumption() { return 7; @@ -2063,16 +2048,6 @@ public final class SlimefunSetup { new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, "ELECTRIC_INGOT_FACTORY_3", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.BRASS_INGOT}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - @Override public int getEnergyConsumption() { return 20; @@ -2130,19 +2105,9 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricOreGrinder(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.STONE_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Ore Grinder"; - } - @Override public int getEnergyConsumption() { return 6; @@ -2153,26 +2118,11 @@ public final class SlimefunSetup { return 1; } - @Override - public String getMachineIdentifier() { - return "ELECTRIC_ORE_GRINDER"; - } - }.registerChargeableBlock(true, 128); - new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricOreGrinder(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Ore Grinder"; - } - @Override public int getEnergyConsumption() { return 15; @@ -2183,21 +2133,11 @@ public final class SlimefunSetup { return 4; } - @Override - public String getMachineIdentifier() { - return "ELECTRIC_ORE_GRINDER"; - } - }.registerChargeableBlock(true, 512); new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER, "HEATED_PRESSURE_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, new ItemStack(Material.GLASS), SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - + @Override public int getEnergyConsumption() { return 5; @@ -2213,11 +2153,6 @@ public final class SlimefunSetup { new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER_2, "HEATED_PRESSURE_CHAMBER_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - @Override public int getEnergyConsumption() { return 22; @@ -2234,43 +2169,9 @@ public final class SlimefunSetup { new ItemStack[] {null, SlimefunItems.ELECTRIC_ORE_GRINDER, null, SlimefunItems.LEAD_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) .registerChargeableBlock(true, 512); - new AGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new CoalGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, SlimefunItems.NICKEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.NICKEL_INGOT, null, SlimefunItems.NICKEL_INGOT, null}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(8, new ItemStack(Material.COAL))); - registerFuel(new MachineFuel(8, new ItemStack(Material.CHARCOAL))); - registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK))); - registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD))); - - // Logs - registerFuel(new MachineFuel(1, new ItemStack(Material.OAK_LOG))); - registerFuel(new MachineFuel(1, new ItemStack(Material.SPRUCE_LOG))); - registerFuel(new MachineFuel(1, new ItemStack(Material.BIRCH_LOG))); - registerFuel(new MachineFuel(1, new ItemStack(Material.JUNGLE_LOG))); - registerFuel(new MachineFuel(1, new ItemStack(Material.ACACIA_LOG))); - registerFuel(new MachineFuel(1, new ItemStack(Material.DARK_OAK_LOG))); - - // Wooden Planks - registerFuel(new MachineFuel(1, new ItemStack(Material.OAK_WOOD))); - registerFuel(new MachineFuel(1, new ItemStack(Material.SPRUCE_WOOD))); - registerFuel(new MachineFuel(1, new ItemStack(Material.BIRCH_WOOD))); - registerFuel(new MachineFuel(1, new ItemStack(Material.JUNGLE_WOOD))); - registerFuel(new MachineFuel(1, new ItemStack(Material.ACACIA_WOOD))); - registerFuel(new MachineFuel(1, new ItemStack(Material.DARK_OAK_WOOD))); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cCoal Generator"; - } - + @Override public int getEnergyProduction() { return 8; @@ -2278,6 +2179,16 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 64); + new CoalGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR_2, "COAL_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.MAGMA_BLOCK), SlimefunItems.HEATING_COIL, new ItemStack(Material.MAGMA_BLOCK), SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.COAL_GENERATOR, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public int getEnergyProduction() { + return 15; + } + + }.registerUnrechargeableBlock(true, 256); + new AGenerator(Categories.ELECTRICITY, SlimefunItems.BIO_REACTOR, "BIO_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.HEATING_COIL, SlimefunItems.COMPOSTER, SlimefunItems.HEATING_COIL, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}) { @@ -3043,24 +2954,9 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new AGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new LavaGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.GOLD_16K, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(40, new ItemStack(Material.LAVA_BUCKET))); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&4Lava Generator"; - } - + @Override public int getEnergyProduction() { return 10; @@ -3068,25 +2964,19 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 512); - new AGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new LavaGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR_2, "LAVA_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.LAVA_GENERATOR, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.HEATING_COIL}) { + + @Override + public int getEnergyProduction() { + return 20; + } + + }.registerUnrechargeableBlock(true, 1024); + + new CombustionGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(30, SlimefunItems.BUCKET_OF_OIL)); - registerFuel(new MachineFuel(90, SlimefunItems.BUCKET_OF_FUEL)); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cCombustion Reactor"; - } - + @Override public int getEnergyProduction() { return 12; @@ -3150,49 +3040,14 @@ public final class SlimefunSetup { new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElevatorPlate(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.STONE_PRESSURE_PLATE), null, new ItemStack(Material.PISTON), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON), SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT}, new CustomItem(SlimefunItems.ELEVATOR, 2)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(final ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - String item = BlockStorage.checkID(e.getClickedBlock()); - if (item == null || !item.equals("ELEVATOR_PLATE")) return false; - - if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) Elevator.openEditor(p, e.getClickedBlock()); - return true; - } - }); - - SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "floor", "&rFloor #0"); - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - return true; - } - }); + .register(true); new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR, "FOOD_FABRICATOR", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.CAN, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLDEN_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Fabricator"; - } - @Override public int getEnergyConsumption() { return 7; @@ -3207,17 +3062,7 @@ public final class SlimefunSetup { new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR_2, "FOOD_FABRICATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Fabricator"; - } - + @Override public int getEnergyConsumption() { return 24; @@ -3272,17 +3117,7 @@ public final class SlimefunSetup { new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER, "FOOD_COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.CAN, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLDEN_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Composter"; - } - + @Override public int getEnergyConsumption() { return 8; @@ -3298,16 +3133,6 @@ public final class SlimefunSetup { new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER_2, "FOOD_COMPOSTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Composter"; - } - @Override public int getEnergyConsumption() { return 26; @@ -3349,8 +3174,7 @@ public final class SlimefunSetup { .register(true); new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR, "CROP_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) - { + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) { @Override public int getEnergyConsumption() { @@ -3370,8 +3194,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR_2, "CROP_GROWTH_ACCELERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) - { + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) { @Override public int getEnergyConsumption() { @@ -3392,17 +3215,7 @@ public final class SlimefunSetup { new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER, "FREEZER", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PACKED_ICE), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COOLING_UNIT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.COOLING_UNIT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLDEN_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bFreezer"; - } - + @Override public int getEnergyConsumption() { return 9; @@ -3418,16 +3231,6 @@ public final class SlimefunSetup { new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER_2, "FREEZER_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.COOLING_UNIT}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bFreezer"; - } - @Override public int getEnergyConsumption() { return 15; @@ -3554,49 +3357,9 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS, SlimefunItems.SILVER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS}, new CustomItem(SlimefunItems.CARGO_MOTOR, 4)) .register(true); - new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE, + new CargoManagerBlock(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT}) - .register(true, new BlockTicker() { - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); - } - - @Override - public boolean isSynchronized() { - return false; - } - - }, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - String item = BlockStorage.checkID(e.getClickedBlock()); - if (item == null || !item.equals("CARGO_MANAGER")) return false; - e.setCancelled(true); - - if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "visualizer") == null) { - BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", "disabled"); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718")); - } - else { - BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", null); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714")); - } - return true; - } - }); - - SlimefunItem.registerBlockHandler("CARGO_MANAGER", new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - CargoHologram.remove(b); - return true; - } - }); + .register(true); new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_NODE, "CARGO_NODE", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4)) @@ -3656,16 +3419,6 @@ public final class SlimefunSetup { new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS, "CARBON_PRESS", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CARBON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBON, SlimefunItems.CARBON, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - @Override public int getEnergyConsumption() { return 10; @@ -3681,16 +3434,6 @@ public final class SlimefunSetup { new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_2, "CARBON_PRESS_2", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.CARBON, SlimefunItems.CARBON_PRESS, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - @Override public int getEnergyConsumption() { return 25; @@ -3706,16 +3449,6 @@ public final class SlimefunSetup { new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_3, "CARBON_PRESS_3", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBON_PRESS_2, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - @Override public int getEnergyConsumption() { return 90; From af401864186a9eb0cbc3886d2d71a156bcd8914b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Wed, 4 Sep 2019 09:54:24 +0200 Subject: [PATCH 12/34] Updated dependencies --- pom.xml | 2 +- src/me/mrCookieSlime/Slimefun/Objects/Research.java | 5 +++++ src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d50ff0df5..73cf906c1 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.3.12 + 0.4 compile diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/me/mrCookieSlime/Slimefun/Objects/Research.java index 8392cee84..ceae58924 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -418,4 +418,9 @@ public class Research { public static List getResearches(String uuid) { return getResearches(UUID.fromString(uuid)); } + + @Override + public String toString() { + return "Research {" + id + "," + name + "}"; + } } \ No newline at end of file diff --git a/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java b/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java index 159c5b006..d551985b0 100644 --- a/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java +++ b/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java @@ -212,5 +212,10 @@ public final class PlayerProfile { return null; } } + + @Override + public String toString() { + return "PlayerProfile {" + uuid + "}"; + } } From f623c5d2ea477a0162eb4dd7aaaedc72ca8796b4 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Wed, 4 Sep 2019 19:42:17 +0200 Subject: [PATCH 13/34] Reduced technical debt --- .../Slimefun/Objects/Category.java | 43 ++++++------------- .../Objects/SlimefunItem/SlimefunItem.java | 17 +++----- .../abstractItems/MachineHelper.java | 2 +- .../machines/AncientPedestal.java | 27 ++++++++++++ .../machines/electric/AutoDrier.java | 42 +++++++++--------- .../SlimefunItem/multiblocks/TableSaw.java | 2 +- .../Slimefun/Setup/MiscSetup.java | 2 +- .../Slimefun/Setup/SlimefunManager.java | 18 +++++--- .../Slimefun/Setup/SlimefunSetup.java | 19 +------- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 2 +- .../Slimefun/SlimefunPlugin.java | 2 - .../Slimefun/api/SlimefunRecipes.java | 7 +-- .../holograms/HologramProjectorHologram.java | 4 ++ .../Slimefun/utils/CategorySorter.java | 17 ++++++++ .../Slimefun/utils/Utilities.java | 17 ++++++-- 15 files changed, 126 insertions(+), 95 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java create mode 100644 src/me/mrCookieSlime/Slimefun/utils/CategorySorter.java diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Category.java b/src/me/mrCookieSlime/Slimefun/Objects/Category.java index 2a0d0472a..20acc458f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/Category.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/Category.java @@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.Objects; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; import org.bukkit.inventory.ItemFlag; @@ -25,13 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; * @see SeasonalCategory */ public class Category { - /** - * List of the registered Categories. - * @since 4.0 - * @see Categories - */ - public static List list = new ArrayList<>(); - + private ItemStack item; private List items; private int tier; @@ -79,15 +72,19 @@ public class Category { * @since 4.0 */ public void register() { - list.add(this); - Collections.sort(list, new CategorySorter()); + SlimefunPlugin.getUtilities().allCategories.add(this); + Collections.sort(list(), SlimefunPlugin.getUtilities().categorySorter); if (this instanceof SeasonalCategory) { - if (((SeasonalCategory) this).isUnlocked()) SlimefunPlugin.getUtilities().currentlyEnabledCategories.add(this); + if (((SeasonalCategory) this).isUnlocked()) { + SlimefunPlugin.getUtilities().enabledCategories.add(this); + } + } + else { + SlimefunPlugin.getUtilities().enabledCategories.add(this); } - else SlimefunPlugin.getUtilities().currentlyEnabledCategories.add(this); - Collections.sort(SlimefunPlugin.getUtilities().currentlyEnabledCategories, new CategorySorter()); + Collections.sort(SlimefunPlugin.getUtilities().enabledCategories, SlimefunPlugin.getUtilities().categorySorter); } /** @@ -99,7 +96,7 @@ public class Category { * @see Categories */ public static List list() { - return list; + return SlimefunPlugin.getUtilities().allCategories; } /** @@ -143,8 +140,9 @@ public class Category { * * @since 4.0 */ + @Deprecated public static Category getByItem(ItemStack item) { - for (Category c: list) { + for (Category c: list()) { if (c.getItem().isSimilar(item)) return c; } return null; @@ -161,19 +159,4 @@ public class Category { return tier; } - /** - * @since 4.0 - */ - class CategorySorter implements Comparator { - - /** - * @since 4.0 - */ - @Override - public int compare(Category c1, Category c2) { - return Integer.compare(c1.getTier(), c2.getTier()); - } - - } - } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 31420ffa8..f41d29cc8 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -33,10 +33,7 @@ import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; public class SlimefunItem { - - public static List items = new ArrayList<>(); - public static List all = new ArrayList<>(); - + private String id; private String hash; private State state; @@ -211,7 +208,7 @@ public class SlimefunItem { throw new IllegalArgumentException("ID \"" + this.id + "\" already exists"); } if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null}; - all.add(this); + SlimefunPlugin.getUtilities().allItems.add(this); SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".enabled", true); SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing); @@ -246,7 +243,7 @@ public class SlimefunItem { this.enchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-enchanting"); this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting"); this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission"); - items.add(this); + SlimefunPlugin.getUtilities().enabledItems.add(this); if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++; SlimefunPlugin.getUtilities().itemIDs.put(this.id, this); @@ -274,7 +271,7 @@ public class SlimefunItem { } public static List list() { - return items; + return SlimefunPlugin.getUtilities().enabledItems; } public void bindToResearch(Research r) { @@ -325,7 +322,7 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; - for (SlimefunItem sfi: items) { + for (SlimefunItem sfi: SlimefunPlugin.getUtilities().enabledItems) { if ((sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) || (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) || (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) || @@ -378,7 +375,7 @@ public class SlimefunItem { } public static State getState(ItemStack item) { - for (SlimefunItem i: all) { + for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) { if (i.isItem(item)) { return i.getState(); } @@ -387,7 +384,7 @@ public class SlimefunItem { } public static boolean isDisabled(ItemStack item) { - for (SlimefunItem i: all) { + for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) { if (i.isItem(item)) { return i.isDisabled(); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java index cc9ccad25..90c042baa 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java @@ -98,7 +98,7 @@ public final class MachineHelper { im.setLore(lore); item.setItemMeta(im); - menu.replaceExistingItem(22, item); + menu.replaceExistingItem(slot, item); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java new file mode 100644 index 000000000..6086c4a2c --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java @@ -0,0 +1,27 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; + +import org.bukkit.entity.Item; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener; + +public class AncientPedestal extends SlimefunItem { + + public AncientPedestal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, id, recipeType, recipe, recipeOutput); + + SlimefunItem.registerBlockHandler(getID(), (p, b, tool, reason) -> { + Item stack = AncientAltarListener.findItem(b); + if (stack != null) { + stack.removeMetadata("item_placed", SlimefunPlugin.instance); + b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName())); + stack.remove(); + } + return true; + }); + } +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java index c72346212..43e08855d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java @@ -23,34 +23,34 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; public class AutoDrier extends AContainer implements RecipeDisplayItem { - private final List recipes = new ArrayList<>(); + private final List recipeList = new ArrayList<>(); public AutoDrier(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { super(category, item, id, recipeType, recipe); - recipes.add(new ItemStack(Material.ROTTEN_FLESH)); - recipes.add(new ItemStack(Material.LEATHER)); + recipeList.add(new ItemStack(Material.ROTTEN_FLESH)); + recipeList.add(new ItemStack(Material.LEATHER)); - recipes.add(new ItemStack(Material.WET_SPONGE)); - recipes.add(new ItemStack(Material.SPONGE)); + recipeList.add(new ItemStack(Material.WET_SPONGE)); + recipeList.add(new ItemStack(Material.SPONGE)); - recipes.add(new ItemStack(Material.KELP)); - recipes.add(new ItemStack(Material.DRIED_KELP)); + recipeList.add(new ItemStack(Material.KELP)); + recipeList.add(new ItemStack(Material.DRIED_KELP)); - recipes.add(new ItemStack(Material.COOKED_BEEF)); - recipes.add(SlimefunItems.BEEF_JERKY); + recipeList.add(new ItemStack(Material.COOKED_BEEF)); + recipeList.add(SlimefunItems.BEEF_JERKY); - recipes.add(new ItemStack(Material.POTION)); - recipes.add(new ItemStack(Material.GLASS_BOTTLE)); + recipeList.add(new ItemStack(Material.POTION)); + recipeList.add(new ItemStack(Material.GLASS_BOTTLE)); - recipes.add(new ItemStack(Material.OAK_SAPLING)); - recipes.add(new ItemStack(Material.STICK, 2)); + recipeList.add(new ItemStack(Material.OAK_SAPLING)); + recipeList.add(new ItemStack(Material.STICK, 2)); - recipes.add(new ItemStack(Material.OAK_LEAVES)); - recipes.add(new ItemStack(Material.STICK)); + recipeList.add(new ItemStack(Material.OAK_LEAVES)); + recipeList.add(new ItemStack(Material.STICK)); - recipes.add(new ItemStack(Material.WATER_BUCKET)); - recipes.add(new ItemStack(Material.BUCKET)); + recipeList.add(new ItemStack(Material.WATER_BUCKET)); + recipeList.add(new ItemStack(Material.BUCKET)); } @Override @@ -65,7 +65,7 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { @Override public List getDisplayRecipes() { - return recipes; + return recipeList; } @Override @@ -100,9 +100,9 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { Material mat = item.getType(); ItemStack output = null; - for (int i = 0; i < recipes.size(); i += 2) { - if (SlimefunManager.isItemSimiliar(item, recipes.get(i), true)) { - output = recipes.get(i + 1); + for (int i = 0; i < recipeList.size(); i += 2) { + if (SlimefunManager.isItemSimiliar(item, recipeList.get(i), true)) { + output = recipeList.get(i + 1); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java index 79b4ac163..259077952 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java @@ -16,7 +16,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; public class TableSaw extends MultiBlockMachine { - private final List displayRecipes = new ArrayList(); + private final List displayRecipes = new ArrayList<>(); public TableSaw() { super( diff --git a/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java index 1e3c27c53..c859aaeaf 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java @@ -49,7 +49,7 @@ public final class MiscSetup { } public static void loadItems(Settings settings) { - Iterator iterator = SlimefunItem.items.iterator(); + Iterator iterator = SlimefunItem.list().iterator(); while (iterator.hasNext()) { SlimefunItem item = iterator.next(); if (item == null) { diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index f05aa753d..185f8fd4f 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.Setup; import java.util.ArrayList; import java.util.List; +import org.bukkit.ChatColor; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; @@ -116,14 +117,21 @@ public final class SlimefunManager { } private static boolean equalsLore(List lore, List lore2) { - String string1 = ""; - String string2 = ""; + StringBuilder string1 = new StringBuilder(); + StringBuilder string2 = new StringBuilder(); + for (String string: lore) { - if (!string.startsWith("&e&e&7")) string1 = string1 + "-NEW LINE-" + string; + if (!string.startsWith(ChatColor.translateAlternateColorCodes('&', "&e&e&7"))) { + string1.append("-NEW LINE-" + string); + } } + for (String string: lore2) { - if (!string.startsWith("&e&e&7")) string2 = string2 + "-NEW LINE-" + string; + if (!string.startsWith(ChatColor.translateAlternateColorCodes('&', "&e&e&7"))) { + string2.append("-NEW LINE-" + string); + } } - return string1.equals(string2); + + return string1.toString().equals(string2.toString()); } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index bce313dad..334e2469f 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -23,7 +23,6 @@ import org.bukkit.block.CreatureSpawner; import org.bukkit.entity.EnderPearl; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; -import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockPlaceEvent; @@ -103,6 +102,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AncientPedestal; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.BlockPlacer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Composter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Crucible; @@ -162,7 +162,6 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler; import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; -import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener; import me.mrCookieSlime.Slimefun.androids.AndroidType; import me.mrCookieSlime.Slimefun.androids.ProgrammableAndroid; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -1732,24 +1731,10 @@ public final class SlimefunSetup { new CustomItem(SlimefunItems.WITHER_PROOF_OBSIDIAN, 4)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH, + new AncientPedestal(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.STONE), null, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}, new CustomItem(SlimefunItems.ANCIENT_PEDESTAL, 4)) .register(true); - SlimefunItem.registerBlockHandler("ANCIENT_PEDESTAL", new SlimefunBlockHandler() { - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Item stack = AncientAltarListener.findItem(b); - if (stack != null) { - stack.removeMetadata("item_placed", SlimefunPlugin.instance); - b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName())); - stack.remove(); - } - return true; - } - }); - new SlimefunItem(Categories.MAGIC, SlimefunItems.ANCIENT_ALTAR, "ANCIENT_ALTAR", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {null, new ItemStack(Material.ENCHANTING_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}) .register(true); diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 08f0edb04..eefc6c453 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -404,7 +404,7 @@ public final class SlimefunGuide { pl -> pl.playSound(pl.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 0.7F) ); - List categories = SlimefunPlugin.getUtilities().currentlyEnabledCategories; + List categories = SlimefunPlugin.getUtilities().enabledCategories; List handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList()); int index = 9; diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 6af513583..0e4000e04 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -359,8 +359,6 @@ public final class SlimefunPlugin extends JavaPlugin { // Prevent Memory Leaks Messages.local = null; - SlimefunItem.all = null; - SlimefunItem.items = null; AContainer.processing = null; AContainer.progress = null; OreWasher.items = null; diff --git a/src/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java b/src/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java index a14229ac2..5b17246d6 100644 --- a/src/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java +++ b/src/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java @@ -1,16 +1,17 @@ package me.mrCookieSlime.Slimefun.api; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import org.bukkit.inventory.ItemStack; - public final class SlimefunRecipes { private SlimefunRecipes() {} public static void registerMachineRecipe(String machine, int seconds, ItemStack[] input, ItemStack[] output) { - for (SlimefunItem item: SlimefunItem.all) { + for (SlimefunItem item: SlimefunPlugin.getUtilities().allItems) { if (item instanceof AContainer && ((AContainer) item).getMachineIdentifier().equals(machine)) { ((AContainer) item).registerRecipe(seconds, input, output); } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java index 24a73f8e1..b04a86d0d 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java @@ -30,6 +30,10 @@ public final class HologramProjectorHologram { if (n instanceof ArmorStand && n.getCustomName() != null && n.getCustomName().equals(nametag) && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; } + if (!createIfNoneExists) { + return null; + } + ArmorStand hologram = ArmorStandFactory.createHidden(l); hologram.setCustomName(nametag); return hologram; diff --git a/src/me/mrCookieSlime/Slimefun/utils/CategorySorter.java b/src/me/mrCookieSlime/Slimefun/utils/CategorySorter.java new file mode 100644 index 000000000..64cf469c4 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/utils/CategorySorter.java @@ -0,0 +1,17 @@ +package me.mrCookieSlime.Slimefun.utils; + +import java.util.Comparator; + +import me.mrCookieSlime.Slimefun.Objects.Category; + +public class CategorySorter implements Comparator { + + /** + * @since 4.0 + */ + @Override + public int compare(Category c1, Category c2) { + return Integer.compare(c1.getTier(), c2.getTier()); + } + +} \ No newline at end of file diff --git a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java index 5b2024847..98ad43ece 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -17,6 +17,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.GEO.OreGenResource; +import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.MultiBlock; import me.mrCookieSlime.Slimefun.Objects.Research; @@ -46,11 +47,23 @@ import me.mrCookieSlime.Slimefun.hooks.github.GitHubConnector; public final class Utilities { public int vanillaItems = 0; - + + public final List allItems = new ArrayList<>(); + public final List enabledItems = new ArrayList<>(); public final Map itemIDs = new HashMap<>(); + public final List allMultiblocks = new LinkedList<>(); public final List allResearches = new LinkedList<>(); + /** + * List of the registered Categories. + * @since 4.0 + * @see Categories + */ + public final List allCategories = new ArrayList<>(); + public final List enabledCategories = new ArrayList<>(); + public final CategorySorter categorySorter = new CategorySorter(); + public final Set radioactiveItems = new HashSet<>(); public final Map> itemHandlers = new HashMap<>(); public final Map blockHandlers = new HashMap<>(); @@ -69,8 +82,6 @@ public final class Utilities { public final Map blockMenuPresets = new HashMap<>(); - public final List currentlyEnabledCategories = new ArrayList<>(); - public final Map automatedCraftingChamberRecipes = new HashMap<>(); public final Map worlds = new HashMap<>(); From b4dff80dcc8c2fa505b0a4da5a1d1ad5b6a7a328 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Wed, 4 Sep 2019 19:51:03 +0200 Subject: [PATCH 14/34] Reduced technical debt --- .../Objects/SlimefunItem/EnderTalisman.java | 29 +++++-------------- .../Objects/SlimefunItem/Talisman.java | 17 +++++++---- 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java index b133b19c9..f8cad8cc6 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java @@ -1,38 +1,25 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; import me.mrCookieSlime.Slimefun.Lists.Categories; -import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.api.Slimefun; /** * @since 4.0 */ -public class EnderTalisman extends SlimefunItem { - - private String suffix; - private boolean consumable; - private boolean cancel; - private PotionEffect[] effects; - private int chance; +public class EnderTalisman extends Talisman { public EnderTalisman(Talisman parent) { - super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, parent.upgrade()); - this.consumable = parent.isConsumable(); - this.cancel = parent.isEventCancelled(); - this.suffix = parent.getSuffix(); - this.effects = parent.getEffects(); - this.chance = parent.getChance(); + super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}); + + consumable = parent.isConsumable(); + cancel = parent.isEventCancelled(); + suffix = parent.getSuffix(); + effects = parent.getEffects(); + chance = parent.getChance(); Slimefun.addHint("ENDER_" + parent.getID(), "&eEnder Talismans have the advantage", "&eof still working while they", "&eare in your Ender Chest"); } - - public String getSuffix() { return this.suffix; } - public boolean isConsumable() { return this.consumable; } - public boolean isEventCancelled() { return this.cancel; } - public PotionEffect[] getEffects() { return this.effects; } - public int getChance() { return this.chance; } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java index 598a51d9a..7d437e575 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java @@ -19,6 +19,7 @@ import org.bukkit.potion.PotionEffect; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -28,11 +29,11 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; */ public class Talisman extends SlimefunItem { - private String suffix; - private boolean consumable = true; - private boolean cancel = true; - private PotionEffect[] effects; - private int chance = 100; + protected String suffix; + protected boolean consumable = true; + protected boolean cancel = true; + protected PotionEffect[] effects; + protected int chance = 100; public Talisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, PotionEffect... effects) { super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, new CustomItem(item, consumable ? 4 : 1)); @@ -52,12 +53,16 @@ public class Talisman extends SlimefunItem { } public Talisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix, int chance, PotionEffect... effects) { - super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, item); + super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe); this.suffix = messageSuffix; this.effects = effects; this.chance = chance; } + protected Talisman(Category category, ItemStack item, String id, ItemStack[] recipe) { + super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe); + } + public String getSuffix() { return this.suffix; } From 861ddba8695f36d8f9f430f6adc50f63c5ffa937 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Wed, 4 Sep 2019 20:55:45 +0200 Subject: [PATCH 15/34] Fixes #1084 --- .../Objects/SlimefunItem/EnderTalisman.java | 17 +++++ .../Objects/SlimefunItem/Talisman.java | 65 +++++++++---------- .../SlimefunItem/multiblocks/Juicer.java | 3 +- .../Slimefun/Setup/SlimefunSetup.java | 2 +- 4 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java index f8cad8cc6..f6b515413 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java @@ -22,4 +22,21 @@ public class EnderTalisman extends Talisman { Slimefun.addHint("ENDER_" + parent.getID(), "&eEnder Talismans have the advantage", "&eof still working while they", "&eare in your Ender Chest"); } + + @Override + public ItemStack upgrade() { + throw new UnsupportedOperationException(); + } + + @Override + public void install() { + // Let's override that, otherwise we would be creating Ender Talismans + // for every Ender Talisman + } + + @Override + public void create() { + // Let's override that, otherwise we would be creating Ender Talismans + // for every Ender Talisman + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java index 7d437e575..ef0d493e4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java @@ -83,39 +83,6 @@ public class Talisman extends SlimefunItem { return this.chance; } - public static boolean checkFor(Event e, SlimefunItem item) { - if (!(item instanceof Talisman)) { - return false; - } - - Talisman talisman = (Talisman) item; - if (new Random().nextInt(100) < talisman.getChance()) { - return false; - } - - Player p = getPlayerByEventType(e); - if (p == null || !pass(p, talisman)) { - return false; - } - - if (p.getInventory().containsAtLeast(talisman.getItem(), 1)) { - if (Slimefun.hasUnlocked(p, talisman.getItem(), true)) { - executeTalismanAttributes(e,p,talisman); - return true; - } - else return false; - } - else if (p.getEnderChest().containsAtLeast(talisman.upgrade(), 1)) { - if (Slimefun.hasUnlocked(p, talisman.upgrade(), true)) { - executeTalismanAttributes(e,p,talisman); - return true; - } - else return false; - } - else return false; - - } - public ItemStack upgrade() { List lore = new ArrayList<>(); lore.add("&7&oEnder Infused"); @@ -147,6 +114,38 @@ public class Talisman extends SlimefunItem { private static boolean isTalismanMessage(Talisman talisman){ return !("").equalsIgnoreCase(talisman.getSuffix()); } + + public static boolean checkFor(Event e, SlimefunItem item) { + if (!(item instanceof Talisman)) { + return false; + } + + Talisman talisman = (Talisman) item; + if (new Random().nextInt(100) < talisman.getChance()) { + return false; + } + + Player p = getPlayerByEventType(e); + if (p == null || !pass(p, talisman)) { + return false; + } + + if (p.getInventory().containsAtLeast(talisman.getItem(), 1)) { + if (Slimefun.hasUnlocked(p, talisman.getItem(), true)) { + executeTalismanAttributes(e,p,talisman); + return true; + } + else return false; + } + else if (p.getEnderChest().containsAtLeast(talisman.upgrade(), 1)) { + if (Slimefun.hasUnlocked(p, talisman.upgrade(), true)) { + executeTalismanAttributes(e,p,talisman); + return true; + } + else return false; + } + else return false; + } private static void executeTalismanAttributes(Event e, Player p, Talisman talisman){ consumeItem(p,talisman); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java index e3222e9cb..789434a83 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java @@ -29,7 +29,8 @@ public class Juicer extends MultiBlockMachine { new ItemStack(Material.APPLE), SlimefunItems.APPLE_JUICE, new ItemStack(Material.MELON), SlimefunItems.MELON_JUICE, new ItemStack(Material.CARROT), SlimefunItems.CARROT_JUICE, - new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE + new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE, + new ItemStack(Material.GOLDEN_APPLE), SlimefunItems.GOLDEN_APPLE_JUICE }, Material.NETHER_BRICK_FENCE ); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 334e2469f..7f8196b71 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1461,7 +1461,7 @@ public final class SlimefunSetup { .register(true); new Juice(Categories.FOOD, SlimefunItems.GOLDEN_APPLE_JUICE, "GOLDEN_APPLE_JUICE", RecipeType.JUICER, - new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.GOLDEN_APPLE), null, null, null, null}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BROKEN_SPAWNER, "BROKEN_SPAWNER", new RecipeType(SlimefunItems.PICKAXE_OF_CONTAINMENT), From ed2d86403b16b82a26933e02afd4b6815dc527a2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Sep 2019 20:33:44 +0000 Subject: [PATCH 16/34] Update dependency com.github.thebusybiscuit:CS-CoreLib2 to v0.4.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 73cf906c1..e2aed4a93 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.4 + 0.4.1 compile From 25e6dd337bc8582f5c4d68dbf3a51e3e9e4a509f Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Thu, 5 Sep 2019 13:29:19 +0200 Subject: [PATCH 17/34] Improved Slimefun Guide Performance --- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 96 +++++++++---------- .../Slimefun/listeners/BlockListener.java | 86 +++++++++-------- .../Slimefun/utils/Utilities.java | 2 +- 3 files changed, 97 insertions(+), 87 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 7c17a612d..74bd3b68a 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; @@ -57,7 +58,8 @@ public final class SlimefunGuide { private SlimefunGuide() {} private static final int category_size = 36; - + private static final int[] slots = new int[] {0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35}; + @Deprecated public static ItemStack getItem() { return getItem(SlimefunGuideLayout.CHEST); @@ -86,8 +88,6 @@ public final class SlimefunGuide { return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&eSlimefun Guide &7(Right Click)", (book ? "": "&2"), "&rThis is your basic Guide for Slimefun", "&rYou can see all Items added by this Plugin", "&ror its Addons including their Recipes", "&ra bit of information and more"); } - private static final int[] slots = new int[] {0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35}; - public static void openSettings(Player p, final ItemStack guide) { final ChestMenu menu = new ChestMenu("Settings / Info"); @@ -184,16 +184,12 @@ public final class SlimefunGuide { final ChestMenu menu = new ChestMenu("Credits"); menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler( - pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F) - ); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); for (int i = 0; i < 9; i++) { if (i != 4) { menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, - (pl, slot, item, action) -> false - ); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); } else { menu.addItem(4, new CustomItem(new ItemStack(Material.EMERALD), "&7\u21E6 Back to Settings")); @@ -205,11 +201,7 @@ public final class SlimefunGuide { } int index = 9; - double total = 0; - - for (Contributor contributor : SlimefunPlugin.getUtilities().contributors) { - total += contributor.getCommits(); - } + double total = 1.0 * SlimefunPlugin.getUtilities().contributors.stream().mapToInt(Contributor::getCommits).sum(); for (final Contributor contributor: SlimefunPlugin.getUtilities().contributors) { ItemStack skull = new ItemStack(Material.PLAYER_HEAD); @@ -259,7 +251,10 @@ public final class SlimefunGuide { public static void openGuide(Player p, boolean book) { if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return; if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return; - if (!getHistory().containsKey(p.getUniqueId())) openMainMenu(p, true, book, 1); + + if (!getHistory().containsKey(p.getUniqueId())) { + openMainMenu(p, true, book, 1); + } else { Object last = getLastEntry(p, false); if (last instanceof Category) openCategory(p, (Category) last, true, 1, book); @@ -270,8 +265,9 @@ public final class SlimefunGuide { } public static void openMainMenu(final Player p, final boolean survival, final boolean book, final int selected_page) { - if (survival) + if (survival) { clearHistory(p.getUniqueId()); + } if (book) { List pages = new ArrayList<>(); @@ -293,7 +289,7 @@ public final class SlimefunGuide { } if (locked) { - // Dont display that Category... + // Don't display that Category... } else { if (tier < category.getTier()) { @@ -400,9 +396,7 @@ public final class SlimefunGuide { final ChestMenu menu = new ChestMenu("Slimefun Guide"); menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler( - pl -> pl.playSound(pl.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 0.7F) - ); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 0.7F)); List categories = SlimefunPlugin.getUtilities().enabledCategories; List handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList()); @@ -412,16 +406,12 @@ public final class SlimefunGuide { for (int i = 0; i < 9; i++) { menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, - (pl, slot, item, action) -> false - ); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); } for (int i = 45; i < 54; i++) { menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, - (pl, slot, item, action) -> false - ); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); } int target = (category_size * (selected_page - 1)) - 1; @@ -435,12 +425,13 @@ public final class SlimefunGuide { target++; if (target >= categories.size()) { - if (!survival) break; + if (!survival) { + break; + } index = handlers.get(target - categories.size()).next(p, index, menu); } else { final Category category = categories.get(target); - boolean locked = true; for (SlimefunItem item: category.getItems()) { @@ -487,13 +478,13 @@ public final class SlimefunGuide { parents.add(ChatColor.translateAlternateColorCodes('&', "&rYou need to unlock all Items")); parents.add(ChatColor.translateAlternateColorCodes('&', "&rfrom the following Categories first:")); parents.add(""); + for (Category parent : ((LockedCategory) category).getParents()) { parents.add(parent.getItem().getItemMeta().getDisplayName()); } + menu.addItem(index, new CustomItem(Material.BARRIER, "&4LOCKED &7- &r" + category.getItem().getItemMeta().getDisplayName(), parents.toArray(new String[parents.size()]))); - menu.addMenuClickHandler(index, - (pl, slot, item, action) -> false - ); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); index++; } } @@ -611,19 +602,23 @@ public final class SlimefunGuide { for (int i = 0; i < texts.size(); i = i + 10) { TellRawMessage page = new TellRawMessage(); page.addText(ChatColor.translateAlternateColorCodes('&', "&b&l- Slimefun Guide -\n\n")); + for (int j = i; j < texts.size() && j < i + 10; j++) { page.addText(texts.get(j) + "\n"); if (tooltips.get(j) != null) page.addHoverEvent(HoverAction.SHOW_TEXT, tooltips.get(j)); if (actions.get(j) != null) page.addClickEvent(actions.get(j)); } + page.addText("\n"); page.addText(ChatColor.translateAlternateColorCodes('&', "&6\u21E6 &lBack")); page.addHoverEvent(HoverAction.SHOW_TEXT, ChatColor.translateAlternateColorCodes('&', "&eClick to go back to the Category Overview")); page.addClickEvent(new PlayerRunnable(2) { + @Override public void run(final Player p) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openMainMenu(p, survival, true, 1), 1L); } + }); pages.add(page); } @@ -680,10 +675,12 @@ public final class SlimefunGuide { int target = categoryIndex + i; if (target >= category.getItems().size()) break; final SlimefunItem sfitem = category.getItems().get(target); + if (Slimefun.isEnabled(p, sfitem, false)) { if (survival && !Slimefun.hasUnlocked(p, sfitem.getItem(), false) && sfitem.getResearch() != null) { if (Slimefun.hasPermission(p, sfitem, false)) { final Research research = sfitem.getResearch(); + menu.addItem(index, new CustomItem(Material.BARRIER, "&r" + StringUtils.formatItemName(sfitem.getItem(), false), "&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + research.getCost() + " Level")); menu.addMenuClickHandler(index, (pl, slot, item, action) -> { if (!Research.isResearching(pl)) { @@ -716,10 +713,8 @@ public final class SlimefunGuide { index++; } else { - List list = Messages.local.getTranslation("tooltips.item-permission"); - String[] strings = list.toArray(new String[list.size()]); - CustomItem display = new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), strings); - menu.addItem(index, display); + List tooltip = Messages.local.getTranslation("tooltips.item-permission"); + menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), tooltip.toArray(new String[tooltip.size()]))); menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); index++; } @@ -745,25 +740,28 @@ public final class SlimefunGuide { } public static void addToHistory(Player p, Object obj) { - List list = new ArrayList<>(); - if (getHistory().containsKey(p.getUniqueId())) list = getHistory().get(p.getUniqueId()); + LinkedList list = getHistory().get(p.getUniqueId()); + + if (list == null) { + list = new LinkedList<>(); + getHistory().put(p.getUniqueId(), list); + } + list.add(obj); - getHistory().put(p.getUniqueId(), list); } private static Object getLastEntry(Player p, boolean remove) { - List list = new ArrayList<>(); - if (getHistory().containsKey(p.getUniqueId())) list = getHistory().get(p.getUniqueId()); + LinkedList history = getHistory().get(p.getUniqueId()); - if (remove && !list.isEmpty()) { - Object obj = list.get(list.size() - 1); - list.remove(obj); + if (remove && history != null && !history.isEmpty()) { + history.removeLast(); } - if (list.isEmpty()) getHistory().remove(p.getUniqueId()); - else getHistory().put(p.getUniqueId(), list); + if (history != null && history.isEmpty()) { + getHistory().remove(p.getUniqueId()); + } - return list.isEmpty() ? null: list.get(list.size() - 1); + return history == null || history.isEmpty() ? null: history.getLast(); } public static void displayItem(Player p, final ItemStack item, boolean addToHistory, final boolean book, final int page) { @@ -834,7 +832,9 @@ public final class SlimefunGuide { if (addToHistory) addToHistory(p, sfItem != null ? sfItem: item); - if (getHistory().containsKey(p.getUniqueId()) && getHistory().get(p.getUniqueId()).size() > 1) { + LinkedList history = getHistory().get(p.getUniqueId()); + + if (history != null && history.size() > 1) { menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to previous Page", "&rShift + left Click: &7Go back to Main Menu")); menu.addMenuClickHandler(0, (pl, slot, itemstack, action) -> { if (action.isShiftClicked()) openMainMenu(p, true, book, 1); @@ -1021,7 +1021,7 @@ public final class SlimefunGuide { menu.open(p); } - private static Map> getHistory() { + private static Map> getHistory() { return SlimefunPlugin.getUtilities().guideHistory; } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java index 652d5e2e9..8fcf9618f 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java @@ -82,8 +82,11 @@ public class BlockListener implements Listener { if (mb.getTriggerBlock() == b.getType()) { Material[] blocks = mb.getBuild(); - if (mb.getTriggerBlock() == blocks[1]) { - if ( + // Please. + // Someone please find a better way to do this... + + if (( + mb.getTriggerBlock() == blocks[1] && BlockAdjacents.hasMaterialOnSide(b, blocks[0]) && BlockAdjacents.hasMaterialOnSide(b, blocks[2]) && BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN), blocks[4]) && @@ -92,42 +95,49 @@ public class BlockListener implements Listener { BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN), blocks[7]) && BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN), blocks[6]) && BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN), blocks[8]) - ) { - if (blocks[0] != null && blocks[0] == blocks[2] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 0, 0), blocks[0])); - else if (blocks[3] != null && blocks[3] == blocks[5] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -1, 0), blocks[5])); - else if (blocks[6] != null && blocks[6] == blocks[8] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -2, 0), blocks[8])); - else multiblocks.add(mb); - } - } - else if (mb.getTriggerBlock() == blocks[4] && - BlockAdjacents.hasMaterialOnSide(b, blocks[3]) && - BlockAdjacents.hasMaterialOnSide(b, blocks[5]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN), blocks[7]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[6]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[8]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP), blocks[1]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[0]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[2]) - ) { - if (blocks[0] != null && blocks[0] == blocks[2] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 1, 0), blocks[0])); - else if (blocks[3] != null && blocks[3] == blocks[5] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 0, 0), blocks[5])); - else if (blocks[6] != null && blocks[6] == blocks[8] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -1, 0), blocks[8])); - else multiblocks.add(mb); - } - else if (mb.getTriggerBlock() == blocks[7] && - BlockAdjacents.hasMaterialOnSide(b, blocks[6]) && - BlockAdjacents.hasMaterialOnSide(b, blocks[8]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[1]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[0]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[2]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP), blocks[4]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[3]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[5]) - ) { - if (blocks[0] != null && blocks[0] == blocks[2] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 2, 0), blocks[0])); - else if (blocks[3] != null && blocks[3] == blocks[5] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 1, 0), blocks[5])); - else if (blocks[6] != null && blocks[6] == blocks[8] && !BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 0, 0), blocks[8])); - else multiblocks.add(mb); + && + blocks[0] != null && blocks[0] == blocks[2] + && BlockAdjacents.hasMaterialOnBothSides(b, blocks[0]) && + blocks[3] != null && blocks[3] == blocks[5] + && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -1, 0), blocks[5]) && + blocks[6] != null && blocks[6] == blocks[8] + && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -2, 0), blocks[8]) + ) || ( + mb.getTriggerBlock() == blocks[4] && + BlockAdjacents.hasMaterialOnSide(b, blocks[3]) && + BlockAdjacents.hasMaterialOnSide(b, blocks[5]) && + BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN), blocks[7]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[6]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[8]) && + BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP), blocks[1]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[0]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[2]) + && + blocks[0] != null && blocks[0] == blocks[2] + && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 1, 0), blocks[0]) && + blocks[3] != null && blocks[3] == blocks[5] + && BlockAdjacents.hasMaterialOnBothSides(b, blocks[5]) && + blocks[6] != null && blocks[6] == blocks[8] + && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -1, 0), blocks[8]) + ) || ( + mb.getTriggerBlock() == blocks[7] && + BlockAdjacents.hasMaterialOnSide(b, blocks[6]) && + BlockAdjacents.hasMaterialOnSide(b, blocks[8]) && + BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[1]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[0]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[2]) && + BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP), blocks[4]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[3]) && + BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[5]) + && + blocks[0] != null && blocks[0] == blocks[2] + && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 2, 0), blocks[0]) && + blocks[3] != null && blocks[3] == blocks[5] + && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 1, 0), blocks[5]) && + blocks[6] != null && blocks[6] == blocks[8] + && BlockAdjacents.hasMaterialOnBothSides(b, blocks[8]) + )) { + multiblocks.add(mb); } } } diff --git a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java index 98ad43ece..91547f332 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -123,7 +123,7 @@ public final class Utilities { public final Map contributorHeads = new HashMap<>(); public final List contributors = new ArrayList<>(); - public final Map> guideHistory = new HashMap<>(); + public final Map> guideHistory = new HashMap<>(); public final List cargoTransportEvents = new ArrayList<>(); From 307a4394ff803fa7297a8880d4363104b13ecf2e Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Thu, 5 Sep 2019 13:43:41 +0200 Subject: [PATCH 18/34] Improved Guide Performance + Refactoring --- .../Slimefun/commands/SlimefunCommand.java | 8 ++--- .../commands/SlimefunTabCompleter.java | 2 +- .../Slimefun/listeners/BackpackListener.java | 24 ++++++------- .../Slimefun/listeners/BowListener.java | 36 +++++++++---------- .../Slimefun/listeners/CoolerListener.java | 22 +++++++----- .../Slimefun/listeners/DamageListener.java | 7 ++-- 6 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java b/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java index b7336dc5e..1110c59d2 100644 --- a/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java +++ b/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java @@ -41,11 +41,11 @@ import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout; public class SlimefunCommand implements CommandExecutor, Listener { - private SlimefunPlugin plugin; + private final SlimefunPlugin plugin; - private List arguments = new ArrayList<>(); - private List descriptions = new ArrayList<>(); - private List tabs = new ArrayList<>(); + private final List arguments = new ArrayList<>(); + private final List descriptions = new ArrayList<>(); + private final List tabs = new ArrayList<>(); public SlimefunCommand(SlimefunPlugin plugin) { this.plugin = plugin; diff --git a/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java b/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java index 9d79ec269..130cd1785 100644 --- a/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java +++ b/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java @@ -12,7 +12,7 @@ import org.bukkit.command.TabCompleter; public class SlimefunTabCompleter implements TabCompleter { - private SlimefunCommand command; + private final SlimefunCommand command; public SlimefunTabCompleter(SlimefunCommand command) { this.command = command; diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java index bfcba58bb..15d11a754 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java @@ -27,31 +27,29 @@ import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.inventory.BackpackInventory; -import me.mrCookieSlime.Slimefun.utils.Utilities; public class BackpackListener implements Listener { - private Utilities utilities; - public BackpackListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); - utilities = SlimefunPlugin.getUtilities(); } @EventHandler public void onClose(InventoryCloseEvent e) { - if (utilities.enchanting.containsKey(e.getPlayer().getUniqueId())) utilities.enchanting.remove(e.getPlayer().getUniqueId()); + if (SlimefunPlugin.getUtilities().enchanting.containsKey(e.getPlayer().getUniqueId())) { + SlimefunPlugin.getUtilities().enchanting.remove(e.getPlayer().getUniqueId()); + } - if (utilities.backpack.containsKey(e.getPlayer().getUniqueId())) { + if (SlimefunPlugin.getUtilities().backpack.containsKey(e.getPlayer().getUniqueId())) { ((Player) e.getPlayer()).playSound(e.getPlayer().getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - PlayerProfile.getBackpack(utilities.backpack.get(e.getPlayer().getUniqueId())).markDirty(); - utilities.backpack.remove(e.getPlayer().getUniqueId()); + PlayerProfile.getBackpack(SlimefunPlugin.getUtilities().backpack.get(e.getPlayer().getUniqueId())).markDirty(); + SlimefunPlugin.getUtilities().backpack.remove(e.getPlayer().getUniqueId()); } } @EventHandler public void onItemDrop(PlayerDropItemEvent e) { - if (utilities.backpack.containsKey(e.getPlayer().getUniqueId())){ + if (SlimefunPlugin.getUtilities().backpack.containsKey(e.getPlayer().getUniqueId())){ ItemStack item = e.getItemDrop().getItemStack(); SlimefunItem sfItem = SlimefunItem.getByItem(item); if (sfItem instanceof SlimefunBackpack) e.setCancelled(true); @@ -60,8 +58,8 @@ public class BackpackListener implements Listener { @EventHandler public void onClick(InventoryClickEvent e) { - if (utilities.backpack.containsKey(e.getWhoClicked().getUniqueId())) { - ItemStack item = utilities.backpack.get(e.getWhoClicked().getUniqueId()); + if (SlimefunPlugin.getUtilities().backpack.containsKey(e.getWhoClicked().getUniqueId())) { + ItemStack item = SlimefunPlugin.getUtilities().backpack.get(e.getWhoClicked().getUniqueId()); if (e.getClick() == ClickType.NUMBER_KEY) { ItemStack hotbarItem = e.getWhoClicked().getInventory().getItem(e.getHotbarButton()); SlimefunItem sfItem = SlimefunItem.getByItem(hotbarItem); @@ -134,10 +132,10 @@ public class BackpackListener implements Listener { } } - if(!utilities.backpack.containsValue(item)) { + if(!SlimefunPlugin.getUtilities().backpack.containsValue(item)) { PlayerProfile.getBackpack(item).open(p); p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - utilities.backpack.put(p.getUniqueId(), item); + SlimefunPlugin.getUtilities().backpack.put(p.getUniqueId(), item); } else Messages.local.sendTranslation(p, "backpack.already-open", true); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java index 244690593..18b9f38b1 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java @@ -18,49 +18,48 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; -import me.mrCookieSlime.Slimefun.utils.Utilities; public class BowListener implements Listener { - private Utilities utilities; - public BowListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); - utilities = SlimefunPlugin.getUtilities(); } @EventHandler public void onBowUse(EntityShootBowEvent e) { - if (!(e.getEntity() instanceof Player) || !(e.getProjectile() instanceof Arrow)) return; - if (SlimefunItem.getByItem(e.getBow()) != null) utilities.arrows.put(e.getProjectile().getUniqueId(), e.getBow()); + if (e.getEntity() instanceof Player && e.getProjectile() instanceof Arrow && SlimefunItem.getByItem(e.getBow()) != null) { + SlimefunPlugin.getUtilities().arrows.put(e.getProjectile().getUniqueId(), e.getBow()); + } } @EventHandler public void onArrowHit(final ProjectileHitEvent e) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { if (!e.getEntity().isValid()) return; - utilities.arrows.remove(e.getEntity().getUniqueId()); + SlimefunPlugin.getUtilities().arrows.remove(e.getEntity().getUniqueId()); if (e.getEntity() instanceof Arrow) handleGrapplingHook((Arrow) e.getEntity()); }, 4L); } private void handleGrapplingHook(Arrow arrow) { - if (arrow != null && arrow.getShooter() instanceof Player && utilities.jumpState.containsKey(((Player) arrow.getShooter()).getUniqueId())) { + if (arrow != null && arrow.getShooter() instanceof Player && SlimefunPlugin.getUtilities().jumpState.containsKey(((Player) arrow.getShooter()).getUniqueId())) { final Player p = (Player) arrow.getShooter(); - if (p.getGameMode() != GameMode.CREATIVE && utilities.jumpState.get(p.getUniqueId())) arrow.getWorld().dropItem(arrow.getLocation(), SlimefunItem.getItem("GRAPPLING_HOOK")); + if (p.getGameMode() != GameMode.CREATIVE && SlimefunPlugin.getUtilities().jumpState.get(p.getUniqueId())) arrow.getWorld().dropItem(arrow.getLocation(), SlimefunItem.getItem("GRAPPLING_HOOK")); if (p.getLocation().distance(arrow.getLocation()) < 3.0D) { if (arrow.getLocation().getY() > p.getLocation().getY()) { p.setVelocity(new Vector(0.0D, 0.25D, 0.0D)); } - else p.setVelocity(arrow.getLocation().toVector().subtract(p.getLocation().toVector())); + else { + p.setVelocity(arrow.getLocation().toVector().subtract(p.getLocation().toVector())); + } - for (Entity n: utilities.remove.get(p.getUniqueId())) { + for (Entity n: SlimefunPlugin.getUtilities().remove.get(p.getUniqueId())) { if (n.isValid()) n.remove(); } Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { - utilities.jumpState.remove(p.getUniqueId()); - utilities.remove.remove(p.getUniqueId()); + SlimefunPlugin.getUtilities().jumpState.remove(p.getUniqueId()); + SlimefunPlugin.getUtilities().remove.remove(p.getUniqueId()); }, 20L); } else { @@ -83,13 +82,13 @@ public class BowListener implements Listener { p.setVelocity(v); - for (Entity n: utilities.remove.get(p.getUniqueId())) { + for (Entity n: SlimefunPlugin.getUtilities().remove.get(p.getUniqueId())) { if (n.isValid()) n.remove(); } Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { - utilities.jumpState.remove(p.getUniqueId()); - utilities.remove.remove(p.getUniqueId()); + SlimefunPlugin.getUtilities().jumpState.remove(p.getUniqueId()); + SlimefunPlugin.getUtilities().remove.remove(p.getUniqueId()); }, 20L); } } @@ -98,11 +97,12 @@ public class BowListener implements Listener { @EventHandler public void onArrowSuccessfulHit(EntityDamageByEntityEvent e) { if (e.getDamager() instanceof Arrow) { - if (utilities.arrows.containsKey(e.getDamager().getUniqueId()) && e.getEntity() instanceof LivingEntity) { + if (SlimefunPlugin.getUtilities().arrows.containsKey(e.getDamager().getUniqueId()) && e.getEntity() instanceof LivingEntity) { for (ItemHandler handler: SlimefunItem.getHandlers("BowShootHandler")) { if (((BowShootHandler) handler).onHit(e, (LivingEntity) e.getEntity())) break; } - utilities.arrows.remove(e.getDamager().getUniqueId()); + + SlimefunPlugin.getUtilities().arrows.remove(e.getDamager().getUniqueId()); } handleGrapplingHook((Arrow) e.getDamager()); diff --git a/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java b/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java index 2f86191e3..f552ebb75 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java @@ -12,7 +12,7 @@ import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.inventory.BackpackInventory; @@ -28,26 +28,30 @@ public class CoolerListener implements Listener { if (e.getFoodLevel() < ((Player) e.getEntity()).getFoodLevel()) { Player p = (Player) e.getEntity(); for (ItemStack item: p.getInventory().getContents()) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItem.getItem("COOLER"), false)) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false)) { BackpackInventory backpack = PlayerProfile.getBackpack(item); if (backpack != null) { Inventory inv = backpack.getInventory(); - ItemStack drink = null; + int slot = -1; - for (ItemStack i: inv.getContents()) { - if (i != null && i.getType() == Material.POTION && i.hasItemMeta()) { - drink = i; + for (int i = 0; i < inv.getSize(); i++) { + ItemStack stack = inv.getItem(i); + if (stack != null && stack.getType() == Material.POTION && stack.hasItemMeta() && stack.getItemMeta().hasDisplayName()) { + slot = i; break; } } - if (drink != null) { - PotionMeta im = (PotionMeta) drink.getItemMeta(); + + if (slot >= 0) { + PotionMeta im = (PotionMeta) inv.getItem(slot).getItemMeta(); + for (PotionEffect effect: im.getCustomEffects()) { p.addPotionEffect(effect); } + p.setSaturation(6F); p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_DRINK, 1F, 1F); - inv.removeItem(drink); + inv.setItem(slot, null); backpack.markDirty(); break; } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index e64d53b3b..7146ac013 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -26,16 +26,13 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.Soul; -import me.mrCookieSlime.Slimefun.utils.Utilities; public class DamageListener implements Listener { private SimpleDateFormat format = new SimpleDateFormat("(MMM d, yyyy @ hh:mm)"); - private Utilities utilities; public DamageListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); - utilities = SlimefunPlugin.getUtilities(); } @EventHandler @@ -91,9 +88,9 @@ public class DamageListener implements Listener { @EventHandler public void onArrowHit(EntityDamageEvent e) { - if (e.getEntity() instanceof Player && e.getCause() == DamageCause.FALL && utilities.damage.contains(e.getEntity().getUniqueId())) { + if (e.getEntity() instanceof Player && e.getCause() == DamageCause.FALL && SlimefunPlugin.getUtilities().damage.contains(e.getEntity().getUniqueId())) { e.setCancelled(true); - utilities.damage.remove(e.getEntity().getUniqueId()); + SlimefunPlugin.getUtilities().damage.remove(e.getEntity().getUniqueId()); } } From a98517f8cc53236f0c3023f8afa0e33d060bd6b1 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 15:02:26 +0300 Subject: [PATCH 19/34] Did the requested changes. --- .../SlimefunItem/items/SoulboundRune.java | 21 +++++++++---------- .../Slimefun/Setup/Messages.java | 4 ++-- .../Slimefun/Setup/SlimefunManager.java | 6 ++---- .../Slimefun/Setup/SlimefunSetup.java | 2 +- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 56450dcc7..be12c0831 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.List; public class SoulboundRune extends SimpleSlimefunItem { + private Research research = null; public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { super(category, item, id, type, recipe); @@ -35,12 +36,8 @@ public class SoulboundRune extends SimpleSlimefunItem { public ItemDropHandler getItemHandler() { return (e, p, i) -> { ItemStack item = i.getItemStack(); - // We are using a boolean array because we will change the boolean's value inside a lambda - // but you can't access non-final variables from outside the lambda inside the lambda. - final boolean[] boo = {false}; - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(Research.getByID(246))) { + if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(research)) { Messages.local.sendTranslation(p, "messages.not-researched", true); return true; } @@ -61,10 +58,7 @@ public class SoulboundRune extends SimpleSlimefunItem { // We do not use streams for foreach loops as they are more resource consuming. for (Entity entity: entites) { ItemStack dropped = ((Item) entity).getItemStack(); - if (SlimefunManager.isItemSoulbound(dropped)) { - boo[0] = false; - return; - } + if (SlimefunManager.isItemSoulbound(dropped)) return; ench = ((Item) entity).getItemStack(); ent = (Item) entity; break; @@ -104,15 +98,20 @@ public class SoulboundRune extends SimpleSlimefunItem { l.getWorld().dropItemNaturally(l, finalEnch); Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); - boo[0] = true; } }, 10L); } else { Messages.local.sendTranslation(p, "messages.soulbound-rune.fail", true); } }, 20L); + return true; } - return boo[0]; + return false; }; } + + @Override + public void postRegister() { + research = Research.getByID(246); + } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java index b5ebfa34c..d6b1fff38 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java @@ -56,8 +56,8 @@ public final class Messages { local.setDefault("messages.talisman.knight", "&a&oYour Talisman gave you 5 Seconds of Regeneration"); local.setDefault("messages.talisman.whirlwind", "&a&oYour Talisman reflected the Projectile"); local.setDefault("messages.talisman.wizard", "&a&oYour Talisman has given you a better Fortune Level but maybe also lowered some other Enchantment Levels"); - local.setDefault("messages.soulbound-rune.fail", "&cYou can only enchant 1 item with soulbound at a time."); - local.setDefault("messages.soulbound-rune.success", "&aSuccessfully soulbound enchanted this item."); + local.setDefault("messages.soulbound-rune.fail", "&cYou can only bind one item to your soul at a time."); + local.setDefault("messages.soulbound-rune.success", "&aYou have successfully bound this item to your soul! You will keep it when you die."); local.setDefault("messages.broken-leg", "&c&oSeems like you broke your Leg, maybe a Splint could help?"); local.setDefault("messages.fixed-leg", "&a&oThe Splint helps. It feels better now."); local.setDefault("messages.start-bleeding", "&c&oYou started to bleed. Maybe a Bandage could help?"); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index b1e3ada80..1a0d1f438 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -129,12 +129,10 @@ public final class SlimefunManager { StringBuilder string2 = new StringBuilder(); String colors = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString(); for (String string: lore) { - if (string.equals(ChatColor.GRAY + "Soulbound")) continue; - if (!string.startsWith(colors)) string1.append("-NEW LINE-").append(string); + if (!string.equals(ChatColor.GRAY + "Soulbound") && !string.startsWith(colors)) string1.append("-NEW LINE-").append(string); } for (String string: lore2) { - if (string.equals(ChatColor.GRAY + "Soulbound")) continue; - if (!string.startsWith(colors)) string2.append("-NEW LINE-").append(string); + if (!string.equals(ChatColor.GRAY + "Soulbound") && !string.startsWith(colors)) string2.append("-NEW LINE-").append(string); } return string1.toString().equals(string2.toString()); } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 9795d1277..a07ee949c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2894,7 +2894,7 @@ public final class SlimefunSetup { .register(true); new SoulboundRune(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_SOULBOUND, "ANCIENT_RUNE_SOULBOUND", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ENDER_PEARL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.ENDER_PEARL), SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3}) .register(true); new InfernalBonemeal(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, From ebde63a04e450f103c047b1c460d4b3b612b6919 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 17:16:10 +0300 Subject: [PATCH 20/34] Did the requested changes vol.2 --- .../SlimefunItem/items/SoulboundRune.java | 57 +++++++------------ 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index be12c0831..8dce0ec49 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -13,20 +13,18 @@ import org.bukkit.inventory.meta.ItemMeta; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.api.PlayerProfile; +import me.mrCookieSlime.Slimefun.api.Slimefun; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class SoulboundRune extends SimpleSlimefunItem { - private Research research = null; public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { super(category, item, id, type, recipe); @@ -37,7 +35,7 @@ public class SoulboundRune extends SimpleSlimefunItem { return (e, p, i) -> { ItemStack item = i.getItemStack(); if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!PlayerProfile.fromUUID(p.getUniqueId()).hasUnlocked(research)) { + if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, false)) { Messages.local.sendTranslation(p, "messages.not-researched", true); return true; } @@ -48,54 +46,47 @@ public class SoulboundRune extends SimpleSlimefunItem { Location l = i.getLocation(); Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5, - entity -> entity.getType() == EntityType.DROPPED_ITEM && - !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) + entity -> entity.getType() == EntityType.DROPPED_ITEM && entity instanceof Item && + !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) && + !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) ); + if (entites.size() < 1) return; - ItemStack ench = null; - Item ent = null; + ItemStack ench; + Item ent; // Collections do not have a #get method so we need to use a for loop. // We do not use streams for foreach loops as they are more resource consuming. - for (Entity entity: entites) { - ItemStack dropped = ((Item) entity).getItemStack(); - if (SlimefunManager.isItemSoulbound(dropped)) return; - ench = ((Item) entity).getItemStack(); - ent = (Item) entity; - break; - } + Entity entity = entites.stream().findFirst().get(); + ench = ((Item) entity).getItemStack(); + ent = (Item) entity; - if (ench == null || ench.getAmount() == 1) { + if (ench.getAmount() == 1) { e.setCancelled(true); - Item finalEnt = ent; - ItemStack finalEnch = ench; + ItemMeta enchMeta = ench.getItemMeta(); - ItemMeta enchMeta = finalEnch.getItemMeta(); - if (enchMeta == null) enchMeta = Bukkit.getItemFactory().getItemMeta(finalEnch.getType()); - ItemMeta finalMeta = enchMeta; - - List lore = finalMeta.getLore(); - if (lore == null) lore = new ArrayList<>(); - List finalLore = lore; + List lore; + if (enchMeta.hasLore()) lore = enchMeta.getLore(); + else lore = new ArrayList<>(); // This lightning is just an effect, it deals no damage. l.getWorld().strikeLightningEffect(l); Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { // Being sure entities are still valid and not picked up or whatsoever. - if (i.isValid() && finalEnt.isValid()) { + if (i.isValid() && ent.isValid()) { l.getWorld().createExplosion(l, 0.0F); l.getWorld().playSound(l, Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); - finalLore.add(ChatColor.GRAY + "Soulbound"); + lore.add(ChatColor.GRAY + "Soulbound"); - finalMeta.setLore(finalLore); - finalEnch.setItemMeta(finalMeta); + enchMeta.setLore(lore); + ench.setItemMeta(enchMeta); - finalEnt.remove(); + ent.remove(); i.remove(); - l.getWorld().dropItemNaturally(l, finalEnch); + l.getWorld().dropItemNaturally(l, ench); Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); } @@ -110,8 +101,4 @@ public class SoulboundRune extends SimpleSlimefunItem { }; } - @Override - public void postRegister() { - research = Research.getByID(246); - } } From f4da4d242334ef7ee48151f51fe009253668d96c Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 17:38:04 +0300 Subject: [PATCH 21/34] Did the requested changes vol.3 --- .../SlimefunItem/items/SoulboundRune.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 8dce0ec49..d3a468a0a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -35,10 +35,7 @@ public class SoulboundRune extends SimpleSlimefunItem { return (e, p, i) -> { ItemStack item = i.getItemStack(); if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, false)) { - Messages.local.sendTranslation(p, "messages.not-researched", true); - return true; - } + if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, true)) return true; Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { // Being sure the entity is still valid and not picked up or whatsoever. @@ -46,19 +43,14 @@ public class SoulboundRune extends SimpleSlimefunItem { Location l = i.getLocation(); Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5, - entity -> entity.getType() == EntityType.DROPPED_ITEM && entity instanceof Item && - !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) && - !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) + entity -> entity instanceof Item && !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) && + !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) ); if (entites.size() < 1) return; - ItemStack ench; - Item ent; - // Collections do not have a #get method so we need to use a for loop. - // We do not use streams for foreach loops as they are more resource consuming. Entity entity = entites.stream().findFirst().get(); - ench = ((Item) entity).getItemStack(); - ent = (Item) entity; + ItemStack ench = ((Item) entity).getItemStack(); + Item ent = (Item) entity; if (ench.getAmount() == 1) { e.setCancelled(true); From 05bd9337ab898079bf1135a81a4d44341661305e Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 20:35:16 +0300 Subject: [PATCH 22/34] Did the requested changes vol.4 --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 1 + .../Slimefun/Objects/SlimefunItem/items/SoulboundRune.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 88bc90a68..e0131c6d5 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -601,6 +601,7 @@ public final class SlimefunItems { imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); itemS.setItemMeta(imS); RUNE_SOULBOUND = itemS; + Slimefun.addHint("ANCIENT_RUNE_SOULBOUND", "&eThrow this onto a dropped item to", "&5bind ðat item to your soul.", "&eIt is advised for you use this rune", "&eon &6important &eitems."); } /* Electricity */ diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index d3a468a0a..d25333b93 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -46,7 +46,7 @@ public class SoulboundRune extends SimpleSlimefunItem { entity -> entity instanceof Item && !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) && !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) ); - if (entites.size() < 1) return; + if (entites.isEmpty()) return; Entity entity = entites.stream().findFirst().get(); ItemStack ench = ((Item) entity).getItemStack(); From 63a261d51ccf1c8aba13d2dd593408f5da429951 Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 20:43:36 +0300 Subject: [PATCH 23/34] Did the requested changes vol.infinite --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index e0131c6d5..ca07daf2a 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -1,6 +1,8 @@ package me.mrCookieSlime.Slimefun.Lists; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.logging.Level; @@ -599,9 +601,15 @@ public final class SlimefunItems { FireworkEffectMeta imS = (FireworkEffectMeta) itemS.getItemMeta(); imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build()); imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); + List lore = new ArrayList<>(); + lore.add("&eThrow this onto a dropped item to"); + lore.add("&5bind ðat item to your soul."); + lore.add(" "); + lore.add("&eIt is advised for you use this rune"); + lore.add("&eon &6important &eitems."); + imS.setLore(lore); itemS.setItemMeta(imS); RUNE_SOULBOUND = itemS; - Slimefun.addHint("ANCIENT_RUNE_SOULBOUND", "&eThrow this onto a dropped item to", "&5bind ðat item to your soul.", "&eIt is advised for you use this rune", "&eon &6important &eitems."); } /* Electricity */ From 7399e1f0d16787df1b09c64008fee8e4bf305cab Mon Sep 17 00:00:00 2001 From: ajan-12 <36973731+ajan-12@users.noreply.github.com> Date: Thu, 5 Sep 2019 22:36:27 +0300 Subject: [PATCH 24/34] Hopefully did the requested changes for the last time. --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index ca07daf2a..50ae08976 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -602,11 +602,13 @@ public final class SlimefunItems { imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build()); imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]")); List lore = new ArrayList<>(); - lore.add("&eThrow this onto a dropped item to"); - lore.add("&5bind ðat item to your soul."); + lore.add(ChatColor.YELLOW + "Drop this rune onto a dropped item to"); + lore.add(ChatColor.DARK_PURPLE + "bind " + ChatColor.YELLOW + "that item to your soul."); lore.add(" "); - lore.add("&eIt is advised for you use this rune"); - lore.add("&eon &6important &eitems."); + lore.add(ChatColor.YELLOW + "It is advised that you only use this rune"); + lore.add(ChatColor.YELLOW + "on " + ChatColor.GOLD + "important " + ChatColor.YELLOW + "items."); + lore.add(" "); + lore.add(ChatColor.YELLOW + "Items bound to your soul won't drop on death."); imS.setLore(lore); itemS.setItemMeta(imS); RUNE_SOULBOUND = itemS; From 4f89c2d6e5e25c345613177d425eaa177f9b05ae Mon Sep 17 00:00:00 2001 From: Liruxo Date: Thu, 5 Sep 2019 21:41:59 +0200 Subject: [PATCH 25/34] MultiBlockListener overhaul --- .../Slimefun/Objects/MultiBlock.java | 50 +++++++- .../Slimefun/listeners/BlockListener.java | 109 +++++++----------- 2 files changed, 89 insertions(+), 70 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java index d1630e1a4..23f1f0730 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java @@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.Objects; import java.util.List; import org.bukkit.Material; +import org.bukkit.block.BlockFace; import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper; import me.mrCookieSlime.Slimefun.SlimefunPlugin; @@ -12,18 +13,56 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; public class MultiBlock { private Material[] blocks; - private Material trigger; - + private BlockFace trigger; + private boolean isSymmetric; + + @Deprecated public MultiBlock(Material[] build, Material trigger) { + this.blocks = build; + this.isSymmetric = isSymmetric(build); + //Hacky, the other constructor should be used + for (int i = 0; i < 9; i++) + { + if (trigger.equals(build[i])) + { + switch (i) { + case 1: + this.trigger = BlockFace.DOWN; + break; + case 4: + this.trigger = BlockFace.SELF; + break; + case 7: + this.trigger = BlockFace.UP; + break; + } + break; + } + } + } + + public MultiBlock(Material[] build, BlockFace trigger) + { this.blocks = build; this.trigger = trigger; + this.isSymmetric = isSymmetric(build); + } + + private boolean isSymmetric(Material[] blocks) + { + if (blocks[0] == blocks[2] + && blocks[3] == blocks[5] + && blocks[6] == blocks[8]) { + return true; + } + return false; } public Material[] getBuild() { return this.blocks; } - public Material getTriggerBlock() { + public BlockFace getTriggerBlock() { return this.trigger; } @@ -69,5 +108,10 @@ public class MultiBlock { return true; } + + public boolean isSymmetric() + { + return this.isSymmetric; + } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java index 8fcf9618f..122ce5de0 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java @@ -19,7 +19,6 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.CSCoreLibPlugin.general.Block.BlockAdjacents; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Events.MultiBlockInteractEvent; import me.mrCookieSlime.Slimefun.Objects.MultiBlock; @@ -75,73 +74,15 @@ public class BlockListener implements Listener { public void onRightClick(PlayerInteractEvent e) { if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { if (e.getHand() != EquipmentSlot.HAND) return; - Player p = e.getPlayer(); - Block b = e.getClickedBlock(); - List multiblocks = new ArrayList<>(); - for (MultiBlock mb: MultiBlock.list()) { - if (mb.getTriggerBlock() == b.getType()) { - Material[] blocks = mb.getBuild(); - - // Please. - // Someone please find a better way to do this... - - if (( - mb.getTriggerBlock() == blocks[1] && - BlockAdjacents.hasMaterialOnSide(b, blocks[0]) && - BlockAdjacents.hasMaterialOnSide(b, blocks[2]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN), blocks[4]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[3]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[5]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN), blocks[7]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN), blocks[6]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN), blocks[8]) - && - blocks[0] != null && blocks[0] == blocks[2] - && BlockAdjacents.hasMaterialOnBothSides(b, blocks[0]) && - blocks[3] != null && blocks[3] == blocks[5] - && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -1, 0), blocks[5]) && - blocks[6] != null && blocks[6] == blocks[8] - && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -2, 0), blocks[8]) - ) || ( - mb.getTriggerBlock() == blocks[4] && - BlockAdjacents.hasMaterialOnSide(b, blocks[3]) && - BlockAdjacents.hasMaterialOnSide(b, blocks[5]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.DOWN), blocks[7]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[6]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.DOWN), blocks[8]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP), blocks[1]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[0]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[2]) - && - blocks[0] != null && blocks[0] == blocks[2] - && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 1, 0), blocks[0]) && - blocks[3] != null && blocks[3] == blocks[5] - && BlockAdjacents.hasMaterialOnBothSides(b, blocks[5]) && - blocks[6] != null && blocks[6] == blocks[8] - && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, -1, 0), blocks[8]) - ) || ( - mb.getTriggerBlock() == blocks[7] && - BlockAdjacents.hasMaterialOnSide(b, blocks[6]) && - BlockAdjacents.hasMaterialOnSide(b, blocks[8]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[1]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[0]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP).getRelative(BlockFace.UP), blocks[2]) && - BlockAdjacents.isMaterial(b.getRelative(BlockFace.UP), blocks[4]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[3]) && - BlockAdjacents.hasMaterialOnSide(b.getRelative(BlockFace.UP), blocks[5]) - && - blocks[0] != null && blocks[0] == blocks[2] - && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 2, 0), blocks[0]) && - blocks[3] != null && blocks[3] == blocks[5] - && BlockAdjacents.hasMaterialOnBothSides(b.getRelative(0, 1, 0), blocks[5]) && - blocks[6] != null && blocks[6] == blocks[8] - && BlockAdjacents.hasMaterialOnBothSides(b, blocks[8]) - )) { - multiblocks.add(mb); - } + Player p = e.getPlayer(); + Block b = e.getClickedBlock(); + List multiblocks = new ArrayList<>(); + for (MultiBlock mb: MultiBlock.list()) { + Block center = b.getRelative(mb.getTriggerBlock()); + if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) + multiblocks.add(mb); } - } - + if (!multiblocks.isEmpty()) { e.setCancelled(true); MultiBlock multiblock = multiblocks.get(multiblocks.size() - 1); @@ -155,4 +96,38 @@ public class BlockListener implements Listener { } } } + + protected boolean compareMaterials(Block b, Material[] materials, boolean onlyTwoWay) + { + return compareMaterials(b, materials[0], materials[1], materials[2], materials[3], materials[4], materials[5], materials[6], materials[7], materials[8], onlyTwoWay); + } + + protected boolean compareMaterials(Block b, Material mat1, Material mat2, Material mat3, Material mat4, Material mat5, Material mat6, Material mat7, Material mat8, Material mat9, boolean onlyTwoWay) + { + if (!compareMaterialsVertical(b, mat2, mat5, mat8)) + return false; + + BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; + for (BlockFace direction : directions) + { + if (compareMaterialsVertical(b.getRelative(direction), mat1, mat4, mat7)) + if (compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), mat3, mat6, mat9)) + return true; + } + return false; + } + + protected boolean compareMaterialsVertical(Block b, Material mat1, Material mat2, Material mat3) + { + if (mat2 != null && b.getType() != mat2) + return false; + + if (mat1 != null && b.getRelative(BlockFace.UP).getType() != mat1) + return false; + + if (mat3 != null && b.getRelative(BlockFace.DOWN).getType() != mat3) + return false; + + return true; + } } From 3f0f7948638886d15abc22576658bf8825ffd3bc Mon Sep 17 00:00:00 2001 From: Liruxo Date: Thu, 5 Sep 2019 22:31:08 +0200 Subject: [PATCH 26/34] Review suggestions implemented --- src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java index 23f1f0730..c336b435f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java @@ -21,7 +21,7 @@ public class MultiBlock { this.blocks = build; this.isSymmetric = isSymmetric(build); //Hacky, the other constructor should be used - for (int i = 0; i < 9; i++) + for (int i = 1; i < 9; i *=3) { if (trigger.equals(build[i])) { @@ -48,14 +48,11 @@ public class MultiBlock { this.isSymmetric = isSymmetric(build); } - private boolean isSymmetric(Material[] blocks) + private static boolean isSymmetric(Material[] blocks) { - if (blocks[0] == blocks[2] + return blocks[0] == blocks[2] && blocks[3] == blocks[5] - && blocks[6] == blocks[8]) { - return true; - } - return false; + && blocks[6] == blocks[8]; } public Material[] getBuild() { From 5015ddc560205cae33dfec671116083782849394 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Thu, 5 Sep 2019 23:30:16 +0200 Subject: [PATCH 27/34] Refactored Code --- .../Objects/SlimefunItem/SlimefunMachine.java | 3 +- .../multiblocks/AutomatedPanningMachine.java | 2 + .../Slimefun/listeners/BlockListener.java | 82 +++++++++---------- 3 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java index a986a7245..01e133286 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java @@ -59,7 +59,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { } @Override - public void create() { + public void postRegister() { this.toMultiBlock().register(); } @@ -80,6 +80,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem { else if (i.getType() == Material.FLINT_AND_STEEL) mats.add(Material.FIRE); else mats.add(i.getType()); } + Material[] build = mats.toArray(new Material[mats.size()]); return new MultiBlock(build, this.trigger); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java index 26d2dd234..9b3c59acc 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java @@ -50,8 +50,10 @@ public class AutomatedPanningMachine extends MultiBlockMachine { if (input != null && input.getType() == Material.GRAVEL) { PlayerInventory.consumeItemInHand(p); + for (int i = 1; i < 7; i++) { int j = i; + Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> { b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); if (j == 6) { diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java index 122ce5de0..a59a6fac7 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java @@ -1,7 +1,6 @@ package me.mrCookieSlime.Slimefun.listeners; -import java.util.ArrayList; -import java.util.List; +import java.util.LinkedList; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -38,6 +37,7 @@ public class BlockListener implements Listener { if (event.getEntity() instanceof FallingBlock && BlockStorage.hasBlockInfo(event.getBlock())) { event.setCancelled(true); FallingBlock fb = (FallingBlock) event.getEntity(); + if (fb.getDropItem()) { fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1)); } @@ -47,11 +47,9 @@ public class BlockListener implements Listener { @EventHandler public void onPistonExtend(BlockPistonExtendEvent e) { for (Block b : e.getBlocks()) { - if (BlockStorage.hasBlockInfo(b) || - b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { - - e.setCancelled(true); - return; + if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { + e.setCancelled(true); + return; } } } @@ -60,11 +58,9 @@ public class BlockListener implements Listener { public void onPistonRetract(BlockPistonRetractEvent e) { if (e.isSticky()) { for (Block b : e.getBlocks()) { - if (BlockStorage.hasBlockInfo(b) || - b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { - - e.setCancelled(true); - return; + if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { + e.setCancelled(true); + return; } } } @@ -76,57 +72,59 @@ public class BlockListener implements Listener { if (e.getHand() != EquipmentSlot.HAND) return; Player p = e.getPlayer(); Block b = e.getClickedBlock(); - List multiblocks = new ArrayList<>(); + LinkedList multiblocks = new LinkedList<>(); + for (MultiBlock mb: MultiBlock.list()) { Block center = b.getRelative(mb.getTriggerBlock()); - if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) + + if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) { multiblocks.add(mb); + } } - if (!multiblocks.isEmpty()) { - e.setCancelled(true); - MultiBlock multiblock = multiblocks.get(multiblocks.size() - 1); - - for (ItemHandler handler: SlimefunItem.getHandlers("MultiBlockInteractionHandler")) { - if (((MultiBlockInteractionHandler) handler).onInteract(p, multiblock, b)) break; + if (!multiblocks.isEmpty()) { + e.setCancelled(true); + MultiBlock multiblock = multiblocks.getLast(); + + for (ItemHandler handler: SlimefunItem.getHandlers("MultiBlockInteractionHandler")) { + if (((MultiBlockInteractionHandler) handler).onInteract(p, multiblock, b)) break; + } + + MultiBlockInteractEvent event = new MultiBlockInteractEvent(p, multiblock, b); + Bukkit.getPluginManager().callEvent(event); } - - MultiBlockInteractEvent event = new MultiBlockInteractEvent(p, multiblock, b); - Bukkit.getPluginManager().callEvent(event); - } } } - protected boolean compareMaterials(Block b, Material[] materials, boolean onlyTwoWay) - { - return compareMaterials(b, materials[0], materials[1], materials[2], materials[3], materials[4], materials[5], materials[6], materials[7], materials[8], onlyTwoWay); - } - - protected boolean compareMaterials(Block b, Material mat1, Material mat2, Material mat3, Material mat4, Material mat5, Material mat6, Material mat7, Material mat8, Material mat9, boolean onlyTwoWay) - { - if (!compareMaterialsVertical(b, mat2, mat5, mat8)) + protected boolean compareMaterials(Block b, Material[] blocks, boolean onlyTwoWay) { + if (!compareMaterialsVertical(b, blocks[2], blocks[5], blocks[8])) { return false; + } BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; - for (BlockFace direction : directions) - { - if (compareMaterialsVertical(b.getRelative(direction), mat1, mat4, mat7)) - if (compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), mat3, mat6, mat9)) - return true; + + for (BlockFace direction : directions) { + if (compareMaterialsVertical(b.getRelative(direction), blocks[1], blocks[4], blocks[7]) + && compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[3], blocks[6], blocks[9])) { + return true; + } } + return false; } - protected boolean compareMaterialsVertical(Block b, Material mat1, Material mat2, Material mat3) - { - if (mat2 != null && b.getType() != mat2) + protected boolean compareMaterialsVertical(Block b, Material top, Material center, Material bottom) { + if (center != null && b.getType() != center) { return false; + } - if (mat1 != null && b.getRelative(BlockFace.UP).getType() != mat1) + if (top != null && b.getRelative(BlockFace.UP).getType() != top) { return false; + } - if (mat3 != null && b.getRelative(BlockFace.DOWN).getType() != mat3) + if (bottom != null && b.getRelative(BlockFace.DOWN).getType() != bottom) { return false; + } return true; } From 9ff32fb72ee1d0ce4e3c74bb77a903dbc8365c89 Mon Sep 17 00:00:00 2001 From: WalshyDev Date: Thu, 5 Sep 2019 23:09:25 +0100 Subject: [PATCH 28/34] Micro-optimisations --- .../mrCookieSlime/Slimefun/GPS/Elevator.java | 2 +- .../Slimefun/GPS/GPSNetwork.java | 8 +++-- .../Slimefun/Objects/Research.java | 2 +- .../Objects/SlimefunItem/SlimefunItem.java | 5 +-- .../SlimefunItem/items/StormStaff.java | 2 +- .../multiblocks/MagicWorkbench.java | 2 +- .../Slimefun/Objects/tasks/JetBootsTask.java | 2 +- .../Slimefun/Setup/SlimefunSetup.java | 32 ++++++++----------- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 4 +-- .../Slimefun/SlimefunPlugin.java | 9 +++--- .../androids/ProgrammableAndroid.java | 2 +- .../Slimefun/api/BlockStorage.java | 12 +++---- .../Slimefun/api/ErrorReport.java | 8 ++--- .../mrCookieSlime/Slimefun/api/Slimefun.java | 4 +-- .../Slimefun/api/SlimefunBackup.java | 2 +- .../Slimefun/api/TickerTask.java | 4 +-- .../Slimefun/api/inventory/BlockMenu.java | 2 +- .../Slimefun/commands/SlimefunCommand.java | 2 +- .../commands/SlimefunTabCompleter.java | 2 +- .../Slimefun/hooks/github/IntegerFormat.java | 2 +- .../Slimefun/listeners/TalismanListener.java | 2 +- 21 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java index 88ecba204..0926ba551 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java @@ -74,7 +74,7 @@ public final class Elevator { else { tellraw.addText("&7" + index + ". &r" + floor + "\n"); tellraw.addHoverEvent(HoverAction.SHOW_TEXT, "\n&eClick to teleport to this Floor\n&r" + floor + "\n"); - tellraw.addClickEvent(me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.ClickAction.RUN_COMMAND, "/sf elevator " + block.getX() + " " + block.getY() + " " + block.getZ() + " "); + tellraw.addClickEvent(me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.ClickAction.RUN_COMMAND, "/sf elevator " + block.getX() + ' ' + block.getY() + ' ' + block.getZ() + " "); } index++; diff --git a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index bc0425cc4..664268947 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -160,7 +160,8 @@ public class GPSNetwork { menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete")); menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> { - String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(" ", "_"); + String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())) + .toUpperCase().replace(' ', '_'); Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml"); cfg.setValue(id, null); cfg.save(); @@ -210,7 +211,8 @@ public class GPSNetwork { return; } Config cfg = new Config("data-storage/Slimefun/waypoints/" + p.getUniqueId().toString() + ".yml"); - String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase().replace(" ", "_"); + String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase() + .replace(' ', '_'); cfg.setValue(id, l); cfg.setValue(id + ".name", name); cfg.save(); @@ -234,7 +236,7 @@ public class GPSNetwork { for (OreGenResource resource: OreGenSystem.listResources()) { int supply = OreGenSystem.getSupplies(resource, chunk, true); - menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + " " + resource.getMeasurementUnit()), (pl, slot, item, action) -> false); + menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + ' ' + resource.getMeasurementUnit()), (pl, slot, item, action) -> false); index++; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/me/mrCookieSlime/Slimefun/Objects/Research.java index ceae58924..56b2fabdf 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -421,6 +421,6 @@ public class Research { @Override public String toString() { - return "Research {" + id + "," + name + "}"; + return "Research {" + id + ',' + name + "}"; } } \ No newline at end of file diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index f41d29cc8..e829d129c 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -219,7 +219,7 @@ public class SlimefunItem { if (this.keys != null && this.values != null) { for (int i = 0; i < this.keys.length; i++) { - SlimefunPlugin.getItemCfg().setDefaultValue(this.id + "." + this.keys[i], this.values[i]); + SlimefunPlugin.getItemCfg().setDefaultValue(this.id + '.' + this.keys[i], this.values[i]); } } @@ -351,7 +351,8 @@ public class SlimefunItem { if (recipeOutput != null) output = recipeOutput.clone(); if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) { - String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_"); + String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase() + .replace(' ', '_'); try { EntityType entity = EntityType.valueOf(mob); List dropping = SlimefunPlugin.getUtilities().drops.getOrDefault(entity, new ArrayList<>()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java index f4f3226a3..849d5569d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java @@ -82,7 +82,7 @@ public class StormStaff extends SimpleSlimefunItem { return true; } else if (ChatColor.translateAlternateColorCodes('&', "&e" + i + " Uses &7left").equals(itemLore.get(4))) { - itemLore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + (i - 1) + " " + (i > 2 ? "Uses": "Use") + " &7left")); + itemLore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + (i - 1) + ' ' + (i > 2 ? "Uses": "Use") + " &7left")); e.setCancelled(true); // Saving the changes to lore and item. diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java index f70b40be4..d35c14915 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java @@ -107,7 +107,7 @@ public class MagicWorkbench extends MultiBlockMachine { } } - if (id.equals("")) { + if (id.isEmpty()) { for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID(); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java b/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java index a24f8cd6b..3fd9b77be 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java @@ -25,7 +25,7 @@ public class JetBootsTask extends SlimefunTask { Player p = Bukkit.getPlayer(uuid); float cost = 0.075F; float charge = ItemEnergy.getStoredEnergy(p.getInventory().getBoots()); - double accuracy = Double.parseDouble(new DecimalFormat("##.##").format(speed - 0.7).replace(",", ".")); + double accuracy = Double.parseDouble(new DecimalFormat("##.##").format(speed - 0.7).replace(',', '.')); if (charge >= cost) { p.getInventory().setBoots(ItemEnergy.chargeItem(p.getInventory().getBoots(), -cost)); PlayerInventory.update(p); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 4472258c7..6dbd435bc 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1471,26 +1471,22 @@ public final class SlimefunSetup { new SlimefunItem(Categories.MAGIC, SlimefunItems.REPAIRED_SPAWNER, "REINFORCED_SPAWNER", RecipeType.ANCIENT_ALTAR, new ItemStack[] {SlimefunItems.RUNE_ENDER, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.BROKEN_SPAWNER, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.RUNE_ENDER}) - .register(true, new BlockPlaceHandler() { - - @Override - public boolean onBlockPlace(BlockPlaceEvent e, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) { - EntityType type = null; - for (String line: item.getItemMeta().getLore()) { - if (ChatColor.stripColor(line).startsWith("Type: ") && !line.contains("")) - type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "").replace(" ", "_").toUpperCase()); - - } - if (type != null) { - CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState(); - spawner.setSpawnedType(type); - spawner.update(true, false); - } - return true; + .register(true, (BlockPlaceHandler) (e, item) -> { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) { + EntityType type = null; + for (String line: item.getItemMeta().getLore()) { + if (ChatColor.stripColor(line).startsWith("Type: ") && !line.contains("")) + type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "") + .replace(' ', '_').toUpperCase()); } - else return false; + if (type != null) { + CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState(); + spawner.setSpawnedType(type); + spawner.update(true, false); + } + return true; } + else return false; }); new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 74bd3b68a..d68fa978f 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -1033,10 +1033,10 @@ public final class SlimefunGuide { String timeleft = ""; final int minutes = (int) (seconds / 60L); if (minutes > 0) { - timeleft = String.valueOf(timeleft) + minutes + "m "; + timeleft = timeleft + minutes + "m "; } seconds -= minutes * 60; - timeleft = String.valueOf(timeleft) + seconds + "s"; + timeleft = timeleft + seconds + "s"; return "&7" + timeleft; } diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 0e4000e04..99f77bf18 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -109,9 +109,10 @@ public final class SlimefunPlugin extends JavaPlugin { compatibleVersion = true; } - if (i == 0) versions.append(version.substring(1).replaceFirst("_", ".").replace("_", ".X")); - else if (i == supported.length - 1) versions.append(" or " + version.substring(1).replaceFirst("_", ".").replace("_", ".X")); - else versions.append(", " + version.substring(1).replaceFirst("_", ".").replace("_", ".X")); + String s = version.substring(1).replaceFirst("_", ".").replace("_", ".X"); + if (i == 0) versions.append(s); + else if (i == supported.length - 1) versions.append(" or ").append(s); + else versions.append(", ").append(s); i++; } @@ -124,7 +125,7 @@ public final class SlimefunPlugin extends JavaPlugin { getLogger().log(Level.SEVERE, "###"); getLogger().log(Level.SEVERE, "### You are using Minecraft " + ReflectionUtils.getVersion()); getLogger().log(Level.SEVERE, "### but Slimefun v" + getDescription().getVersion() + " requires you to be using"); - getLogger().log(Level.SEVERE, "### Minecraft " + versions.toString()); + getLogger().log(Level.SEVERE, "### Minecraft {0}", versions); getLogger().log(Level.SEVERE, "###"); getLogger().log(Level.SEVERE, "### Please use an older Version of Slimefun and disable auto-updating"); getLogger().log(Level.SEVERE, "### or consider updating your Server Software."); diff --git a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index e615a2e43..a2d70bee6 100644 --- a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -813,7 +813,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent Messages.local.sendTranslation(pl, "android.scripts.enter-name", true); MenuHelper.awaitChatInput(pl, (player, message) -> { - Config script = new Config("plugins/Slimefun/scripts/" + getAndroidType().toString() + "/" + p.getName() + " " + id + ".sfs"); + Config script = new Config("plugins/Slimefun/scripts/" + getAndroidType().toString() + '/' + p.getName() + ' ' + id + ".sfs"); script.setValue("author", player.getUniqueId().toString()); script.setValue("author_name", player.getName()); diff --git a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java index da5d9e6a0..c0513266c 100644 --- a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -54,15 +54,15 @@ public class BlockStorage { } private static String serializeLocation(Location l) { - return l.getWorld().getName() + ";" + l.getBlockX() + ";" + l.getBlockY() + ";" + l.getBlockZ(); + return l.getWorld().getName() + ';' + l.getBlockX() + ';' + l.getBlockY() + ';' + l.getBlockZ(); } private static String serializeChunk(Chunk chunk) { - return chunk.getWorld().getName() + ";Chunk;" + chunk.getX() + ";" + chunk.getZ(); + return chunk.getWorld().getName() + ";Chunk;" + chunk.getX() + ';' + chunk.getZ(); } private static String locationToChunkString(Location l) { - return l.getWorld().getName() + ";Chunk;" + (l.getBlockX() >> 4) + ";" + (l.getBlockZ() >> 4); + return l.getWorld().getName() + ";Chunk;" + (l.getBlockX() >> 4) + ';' + (l.getBlockZ() >> 4); } private static Location deserializeLocation(String l) { @@ -137,7 +137,7 @@ public class BlockStorage { } } } catch (Exception x) { - Slimefun.getLogger().log(Level.WARNING, "Failed to load " + file.getName() + "(" + key + ") for Slimefun " + Slimefun.getVersion(), x); + Slimefun.getLogger().log(Level.WARNING, "Failed to load " + file.getName() + '(' + key + ") for Slimefun " + Slimefun.getVersion(), x); } } done++; @@ -162,7 +162,7 @@ public class BlockStorage { try { if (world.getName().equals(key.split(";")[0])) SlimefunPlugin.getUtilities().mapChunks.put(key, cfg.getString(key)); } catch (Exception x) { - Slimefun.getLogger().log(Level.WARNING, "Failed to load " + chunks.getName() + " in World " + world.getName() + "(" + key + ") for Slimefun " + Slimefun.getVersion(), x); + Slimefun.getLogger().log(Level.WARNING, "Failed to load " + chunks.getName() + " in World " + world.getName() + '(' + key + ") for Slimefun " + Slimefun.getVersion(), x); } } } @@ -526,7 +526,7 @@ public class BlockStorage { } private static void refreshCache(BlockStorage storage, Location l, String key, String value, boolean updateTicker) { - Config cfg = storage.blocksCache.containsKey(key) ? storage.blocksCache.get(key): new Config(path_blocks + l.getWorld().getName() + "/" + key + ".sfb"); + Config cfg = storage.blocksCache.containsKey(key) ? storage.blocksCache.get(key): new Config(path_blocks + l.getWorld().getName() + '/' + key + ".sfb"); cfg.setValue(serializeLocation(l), value); storage.blocksCache.put(key, cfg); diff --git a/src/me/mrCookieSlime/Slimefun/api/ErrorReport.java b/src/me/mrCookieSlime/Slimefun/api/ErrorReport.java index 546dc2e80..0ddf97617 100644 --- a/src/me/mrCookieSlime/Slimefun/api/ErrorReport.java +++ b/src/me/mrCookieSlime/Slimefun/api/ErrorReport.java @@ -56,14 +56,14 @@ public class ErrorReport { for (Plugin p: Bukkit.getPluginManager().getPlugins()) { if (Bukkit.getPluginManager().isPluginEnabled(p)) { - plugins.add(" + " + p.getName() + " " + p.getDescription().getVersion()); + plugins.add(" + " + p.getName() + ' ' + p.getDescription().getVersion()); if (p.getDescription().getDepend().contains("Slimefun") || p.getDescription().getSoftDepend().contains("Slimefun")) - addons.add(" + " + p.getName() + " " + p.getDescription().getVersion()); + addons.add(" + " + p.getName() + ' ' + p.getDescription().getVersion()); } else { - plugins.add(" - " + p.getName() + " " + p.getDescription().getVersion()); + plugins.add(" - " + p.getName() + ' ' + p.getDescription().getVersion()); if (p.getDescription().getDepend().contains("Slimefun") || p.getDescription().getSoftDepend().contains("Slimefun")) - addons.add(" - " + p.getName() + " " + p.getDescription().getVersion()); + addons.add(" - " + p.getName() + ' ' + p.getDescription().getVersion()); } } diff --git a/src/me/mrCookieSlime/Slimefun/api/Slimefun.java b/src/me/mrCookieSlime/Slimefun/api/Slimefun.java index 4afb7deb0..5423dc959 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Slimefun.java +++ b/src/me/mrCookieSlime/Slimefun/api/Slimefun.java @@ -56,7 +56,7 @@ public final class Slimefun { * or null if it doesn't exist. */ public static Object getItemValue(String id, String key) { - return getItemConfig().getValue(id + "." + key); + return getItemConfig().getValue(id + '.' + key); } /** @@ -67,7 +67,7 @@ public final class Slimefun { * @param value the value to set, can be null */ public static void setItemVariable(String id, String key, Object value) { - getItemConfig().setDefaultValue(id + "." + key, value); + getItemConfig().setDefaultValue(id + '.' + key, value); } /** diff --git a/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java b/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java index 7193ba6d6..5413cedbe 100644 --- a/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java +++ b/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java @@ -49,7 +49,7 @@ public final class SlimefunBackup { try (ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file))) { for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) { for (File f: f1.listFiles()) { - ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName()); + ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + '/' + f.getName()); output.putNextEntry(entry); try (FileInputStream input = new FileInputStream(f)) { diff --git a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java index 261120a65..1f82af41d 100644 --- a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -111,7 +111,7 @@ public class TickerTask implements Runnable { buggedBlocks.put(l, errors); } else if (errors == 4) { - Slimefun.getLogger().log(Level.SEVERE, "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getID() + ")"); + Slimefun.getLogger().log(Level.SEVERE, "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + '(' + item.getID() + ")"); Slimefun.getLogger().log(Level.SEVERE, "has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated."); Slimefun.getLogger().log(Level.SEVERE, "Check your /plugins/Slimefun/error-reports/ folder for details."); Slimefun.getLogger().log(Level.SEVERE, " "); @@ -147,7 +147,7 @@ public class TickerTask implements Runnable { buggedBlocks.put(l, errors); } else if (errors == 4) { - Slimefun.getLogger().log(Level.SEVERE, "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getID() + ")"); + Slimefun.getLogger().log(Level.SEVERE, "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + '(' + item.getID() + ")"); Slimefun.getLogger().log(Level.SEVERE, "has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated."); Slimefun.getLogger().log(Level.SEVERE, "Check your /plugins/Slimefun/error-reports/ folder for details."); Slimefun.getLogger().log(Level.SEVERE, " "); diff --git a/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java b/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java index b96ab9ee7..717c5f7f0 100644 --- a/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java +++ b/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java @@ -21,7 +21,7 @@ public class BlockMenu extends DirtyChestMenu { private ItemManipulationEvent event; private static String serializeLocation(Location l) { - return l.getWorld().getName() + ";" + l.getBlockX() + ";" + l.getBlockY() + ";" + l.getBlockZ(); + return l.getWorld().getName() + ';' + l.getBlockX() + ';' + l.getBlockY() + ';' + l.getBlockZ(); } public BlockMenu(BlockMenuPreset preset, Location l) { diff --git a/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java b/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java index 1110c59d2..03a6b2e33 100644 --- a/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java +++ b/src/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java @@ -270,7 +270,7 @@ public class SlimefunCommand implements CommandExecutor, Listener { else { Research research = null; for (Research res : Research.list()) { - if (res.getName().toUpperCase().replace(" ", "_").equalsIgnoreCase(args[2])) { + if (res.getName().toUpperCase().replace(' ', '_').equalsIgnoreCase(args[2])) { research = res; break; } diff --git a/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java b/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java index 130cd1785..4c128d4fe 100644 --- a/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java +++ b/src/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java @@ -30,7 +30,7 @@ public class SlimefunTabCompleter implements TabCompleter { else if (args[0].equalsIgnoreCase("research")) { List researches = new ArrayList<>(); for (Research res : Research.list()) { - researches.add(res.getName().toUpperCase().replace(" ", "_")); + researches.add(res.getName().toUpperCase().replace(' ', '_')); } researches.add("all"); researches.add("reset"); diff --git a/src/me/mrCookieSlime/Slimefun/hooks/github/IntegerFormat.java b/src/me/mrCookieSlime/Slimefun/hooks/github/IntegerFormat.java index 794a5f1bf..9fc269993 100644 --- a/src/me/mrCookieSlime/Slimefun/hooks/github/IntegerFormat.java +++ b/src/me/mrCookieSlime/Slimefun/hooks/github/IntegerFormat.java @@ -19,7 +19,7 @@ public final class IntegerFormat { public static Date parseGitHubDate(String str) { try { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(str.replace("T", " ").replace("Z", "")); + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(str.replace('T', ' ').replace("Z", "")); } catch (ParseException x) { Slimefun.getLogger().log(Level.SEVERE, "An Error occured while parsing a GitHub-Date for Slimefun " + Slimefun.getVersion(), x); return null; diff --git a/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java b/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java index 5e0b4ea45..feeb4cac0 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java @@ -113,7 +113,7 @@ public class TalismanListener implements Listener { List enchantments = new ArrayList<>(); for (Enchantment en : Enchantment.values()) { for (int i = 1; i <= en.getMaxLevel(); i++) { - if ((Boolean) Slimefun.getItemValue("MAGICIAN_TALISMAN", "allow-enchantments." + en.getKey().getKey() + ".level." + i) && en.canEnchantItem(e.getItem())) enchantments.add(en.getKey().getKey() + "-" + i); + if ((Boolean) Slimefun.getItemValue("MAGICIAN_TALISMAN", "allow-enchantments." + en.getKey().getKey() + ".level." + i) && en.canEnchantItem(e.getItem())) enchantments.add(en.getKey().getKey() + '-' + i); } } String enchant = enchantments.get(random.nextInt(enchantments.size())); From 96b45868adada5d361a4a4ac37a2ae3201e4af68 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 6 Sep 2019 00:10:37 +0200 Subject: [PATCH 29/34] Removed unneeded Holograms --- .../SlimefunItem/machines/InfusedHopper.java | 32 ++--------- .../SlimefunItem/machines/XPCollector.java | 40 ++++++-------- .../electric/AnimalGrowthAccelerator.java | 27 ++++----- .../machines/electric/AutoBreeder.java | 26 ++++----- .../androids/ProgrammableAndroid.java | 55 +++++++++---------- .../Slimefun/holograms/AndroidHologram.java | 53 ------------------ .../AnimalGrowthAcceleratorHologram.java | 36 ------------ .../holograms/AutoBreederHologram.java | 34 ------------ .../holograms/InfusedHopperHologram.java | 36 ------------ .../holograms/XPCollectorHologram.java | 36 ------------ 10 files changed, 75 insertions(+), 300 deletions(-) delete mode 100644 src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java delete mode 100644 src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java delete mode 100644 src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java delete mode 100644 src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java delete mode 100644 src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java index 3e9374ae0..23c35c62a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java @@ -1,44 +1,26 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; -import me.mrCookieSlime.Slimefun.holograms.InfusedHopperHologram; public class InfusedHopper extends SimpleSlimefunItem { public InfusedHopper(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { super(category, item, id, recipeType, recipe); - - SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - InfusedHopperHologram.getArmorStand(b, true); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - InfusedHopperHologram.remove(b); - return true; - } - }); } @Override @@ -53,15 +35,13 @@ public class InfusedHopper extends SimpleSlimefunItem { return; } - ArmorStand hologram = InfusedHopperHologram.getArmorStand(b, true); + Location l = b.getLocation().add(0.5, 1.2, 0.5); boolean sound = false; - for (Entity n: hologram.getNearbyEntities(3.5D, 3.5D, 3.5D)) { - if (n instanceof Item && !n.hasMetadata("no_pickup") && n.getLocation().distance(hologram.getLocation()) > 0.4D) { - n.setVelocity(new Vector(0, 0.1, 0)); - n.teleport(hologram); - sound = true; - } + for (Entity n: b.getWorld().getNearbyEntities(l, 3.5D, 3.5D, 3.5D, n -> n instanceof Item && n.isValid() && !n.hasMetadata("no_pickup") && n.getLocation().distanceSquared(l) > 0.1)) { + n.setVelocity(new Vector(0, 0.1, 0)); + n.teleport(l); + sound = true; } if (sound) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index 183faa3b9..207653b6a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -24,7 +24,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.holograms.XPCollectorHologram; public class XPCollector extends SlimefunItem implements InventoryBlock { @@ -43,7 +42,6 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - XPCollectorHologram.remove(b); BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getOutputSlots()) { @@ -101,30 +99,26 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { } protected void tick(Block b) { - Iterator iterator = XPCollectorHologram.getArmorStand(b, true).getNearbyEntities(4D, 4D, 4D).iterator(); - while (iterator.hasNext()) { + Iterator iterator = b.getWorld().getNearbyEntities(b.getLocation(), 4.0, 4.0, 4.0, n -> n instanceof ExperienceOrb && n.isValid()).iterator(); + int xp = 0; + + while (iterator.hasNext() && xp == 0) { Entity n = iterator.next(); - if (n instanceof ExperienceOrb) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; - - if (n.isValid()) { - int xp = getEXP(b) + ((ExperienceOrb) n).getExperience(); - - ChargableBlock.addCharge(b, -getEnergyConsumption()); - n.remove(); - - int withdrawn = 0; - for (int level = 0; level < getEXP(b); level = level + 10) { - if (fits(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"))) { - withdrawn = withdrawn + 10; - pushItems(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge")); - } - } - BlockStorage.addBlockInfo(b, "stored-exp", String.valueOf(xp - withdrawn)); - - return; + if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + + xp = getEXP(b) + ((ExperienceOrb) n).getExperience(); + + ChargableBlock.addCharge(b, -getEnergyConsumption()); + n.remove(); + + int withdrawn = 0; + for (int level = 0; level < getEXP(b); level = level + 10) { + if (fits(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"))) { + withdrawn = withdrawn + 10; + pushItems(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge")); } } + BlockStorage.addBlockInfo(b, "stored-exp", String.valueOf(xp - withdrawn)); } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java index e0d2774d4..5212e3361 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java @@ -25,7 +25,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAcceleratorHologram; public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBlock { @@ -36,7 +35,6 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl createPreset(this, "&bGrowth Accelerator", this::constructMenu); registerBlockHandler(name, (p, b, tool, reason) -> { - AnimalGrowthAcceleratorHologram.remove(b); BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getInputSlots()) { @@ -91,18 +89,21 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl } protected void tick(Block b) { - for (Entity n : AnimalGrowthAcceleratorHologram.getArmorStand(b, true).getNearbyEntities(3D, 3D, 3D)) { - if (n instanceof Ageable && !((Ageable) n).isAdult()) { - for (int slot: getInputSlots()) { - if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; - ChargableBlock.addCharge(b, -getEnergyConsumption()); - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); - ((Ageable) n).setAge(((Ageable) n).getAge() + 2000); - if (((Ageable) n).getAge() > 0) ((Ageable) n).setAge(0); - n.getWorld().spawnParticle(Particle.VILLAGER_HAPPY,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F); - return; + for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 3.0, 3.0, 3.0, n -> n instanceof Ageable && n.isValid() && !((Ageable) n).isAdult())) { + for (int slot: getInputSlots()) { + if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { + if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + + ChargableBlock.addCharge(b, -getEnergyConsumption()); + BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); + ((Ageable) n).setAge(((Ageable) n).getAge() + 2000); + + if (((Ageable) n).getAge() > 0) { + ((Ageable) n).setAge(0); } + + n.getWorld().spawnParticle(Particle.VILLAGER_HAPPY,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F); + return; } } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java index 9f334880b..ee310ff03 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java @@ -5,6 +5,7 @@ import java.util.logging.Level; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.block.Block; +import org.bukkit.entity.Animals; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.ItemStack; @@ -12,7 +13,6 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.Animals; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; @@ -25,7 +25,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; -import me.mrCookieSlime.Slimefun.holograms.AutoBreederHologram; public class AutoBreeder extends SlimefunItem implements InventoryBlock { @@ -36,7 +35,6 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { createPreset(this, "&6Auto Breeder", this::constructMenu); registerBlockHandler(name, (p, b, tool, reason) -> { - AutoBreederHologram.remove(b); BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getInputSlots()) { @@ -91,17 +89,17 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { } protected void tick(Block b) throws Exception { - for (Entity n : AutoBreederHologram.getArmorStand(b, true).getNearbyEntities(4D, 2D, 4D)) { - if (Animals.isFeedable(n)) { - for (int slot : getInputSlots()) { - if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; - ChargableBlock.addCharge(b, -getEnergyConsumption()); - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); - Animals.feed(n); - n.getWorld().spawnParticle(Particle.HEART,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F); - return; - } + for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 4.0, 2.0, 4.0, n -> n instanceof Animals && n.isValid() && ((Animals) n).isAdult() && !((Animals) n).isLoveMode())) { + for (int slot : getInputSlots()) { + if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { + if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + + ChargableBlock.addCharge(b, -getEnergyConsumption()); + BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); + + ((Animals) n).setLoveModeTicks(600); + n.getWorld().spawnParticle(Particle.HEART,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F); + return; } } } diff --git a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index e615a2e43..650939d29 100644 --- a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -67,7 +67,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; -import me.mrCookieSlime.Slimefun.holograms.AndroidHologram; public abstract class ProgrammableAndroid extends SlimefunItem implements InventoryBlock { @@ -239,7 +238,6 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } } } - AndroidHologram.remove(b); } return allow; @@ -448,34 +446,33 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } private void killEntities(Block b, double damage, Predicate predicate) { - for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) { - if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && predicate.test(n)) { - boolean attack = false; - - switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { - case NORTH: - attack = n.getLocation().getZ() < b.getZ(); - break; - case EAST: - attack = n.getLocation().getX() > b.getX(); - break; - case SOUTH: - attack = n.getLocation().getZ() > b.getZ(); - break; - case WEST: - attack = n.getLocation().getX() < b.getX(); - break; - default: - break; - } - - if (attack) { - if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); - n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); + double radius = 4.0 + getTier(); + for (Entity n: b.getWorld().getNearbyEntities(b.getLocation(), radius, radius, radius, n -> n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.isValid() && predicate.test(n))) { + boolean attack = false; + + switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { + case NORTH: + attack = n.getLocation().getZ() < b.getZ(); + break; + case EAST: + attack = n.getLocation().getX() > b.getX(); + break; + case SOUTH: + attack = n.getLocation().getZ() > b.getZ(); + break; + case WEST: + attack = n.getLocation().getX() < b.getX(); + break; + default: + break; + } + + if (attack) { + if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance); + n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b))); - ((LivingEntity) n).damage(damage); - break; - } + ((LivingEntity) n).damage(damage); + break; } } } diff --git a/src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java deleted file mode 100644 index 1b9ce0caa..000000000 --- a/src/me/mrCookieSlime/Slimefun/holograms/AndroidHologram.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.mrCookieSlime.Slimefun.holograms; - -import java.util.List; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; - -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; - -public final class AndroidHologram { - - private AndroidHologram() {} - - private static final double offset = 1.2; - - public static void update(final Block b, final String name) { - ArmorStand hologram = getArmorStand(b, true); - hologram.setCustomName(name); - } - - public static void remove(final Block b) { - ArmorStand hologram = getArmorStand(b, false); - if (hologram != null) hologram.remove(); - } - - public static List getNearbyEntities(final Block b, double radius) { - ArmorStand hologram = getArmorStand(b, true); - return hologram.getNearbyEntities(radius, 1D, radius); - } - - public static List getNearbyEntities(final Block b, double radius, double y) { - ArmorStand hologram = getArmorStand(b, true); - return hologram.getNearbyEntities(radius, y, radius); - } - - private static ArmorStand getArmorStand(Block b, boolean createIfNoneExists) { - Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + offset, b.getZ() + 0.5); - - for (Entity n: l.getChunk().getEntities()) { - if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; - } - - if (!createIfNoneExists) return null; - - ArmorStand hologram = ArmorStandFactory.createHidden(l); - hologram.setCustomNameVisible(false); - hologram.setCustomName(null); - return hologram; - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java deleted file mode 100644 index eae0f3be4..000000000 --- a/src/me/mrCookieSlime/Slimefun/holograms/AnimalGrowthAcceleratorHologram.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.mrCookieSlime.Slimefun.holograms; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; - -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; - -public final class AnimalGrowthAcceleratorHologram { - - private AnimalGrowthAcceleratorHologram() {} - - private static final double offset = 1.2; - - public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneExists) { - Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5); - - for (Entity n: l.getChunk().getEntities()) { - if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; - } - - if (!createIfNoneExists) return null; - - ArmorStand hologram = ArmorStandFactory.createHidden(l); - hologram.setCustomNameVisible(false); - hologram.setCustomName(null); - return hologram; - } - - public static void remove(Block b) { - ArmorStand hologram = getArmorStand(b, false); - if (hologram != null) hologram.remove(); - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java deleted file mode 100644 index fdbc70afd..000000000 --- a/src/me/mrCookieSlime/Slimefun/holograms/AutoBreederHologram.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.mrCookieSlime.Slimefun.holograms; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; - -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; - -public final class AutoBreederHologram { - - private AutoBreederHologram() {} - - public static ArmorStand getArmorStand(Block hopper, boolean createIfNonExists) { - Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY(), hopper.getZ() + 0.5); - - for (Entity n: l.getChunk().getEntities()) { - if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; - } - - if (!createIfNonExists) return null; - - ArmorStand hologram = ArmorStandFactory.createHidden(l); - hologram.setCustomNameVisible(false); - hologram.setCustomName(null); - return hologram; - } - - public static void remove(Block b) { - ArmorStand hologram = getArmorStand(b, false); - if (hologram != null) hologram.remove(); - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java deleted file mode 100644 index cf72d9769..000000000 --- a/src/me/mrCookieSlime/Slimefun/holograms/InfusedHopperHologram.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.mrCookieSlime.Slimefun.holograms; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; - -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; - -public final class InfusedHopperHologram { - - private InfusedHopperHologram() {} - - private static final double offset = 1.2; - - public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneExists) { - Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5); - - for (Entity n: l.getChunk().getEntities()) { - if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; - } - - if (!createIfNoneExists) return null; - - ArmorStand hologram = ArmorStandFactory.createHidden(l); - hologram.setCustomNameVisible(false); - hologram.setCustomName(null); - return hologram; - } - - public static void remove(Block b) { - ArmorStand hologram = getArmorStand(b, false); - if (hologram != null) hologram.remove(); - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java deleted file mode 100644 index bf0dd22c6..000000000 --- a/src/me/mrCookieSlime/Slimefun/holograms/XPCollectorHologram.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.mrCookieSlime.Slimefun.holograms; - -import org.bukkit.Location; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Entity; - -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; - -public final class XPCollectorHologram { - - private XPCollectorHologram() {} - - private static final double offset = 1.2; - - public static ArmorStand getArmorStand(Block hopper, boolean createIfNoneExists) { - Location l = new Location(hopper.getWorld(), hopper.getX() + 0.5, hopper.getY() + offset, hopper.getZ() + 0.5); - - for (Entity n: l.getChunk().getEntities()) { - if (n instanceof ArmorStand && n.getCustomName() == null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n; - } - - if (!createIfNoneExists) return null; - - ArmorStand hologram = ArmorStandFactory.createHidden(l); - hologram.setCustomNameVisible(false); - hologram.setCustomName(null); - return hologram; - } - - public static void remove(Block b) { - ArmorStand hologram = getArmorStand(b, false); - if (hologram != null) hologram.remove(); - } - -} From 26750e5cfc73f941e2f9e8c9e4e41eff12c241ea Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 6 Sep 2019 00:17:14 +0200 Subject: [PATCH 30/34] Reduced technical debt --- .../machines/ReactorAccessPort.java | 6 +--- .../electric/AnimalGrowthAccelerator.java | 10 +++--- .../machines/electric/AutoBreeder.java | 10 +++--- .../machines/electric/FluidPump.java | 14 ++++---- .../machines/electric/WitherAssembler.java | 10 +++--- .../machines/{ => electric}/XPCollector.java | 12 +++---- .../electric/generators/CoalGenerator.java | 9 +++-- .../Slimefun/Setup/SlimefunSetup.java | 2 +- .../androids/ProgrammableAndroid.java | 36 ++++++++----------- 9 files changed, 46 insertions(+), 63 deletions(-) rename src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/{ => electric}/XPCollector.java (94%) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index fe8432bb9..067748973 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -34,7 +34,7 @@ public class ReactorAccessPort extends SlimefunItem { public ReactorAccessPort(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); - new BlockMenuPreset(name, getInventoryTitle()) { + new BlockMenuPreset(name, "&2Reactor Access Port") { @Override public void init() { @@ -146,10 +146,6 @@ public class ReactorAccessPort extends SlimefunItem { preset.addItem(7, new CustomItem(SlimefunItems.REACTOR_COOLANT_CELL, "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells", "&4Without any Coolant Cells, your Reactor", "&4will explode"),(p, slot, item, action) -> false); } - public String getInventoryTitle() { - return "&2Reactor Access Port"; - } - public int[] getInputSlots() { return new int[] {19, 28, 37, 25, 34, 43}; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java index 5212e3361..e7b999483 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java @@ -30,6 +30,8 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; + protected int energyConsumption = 14; + public AnimalGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); createPreset(this, "&bGrowth Accelerator", this::constructMenu); @@ -54,10 +56,6 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl } } - public int getEnergyConsumption() { - return 14; - } - @Override public int[] getInputSlots() { return new int[] {10, 11, 12, 13, 14, 15, 16}; @@ -92,9 +90,9 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 3.0, 3.0, 3.0, n -> n instanceof Ageable && n.isValid() && !((Ageable) n).isAdult())) { for (int slot: getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + if (ChargableBlock.getCharge(b) < energyConsumption) return; - ChargableBlock.addCharge(b, -getEnergyConsumption()); + ChargableBlock.addCharge(b, -energyConsumption); BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); ((Ageable) n).setAge(((Ageable) n).getAge() + 2000); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java index ee310ff03..9ea1cdc09 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java @@ -30,6 +30,8 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; + protected int energyConsumption = 60; + public AutoBreeder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); createPreset(this, "&6Auto Breeder", this::constructMenu); @@ -54,10 +56,6 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { } } - public int getEnergyConsumption() { - return 60; - } - @Override public int[] getInputSlots() { return new int[] {10, 11, 12, 13, 14, 15, 16}; @@ -92,9 +90,9 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 4.0, 2.0, 4.0, n -> n instanceof Animals && n.isValid() && ((Animals) n).isAdult() && !((Animals) n).isLoveMode())) { for (int slot : getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + if (ChargableBlock.getCharge(b) < energyConsumption) return; - ChargableBlock.addCharge(b, -getEnergyConsumption()); + ChargableBlock.addCharge(b, -energyConsumption); BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); ((Animals) n).setLoveModeTicks(600); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java index da7f5fb29..c705679a9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java @@ -33,6 +33,8 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30}; private static final int[] border_out = {14, 15, 16, 17, 23, 26, 32, 33, 34, 35}; + protected int energyConsumption = 32; + public FluidPump(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); @@ -82,13 +84,13 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { if (fluid.getType() == Material.LAVA) { for (int slot : getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + if (ChargableBlock.getCharge(b) < energyConsumption) return; ItemStack output = new ItemStack(Material.LAVA_BUCKET); if (!fits(b, output)) return; - ChargableBlock.addCharge(b, -getEnergyConsumption()); + ChargableBlock.addCharge(b, -energyConsumption); BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); pushItems(b, output); @@ -104,13 +106,13 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { else if (fluid.getType() == Material.WATER) { for (int slot : getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + if (ChargableBlock.getCharge(b) < energyConsumption) return; ItemStack output = new ItemStack(Material.WATER_BUCKET); if (!fits(b, output)) return; - ChargableBlock.addCharge(b, -getEnergyConsumption()); + ChargableBlock.addCharge(b, -energyConsumption); BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); pushItems(b, output); @@ -121,10 +123,6 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { } } } - - private int getEnergyConsumption() { - return 32; - } @Override public void preRegister() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java index 91f4633d7..f3ce751fb 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java @@ -38,6 +38,8 @@ public class WitherAssembler extends SlimefunItem { private static final int[] border_1 = {9, 10, 11, 18, 20, 27, 29, 36, 37, 38}; private static final int[] border_2 = {15, 16, 17, 24, 26, 33, 35, 42, 43, 44}; + protected int energyConsumption = 4096; + public WitherAssembler(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); @@ -186,7 +188,7 @@ public class WitherAssembler extends SlimefunItem { public void tick(final Block b, SlimefunItem sf, Config data) { if (BlockStorage.getLocationInfo(b.getLocation(), "enabled").equals("false")) return; if (lifetime % 60 == 0) { - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + if (ChargableBlock.getCharge(b) < energyConsumption) return; int soulsand = 0; int skulls = 0; @@ -240,7 +242,7 @@ public class WitherAssembler extends SlimefunItem { } } - ChargableBlock.addCharge(b, -getEnergyConsumption()); + ChargableBlock.addCharge(b, -energyConsumption); final double offset = Double.parseDouble(BlockStorage.getLocationInfo(b.getLocation(), "offset")); @@ -261,8 +263,4 @@ public class WitherAssembler extends SlimefunItem { }); } - public int getEnergyConsumption() { - return 4096; - } - } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java similarity index 94% rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java index 207653b6a..5019d44b4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; import java.util.Iterator; import java.util.logging.Level; @@ -29,6 +29,8 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; + protected int energyConsumption = 10; + public XPCollector(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); createPreset(this, "&aEXP Collector", this::constructMenu); @@ -74,10 +76,6 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { } } - public int getEnergyConsumption() { - return 10; - } - @Override public void preRegister() { addItemHandler(new BlockTicker() { @@ -104,11 +102,11 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { while (iterator.hasNext() && xp == 0) { Entity n = iterator.next(); - if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + if (ChargableBlock.getCharge(b) < energyConsumption) return; xp = getEXP(b) + ((ExperienceOrb) n).getExperience(); - ChargableBlock.addCharge(b, -getEnergyConsumption()); + ChargableBlock.addCharge(b, -energyConsumption); n.remove(); int withdrawn = 0; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java index 11db7221d..e972e9aa5 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java @@ -17,11 +17,14 @@ public abstract class CoalGenerator extends AGenerator { @Override public void registerDefaultRecipes() { - registerFuel(new MachineFuel(8, new ItemStack(Material.COAL))); - registerFuel(new MachineFuel(8, new ItemStack(Material.CHARCOAL))); registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK))); registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD))); - + + // Coals + for (Material mat: Tag.ITEMS_COALS.getValues()) { + registerFuel(new MachineFuel(8, new ItemStack(mat))); + } + // Logs for (Material mat: Tag.LOGS.getValues()) { registerFuel(new MachineFuel(2, new ItemStack(mat))); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 4472258c7..e2e23e450 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -111,7 +111,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HologramProjector import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.InfusedHopper; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AnimalGrowthAccelerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoAnvil; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoBreeder; @@ -141,6 +140,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.NetherDr import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.OilPump; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Refinery; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.WitherAssembler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.XPCollector; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CoalGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CombustionGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.LavaGenerator; diff --git a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index 650939d29..3c6779c05 100644 --- a/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -21,6 +21,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.Sound; +import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Dispenser; @@ -91,12 +92,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent blockblacklist.add(Material.STRUCTURE_BLOCK); } - private Set recipes = new HashSet<>(); - private Random random = new Random(); - - public String getInventoryTitle() { - return "Programmable Android"; - } + private final Set recipes = new HashSet<>(); + private final Random random = new Random(); @Override public int[] getInputSlots() { @@ -116,26 +113,23 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent super(category, item, name, recipeType, recipe); if (getTier() == 1) { - registerFuel(new MachineFuel(80, new ItemStack(Material.COAL))); - registerFuel(new MachineFuel(80, new ItemStack(Material.CHARCOAL))); registerFuel(new MachineFuel(800, new ItemStack(Material.COAL_BLOCK))); registerFuel(new MachineFuel(45, new ItemStack(Material.BLAZE_ROD))); + // Coals + for (Material mat: Tag.ITEMS_COALS.getValues()) { + registerFuel(new MachineFuel(8, new ItemStack(mat))); + } + // Logs - registerFuel(new MachineFuel(4, new ItemStack(Material.OAK_LOG))); - registerFuel(new MachineFuel(4, new ItemStack(Material.BIRCH_LOG))); - registerFuel(new MachineFuel(4, new ItemStack(Material.SPRUCE_LOG))); - registerFuel(new MachineFuel(4, new ItemStack(Material.JUNGLE_LOG))); - registerFuel(new MachineFuel(4, new ItemStack(Material.DARK_OAK_LOG))); - registerFuel(new MachineFuel(4, new ItemStack(Material.ACACIA_LOG))); + for (Material mat: Tag.LOGS.getValues()) { + registerFuel(new MachineFuel(2, new ItemStack(mat))); + } // Wooden Planks - registerFuel(new MachineFuel(1, new ItemStack(Material.OAK_PLANKS))); - registerFuel(new MachineFuel(1, new ItemStack(Material.BIRCH_PLANKS))); - registerFuel(new MachineFuel(1, new ItemStack(Material.SPRUCE_PLANKS))); - registerFuel(new MachineFuel(1, new ItemStack(Material.JUNGLE_PLANKS))); - registerFuel(new MachineFuel(1, new ItemStack(Material.DARK_OAK_PLANKS))); - registerFuel(new MachineFuel(1, new ItemStack(Material.ACACIA_PLANKS))); + for (Material mat: Tag.PLANKS.getValues()) { + registerFuel(new MachineFuel(1, new ItemStack(mat))); + } } else if (getTier() == 2){ registerFuel(new MachineFuel(100, new ItemStack(Material.LAVA_BUCKET))); @@ -148,7 +142,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent registerFuel(new MachineFuel(3000, SlimefunItems.BOOSTED_URANIUM)); } - new BlockMenuPreset(name, getInventoryTitle()) { + new BlockMenuPreset(name, "Programmable Android") { @Override public void init() { From df7390f9b3c85d624085775a1916329de66b3d69 Mon Sep 17 00:00:00 2001 From: WalshyDev Date: Thu, 5 Sep 2019 23:24:09 +0100 Subject: [PATCH 31/34] Small improvement --- src/me/mrCookieSlime/Slimefun/SlimefunGuide.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index d68fa978f..8335c4734 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -1033,11 +1033,9 @@ public final class SlimefunGuide { String timeleft = ""; final int minutes = (int) (seconds / 60L); if (minutes > 0) { - timeleft = timeleft + minutes + "m "; + timeleft += minutes + "m "; } seconds -= minutes * 60; - timeleft = timeleft + seconds + "s"; - return "&7" + timeleft; + return "&7" + timeleft + seconds + "s"; } - } From e0d12f467abc90a1c3cb4e6fe777e113259e7772 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 6 Sep 2019 00:27:50 +0200 Subject: [PATCH 32/34] Removed unused imports --- .../SlimefunItem/items/SoulboundRune.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index d25333b93..326d33a39 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -1,15 +1,19 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; @@ -17,13 +21,8 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.api.Slimefun; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - public class SoulboundRune extends SimpleSlimefunItem { public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { @@ -35,9 +34,12 @@ public class SoulboundRune extends SimpleSlimefunItem { return (e, p, i) -> { ItemStack item = i.getItemStack(); if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) { - if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, true)) return true; - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + + if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, true)) { + return true; + } + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { // Being sure the entity is still valid and not picked up or whatsoever. if (!i.isValid()) return; @@ -46,6 +48,7 @@ public class SoulboundRune extends SimpleSlimefunItem { entity -> entity instanceof Item && !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) && !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true) ); + if (entites.isEmpty()) return; Entity entity = entites.stream().findFirst().get(); @@ -56,10 +59,7 @@ public class SoulboundRune extends SimpleSlimefunItem { e.setCancelled(true); ItemMeta enchMeta = ench.getItemMeta(); - - List lore; - if (enchMeta.hasLore()) lore = enchMeta.getLore(); - else lore = new ArrayList<>(); + List lore = enchMeta.hasLore() ? enchMeta.getLore(): new ArrayList<>(); // This lightning is just an effect, it deals no damage. l.getWorld().strikeLightningEffect(l); @@ -83,10 +83,12 @@ public class SoulboundRune extends SimpleSlimefunItem { Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true); } }, 10L); - } else { + } + else { Messages.local.sendTranslation(p, "messages.soulbound-rune.fail", true); } }, 20L); + return true; } return false; From 5a5651ab382e7f6763a98434d1c5873e15550fbf Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 6 Sep 2019 01:50:53 +0200 Subject: [PATCH 33/34] Fixes #1093 --- src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java index c336b435f..2065ccd57 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java @@ -21,7 +21,7 @@ public class MultiBlock { this.blocks = build; this.isSymmetric = isSymmetric(build); //Hacky, the other constructor should be used - for (int i = 1; i < 9; i *=3) + for (int i = 1; i < 9; i +=3) { if (trigger.equals(build[i])) { From 92938083579d88f27b36e0fef6e94881e738304e Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 6 Sep 2019 02:16:45 +0200 Subject: [PATCH 34/34] Fixed Multiblocks. --- src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java index a59a6fac7..0c789dc49 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java @@ -97,15 +97,15 @@ public class BlockListener implements Listener { } protected boolean compareMaterials(Block b, Material[] blocks, boolean onlyTwoWay) { - if (!compareMaterialsVertical(b, blocks[2], blocks[5], blocks[8])) { + if (!compareMaterialsVertical(b, blocks[1], blocks[4], blocks[7])) { return false; } BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; for (BlockFace direction : directions) { - if (compareMaterialsVertical(b.getRelative(direction), blocks[1], blocks[4], blocks[7]) - && compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[3], blocks[6], blocks[9])) { + if (compareMaterialsVertical(b.getRelative(direction), blocks[0], blocks[3], blocks[6]) + && compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[2], blocks[5], blocks[8])) { return true; } }