From 10fe7238ad0cb5e0ed28d6db326b9d4455785f97 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Thu, 17 Oct 2019 23:14:43 +0200 Subject: [PATCH 01/80] fixed broken items --- .../Objects/SlimefunItem/items/DietCookie.java | 7 ++++++- .../Objects/SlimefunItem/items/ExplosiveShovel.java | 7 ++++++- .../Objects/SlimefunItem/items/HerculesPickaxe.java | 7 ++++++- .../Objects/SlimefunItem/items/HunterTalisman.java | 7 ++++++- .../Objects/SlimefunItem/items/LumberAxe.java | 7 ++++++- .../Objects/SlimefunItem/items/MonsterJerky.java | 7 ++++++- .../SlimefunItem/items/PickaxeOfContainment.java | 12 +++++++++++- .../Objects/SlimefunItem/items/SmeltersPickaxe.java | 7 ++++++- .../Objects/SlimefunItem/items/SoulboundRune.java | 5 +++++ .../Objects/SlimefunItem/items/SwordOfBeheading.java | 5 +++++ .../machines/electric/gps/GPSTransmitter.java | 7 ++++++- 11 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java index 85aa381dc..6f02bc63a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java @@ -17,7 +17,12 @@ public class DietCookie extends SimpleSlimefunItem { public DietCookie(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java index a0cc74dd3..a2a5cad0b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java @@ -25,7 +25,12 @@ public class ExplosiveShovel extends SimpleSlimefunItem imple public ExplosiveShovel(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) { super(category, item, recipeType, recipe, keys, values); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java index 6014e0ed1..df4eca36a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java @@ -17,7 +17,12 @@ public class HerculesPickaxe extends SimpleSlimefunItem { public HerculesPickaxe(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java index 827603b30..98f8f6a5a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java @@ -17,7 +17,12 @@ public class HunterTalisman extends Talisman { public HunterTalisman(SlimefunItemStack item, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance) { super(item, recipe, consumable, cancelEvent, messageSuffix, chance); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public void preRegister() { addItemHandler(getItemHandler()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java index 1ea8eec33..3c2638169 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java @@ -24,7 +24,12 @@ public class LumberAxe extends SimpleSlimefunItem implements public LumberAxe(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java index bc74ac0c6..dbbb716ab 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java @@ -17,7 +17,12 @@ public class MonsterJerky extends SimpleSlimefunItem { public MonsterJerky(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java index 244776362..f40418fac 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java @@ -23,7 +23,17 @@ public class PickaxeOfContainment extends SimpleSlimefunItem public PickaxeOfContainment(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java index 6cc7f7e0a..b822c5c4a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java @@ -21,7 +21,12 @@ public class SmeltersPickaxe extends SimpleSlimefunItem { public SmeltersPickaxe(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index 98029e314..bb63dabf2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -28,6 +28,11 @@ public class SoulboundRune extends SimpleSlimefunItem { super(category, item, id, type, recipe); } + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public ItemDropHandler getItemHandler() { return (e, p, i) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java index 14a7f8edc..6fdd3f3a2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java @@ -34,6 +34,11 @@ public class SwordOfBeheading extends SimpleSlimefunItem { super(category, item, recipeType, recipe, keys, values); } + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public EntityKillHandler getItemHandler() { return (e, entity, killer, item) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java index 4809316f9..4f32831f5 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java @@ -38,7 +38,12 @@ public abstract class GPSTransmitter extends SimpleSlimefunItem { } }); } - + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + public abstract double getMultiplier(int y); public abstract int getEnergyConsumption(); From 470f5f1afedab57844821c715ec5300c02a20365 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Thu, 17 Oct 2019 23:23:25 +0200 Subject: [PATCH 02/80] fixed requested changes --- .../Objects/SlimefunItem/items/HunterTalisman.java | 5 ----- .../Objects/SlimefunItem/items/PickaxeOfContainment.java | 5 ----- .../SlimefunItem/machines/electric/gps/GPSTransmitter.java | 7 +------ 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java index 98f8f6a5a..57a969e91 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java @@ -18,11 +18,6 @@ public class HunterTalisman extends Talisman { super(item, recipe, consumable, cancelEvent, messageSuffix, chance); } - @Override - protected boolean areItemHandlersPrivate() { - return false; - } - @Override public void preRegister() { addItemHandler(getItemHandler()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java index f40418fac..47f81c2e7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java @@ -29,11 +29,6 @@ public class PickaxeOfContainment extends SimpleSlimefunItem return false; } - @Override - protected boolean areItemHandlersPrivate() { - return false; - } - @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java index 4f32831f5..4809316f9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java @@ -38,12 +38,7 @@ public abstract class GPSTransmitter extends SimpleSlimefunItem { } }); } - - @Override - protected boolean areItemHandlersPrivate() { - return false; - } - + public abstract double getMultiplier(int y); public abstract int getEnergyConsumption(); From 576b297b502605446e509acd3790fef243ca2a35 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Fri, 18 Oct 2019 00:15:48 +0200 Subject: [PATCH 03/80] Fixed ExplosivePickaxe --- .../Objects/SlimefunItem/items/ExplosivePickaxe.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java index 2a7495d49..83bb15a80 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java @@ -33,6 +33,11 @@ public class ExplosivePickaxe extends SimpleSlimefunItem impl public ExplosivePickaxe(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) { super(category, item, recipeType, recipe, keys, values); } + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } @Override public BlockBreakHandler getItemHandler() { From 1dc669740cb1495facf49ae5ec33e211ec1b1868 Mon Sep 17 00:00:00 2001 From: AlexLander123 <13492360+AlexLander123@users.noreply.github.com> Date: Fri, 18 Oct 2019 21:27:28 +0800 Subject: [PATCH 04/80] Allow /sf cheat to have all categories unlocked - If the player who who is using /sf cheat have not unlocked the category, they will still have access to it - Removed empty code --- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 67 +++++++++---------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 24dc96c9b..cc3eb0518 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -432,11 +432,28 @@ public final class SlimefunGuide { } } - if (locked) { - // Dont display that Category... - } - else if (!(category instanceof LockedCategory)) { - if (!(category instanceof SeasonalCategory)) { + if (!locked) { + if (!(category instanceof LockedCategory)) { + if (!(category instanceof SeasonalCategory)) { + menu.addItem(index, category.getItem()); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + openCategory(pl, category, survival, 1, book); + return false; + }); + index++; + } + else { + if (((SeasonalCategory) category).isUnlocked()) { + menu.addItem(index, category.getItem()); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + openCategory(pl, category, survival, 1, book); + return false; + }); + index++; + } + } + } + else if (!survival || ((LockedCategory) category).hasUnlocked(p, profile)) { menu.addItem(index, category.getItem()); menu.addMenuClickHandler(index, (pl, slot, item, action) -> { openCategory(pl, category, survival, 1, book); @@ -445,38 +462,20 @@ public final class SlimefunGuide { index++; } else { - if (((SeasonalCategory) category).isUnlocked()) { - menu.addItem(index, category.getItem()); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - openCategory(pl, category, survival, 1, book); - return false; - }); - index++; + List parents = new ArrayList<>(); + parents.add(""); + 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()); } - } - } - else if (((LockedCategory) category).hasUnlocked(p, profile)) { - menu.addItem(index, category.getItem()); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - openCategory(pl, category, survival, 1, book); - return false; - }); - index++; - } - else { - List parents = new ArrayList<>(); - parents.add(""); - 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[0]))); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); + index++; } - - menu.addItem(index, new CustomItem(Material.BARRIER, "&4LOCKED &7- &r" + category.getItem().getItemMeta().getDisplayName(), parents.toArray(new String[0]))); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); - index++; } } } From 260c3a51dd475025f8407f015981ff81d5df56bd Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 10:30:15 +0200 Subject: [PATCH 05/80] More code cleanup (+ Added Sweet Berries Organic Food/Fertilizer) --- .../Slimefun/Lists/SlimefunItems.java | 42 +++--- .../abstractItems/AContainer.java | 5 + .../abstractItems/AGenerator.java | 5 + .../abstractItems/Teleporter.java | 7 +- .../SlimefunItem/items/InfernalBonemeal.java | 5 +- .../items/PortableGEOScanner.java | 8 +- .../SlimefunItem/items/SoulboundRune.java | 5 +- .../SlimefunItem/machines/InfusedHopper.java | 5 +- .../machines/electric/AutoBreeder.java | 7 +- .../machines/electric/ElevatorPlate.java | 7 +- .../machines/electric/Refinery.java | 5 +- .../generators/CombustionGenerator.java | 5 +- .../electric/generators/LavaGenerator.java | 5 +- .../machines/electric/geo/GEOMiner.java | 5 +- .../electric/geo/GEOScannerBlock.java | 7 +- .../machines/electric/geo/OilPump.java | 7 +- .../Slimefun/Setup/SlimefunSetup.java | 126 ++++++++++-------- .../androids/ProgrammableAndroid.java | 53 ++++---- .../Slimefun/api/TickerTask.java | 1 - .../commands/subcommands/StatsCommand.java | 4 +- .../Slimefun/holograms/EnergyHologram.java | 3 +- .../holograms/HologramProjectorHologram.java | 3 +- .../Slimefun/holograms/ReactorHologram.java | 3 +- .../Slimefun/holograms/SimpleHologram.java | 16 ++- 24 files changed, 191 insertions(+), 148 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 2eb9a743b..cf297d862 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -742,31 +742,33 @@ public final class SlimefunItems { public static final ItemStack NETHER_DRILL = new CustomItem(Material.RED_TERRACOTTA, "&4Nether Drill", "", "&rAllows you to mine Nether Ice", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7102 J/s", "", "&c&l! &cCan only be used in the Nether!", "&c&l! &cMake sure to Geo-Scan the Chunk first"); // Cargo - public static final ItemStack CARGO_MANAGER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&6Cargo Manager", "", "&rCore Component of an Item Transport Network"); - public static final ItemStack CARGO_NODE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMDdiN2VmNmZkNzg2NDg2NWMzMWMxZGM4N2JlZDI0YWI1OTczNTc5ZjVjNjYzOGZlY2I4ZGVkZWI0NDNmZjAifX19"), "&7Cargo Node &c(Connector)", "", "&rCargo Connector Pipe"); - public static final ItemStack CARGO_INPUT = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTZkMWMxYTY5YTNkZTlmZWM5NjJhNzdiZjNiMmUzNzZkZDI1Yzg3M2EzZDhmMTRmMWRkMzQ1ZGFlNGM0In19fQ=="), "&7Cargo Node &c(Input)", "", "&rCargo Input Pipe"); - public static final ItemStack CARGO_OUTPUT = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19"), "&7Cargo Node &c(Output)", "", "&rCargo Output Pipe"); - public static final ItemStack CARGO_OUTPUT_ADVANCED = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19"), "&6Advanced Cargo Node &c(Output)", "", "&rCargo Output Pipe"); + public static final ItemStack CARGO_MANAGER = new SlimefunItemStack("CARGO_MANAGER", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0=", "&6Cargo Manager", "", "&rCore Component of an Item Transport Network"); + public static final ItemStack CARGO_NODE = new SlimefunItemStack("CARGO_NODE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMDdiN2VmNmZkNzg2NDg2NWMzMWMxZGM4N2JlZDI0YWI1OTczNTc5ZjVjNjYzOGZlY2I4ZGVkZWI0NDNmZjAifX19", "&7Cargo Node &c(Connector)", "", "&rCargo Connector Pipe"); + public static final ItemStack CARGO_INPUT = new SlimefunItemStack("CARGO_NODE_INPUT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTZkMWMxYTY5YTNkZTlmZWM5NjJhNzdiZjNiMmUzNzZkZDI1Yzg3M2EzZDhmMTRmMWRkMzQ1ZGFlNGM0In19fQ==", "&7Cargo Node &c(Input)", "", "&rCargo Input Pipe"); + public static final ItemStack CARGO_OUTPUT = new SlimefunItemStack("CARGO_NODE_OUTPUT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19", "&7Cargo Node &c(Output)", "", "&rCargo Output Pipe"); + public static final ItemStack CARGO_OUTPUT_ADVANCED = new SlimefunItemStack("CARGO_NODE_OUTPUT_ADVANCED", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19", "&6Advanced Cargo Node &c(Output)", "", "&rCargo Output Pipe"); - public static final ItemStack AUTO_BREEDER = new CustomItem(Material.HAY_BLOCK, "&eAuto-Breeder", "", "&rRuns on &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/Animal"); + public static final ItemStack AUTO_BREEDER = new SlimefunItemStack("AUTO_BREEDER", Material.HAY_BLOCK, "&eAuto-Breeder", "", "&rRuns on &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/Animal"); public static final ItemStack ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9X"); - public static final ItemStack WHEAT_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Wheat"); - public static final ItemStack CARROT_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Carrots"); - public static final ItemStack POTATO_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Potatoes"); - public static final ItemStack SEEDS_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Seeds"); - public static final ItemStack BEETROOT_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Beetroot"); - public static final ItemStack MELON_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Melon"); - public static final ItemStack APPLE_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Apple"); + public static final ItemStack WHEAT_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_WHEAT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Wheat"); + public static final ItemStack CARROT_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_CARROT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Carrots"); + public static final ItemStack POTATO_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_POTATO", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Potatoes"); + public static final ItemStack SEEDS_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_SEEDS", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Seeds"); + public static final ItemStack BEETROOT_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_BEETROOT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Beetroot"); + public static final ItemStack MELON_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_MELON", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Melon"); + public static final ItemStack APPLE_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_APPLE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Apple"); + public static final ItemStack SWEET_BERRIES_ORGANIC_FOOD = new SlimefunItemStack("ORGANIC_FOOD_SWEET_BERRIES", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Food", "&7Content: &9Sweet Berries"); public static final ItemStack FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9X"); - public static final ItemStack WHEAT_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Wheat"); - public static final ItemStack CARROT_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Carrots"); - public static final ItemStack POTATO_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Potatoes"); - public static final ItemStack SEEDS_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Seeds"); - public static final ItemStack BEETROOT_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Beetroot"); - public static final ItemStack MELON_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Melon"); - public static final ItemStack APPLE_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Apple"); + public static final ItemStack WHEAT_FERTILIZER = new SlimefunItemStack("FERTILIZER_WHEAT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Wheat"); + public static final ItemStack CARROT_FERTILIZER = new SlimefunItemStack("FERTILIZER_CARROT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Carrots"); + public static final ItemStack POTATO_FERTILIZER = new SlimefunItemStack("FERTILIZER_POTATO", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Potatoes"); + public static final ItemStack SEEDS_FERTILIZER = new SlimefunItemStack("FERTILIZER_SEEDS", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Seeds"); + public static final ItemStack BEETROOT_FERTILIZER = new SlimefunItemStack("FERTILIZER_BEETROOT", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Beetroot"); + public static final ItemStack MELON_FERTILIZER = new SlimefunItemStack("FERTILIZER_MELON", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Melon"); + public static final ItemStack APPLE_FERTILIZER = new SlimefunItemStack("FERTILIZER_APPLE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Apple"); + public static final ItemStack SWEET_BERRIES_FERTILIZER = new SlimefunItemStack("FERTILIZER_SWEET_BERRIES", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Sweet Berries"); public static final ItemStack ANIMAL_GROWTH_ACCELERATOR = new CustomItem(Material.HAY_BLOCK, "&bAnimal Growth Accelerator", "", "&rRuns on &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &728 J/s"); public static final ItemStack CROP_GROWTH_ACCELERATOR = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator", "", "&rRuns on &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Radius: 7x7", "&8\u21E8 &7Speed: &a3/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &750 J/s"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index e1020851c..41c40b7c6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -23,6 +23,7 @@ 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -74,6 +75,10 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock this(category, item, id, recipeType, recipe); this.recipeOutput = recipeOutput; } + + public AContainer(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + this(category, item, item.getItemID(), recipeType, recipe); + } protected void constructMenu(BlockMenuPreset preset) { for (int i : BORDER) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java index 2b85937f3..f28ca219c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java @@ -31,6 +31,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; @@ -99,6 +100,10 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt this(category, item, id, recipeType, recipe); this.recipeOutput = recipeOutput; } + + public AGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + this(category, item, item.getItemID(), recipeType, recipe); + } private void constructMenu(BlockMenuPreset preset) { for (int i : border) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java index 62500edb2..ed9b7359e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java @@ -6,6 +6,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.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -13,10 +14,10 @@ import org.bukkit.inventory.ItemStack; public abstract class Teleporter extends SlimefunItem { - public Teleporter(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public Teleporter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); - SlimefunItem.registerBlockHandler(id, new SlimefunBlockHandler() { + SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() { @Override public void onPlace(Player p, Block b, SlimefunItem item) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java index 614c22d0e..b766c52dc 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java @@ -12,11 +12,12 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class InfernalBonemeal extends SimpleSlimefunItem { - public InfernalBonemeal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { - super(category, item, id, recipeType, recipe, recipeOutput); + public InfernalBonemeal(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java index 9c6647e44..3880c7f45 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java @@ -7,18 +7,18 @@ 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.ItemInteractionHandler; -import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class PortableGEOScanner extends SimpleSlimefunItem { - public PortableGEOScanner(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public PortableGEOScanner(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override public ItemInteractionHandler getItemHandler() { return (e, p, item) -> { - if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + if (isItem(item)) { e.setCancelled(true); GEOScanner.scanChunk(p, p.getLocation().getChunk()); return true; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java index bb63dabf2..e327aec36 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java @@ -21,11 +21,12 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class SoulboundRune extends SimpleSlimefunItem { - public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) { - super(category, item, id, type, recipe); + public SoulboundRune(Category category, SlimefunItemStack item, RecipeType type, ItemStack[] recipe) { + super(category, item, type, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java index cdea848dd..94cc4c537 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java @@ -16,11 +16,12 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class InfusedHopper extends SimpleSlimefunItem { - public InfusedHopper(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public InfusedHopper(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java index 37bbefd1b..815b50894 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java @@ -19,6 +19,7 @@ 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -29,11 +30,11 @@ public class AutoBreeder extends SlimefunItem implements InventoryBlock { protected int energyConsumption = 60; - public AutoBreeder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public AutoBreeder(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); createPreset(this, "&6Auto Breeder", this::constructMenu); - registerBlockHandler(name, (p, b, tool, reason) -> { + registerBlockHandler(getID(), (p, b, tool, reason) -> { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getInputSlots()) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java index 4ba52363a..9db54096e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java @@ -13,13 +13,14 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; 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); + public ElevatorPlate(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); - SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() { + SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() { @Override public void onPlace(Player p, Block b, SlimefunItem item) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java index d2c1359e0..bd7c28231 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java @@ -17,13 +17,14 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public abstract class Refinery extends AContainer implements RecipeDisplayItem { - public Refinery(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public Refinery(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java index 080e9bc86..46b023e0e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java @@ -8,11 +8,12 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class CombustionGenerator extends AGenerator { - public CombustionGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public CombustionGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java index a6705e8f9..2717aedba 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java @@ -7,11 +7,12 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class LavaGenerator extends AGenerator { - public LavaGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public LavaGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOMiner.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOMiner.java index 3c495b6cd..eabe919ab 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOMiner.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOMiner.java @@ -25,6 +25,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -37,8 +38,8 @@ public abstract class GEOMiner extends AContainer implements InventoryBlock, Rec private static final int[] BORDER_OUT = {19, 20, 21, 22, 23, 24, 25, 28, 34, 37, 43, 46, 47, 48, 49, 50, 51, 52}; private static final int[] OUTPUT_SLOTS = {29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; - public GEOMiner(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public GEOMiner(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); registerBlockHandler(getID(), new SlimefunBlockHandler() { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java index 24868595e..96313e7ad 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java @@ -8,11 +8,12 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class GEOScannerBlock extends SimpleSlimefunItem { - public GEOScannerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public GEOScannerBlock(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -25,7 +26,7 @@ public class GEOScannerBlock extends SimpleSlimefunItem return (e, p, stack) -> { if (e.getClickedBlock() == null) return false; String item = BlockStorage.checkID(e.getClickedBlock()); - if (item == null || !item.equals("GPS_GEO_SCANNER")) return false; + if (item == null || !item.equals(getID())) return false; e.setCancelled(true); GEOScanner.scanChunk(p, e.getClickedBlock().getChunk()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java index 5e7f11f7a..61e0e90ab 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java @@ -18,6 +18,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -26,10 +27,10 @@ import me.mrCookieSlime.Slimefun.utils.MachineHelper; public abstract class OilPump extends AContainer { - public OilPump(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public OilPump(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); - new BlockMenuPreset(name, getInventoryTitle()) { + new BlockMenuPreset(getID(), getInventoryTitle()) { @Override public void init() { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 894cdf78e..71151e4ab 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2465,43 +2465,43 @@ public final class SlimefunSetup { } .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BLANK_RUNE, "BLANK_RUNE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.BLANK_RUNE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.OBSIDIAN), SlimefunItems.MAGIC_LUMP_1,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE)}) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_AIR, "ANCIENT_RUNE_AIR", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_AIR, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER), new ItemStack(Material.GHAST_TEAR), SlimefunItems.BLANK_RUNE, new ItemStack(Material.GHAST_TEAR) ,new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER)}, new CustomItem(SlimefunItems.RUNE_AIR, 4)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_EARTH, "ANCIENT_RUNE_EARTH", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_EARTH, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.DIRT), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), new ItemStack(Material.OBSIDIAN), SlimefunItems.BLANK_RUNE, new ItemStack(Material.OBSIDIAN) ,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.DIRT)}, new CustomItem(SlimefunItems.RUNE_EARTH, 4)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_FIRE, "ANCIENT_RUNE_FIRE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_FIRE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.FIRE_CHARGE), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIRE_CHARGE), new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.FLINT_AND_STEEL) ,new ItemStack(Material.FIRE_CHARGE), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIRE_CHARGE)}, new CustomItem(SlimefunItems.RUNE_FIRE, 4)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_WATER, "ANCIENT_RUNE_WATER", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_WATER, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.SALMON), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.SAND), SlimefunItems.BLANK_RUNE, new ItemStack(Material.SAND) ,new ItemStack(Material.WATER_BUCKET), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.COD)}, new CustomItem(SlimefunItems.RUNE_WATER, 4)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_ENDER, "ANCIENT_RUNE_ENDER", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_ENDER, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.ENDER_EYE), SlimefunItems.BLANK_RUNE, new ItemStack(Material.ENDER_EYE), new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL)}, new CustomItem(SlimefunItems.RUNE_ENDER, 6)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_LIGHTNING, "ANCIENT_RUNE_LIGHTNING", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_LIGHTNING, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.IRON_INGOT), SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.IRON_INGOT), SlimefunItems.RUNE_AIR, new ItemStack(Material.PHANTOM_MEMBRANE), SlimefunItems.RUNE_WATER, new ItemStack(Material.IRON_INGOT), SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.IRON_INGOT)}, new CustomItem(SlimefunItems.RUNE_LIGHTNING, 4)) .register(true); - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_RAINBOW, "ANCIENT_RUNE_RAINBOW", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_RAINBOW, RecipeType.ANCIENT_ALTAR, 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 SoulboundRune(Categories.LUMPS_AND_MAGIC, (SlimefunItemStack) SlimefunItems.RUNE_SOULBOUND, RecipeType.ANCIENT_ALTAR, 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, + new InfernalBonemeal(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.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); @@ -2527,72 +2527,72 @@ public final class SlimefunSetup { RainbowTicker rainbow = new RainbowTicker(); - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_WOOL, "RAINBOW_WOOL", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.RAINBOW_WOOL, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.WHITE_WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.WHITE_WOOL)}, new CustomItem(SlimefunItems.RAINBOW_WOOL, 8)) .register(true, rainbow); - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS, "RAINBOW_GLASS", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.RAINBOW_GLASS, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.WHITE_STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.WHITE_STAINED_GLASS)}, new CustomItem(SlimefunItems.RAINBOW_GLASS, 8)) .register(true, rainbow); - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS_PANE, "RAINBOW_GLASS_PANE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.RAINBOW_GLASS_PANE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE, 8)) .register(true, rainbow); - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_CLAY, "RAINBOW_CLAY", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.RAINBOW_CLAY, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.WHITE_TERRACOTTA), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.WHITE_TERRACOTTA)}, new CustomItem(SlimefunItems.RAINBOW_CLAY, 8)) .register(true, rainbow); RainbowTicker xmas = new RainbowTicker(13, 14); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_WOOL_XMAS, "RAINBOW_WOOL_XMAS", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.CHRISTMAS, (SlimefunItemStack) SlimefunItems.RAINBOW_WOOL_XMAS, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.GREEN_DYE), new ItemStack(Material.WHITE_WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.GREEN_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_XMAS, 2)) .register(true, xmas); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_XMAS, "RAINBOW_GLASS_XMAS", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.CHRISTMAS, (SlimefunItemStack) SlimefunItems.RAINBOW_GLASS_XMAS, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.GREEN_DYE), new ItemStack(Material.WHITE_STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.GREEN_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_XMAS, 2)) .register(true, xmas); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_PANE_XMAS, "RAINBOW_GLASS_PANE_XMAS", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.CHRISTMAS, (SlimefunItemStack) SlimefunItems.RAINBOW_GLASS_PANE_XMAS, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.GREEN_DYE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.GREEN_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_XMAS, 2)) .register(true, xmas); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_CLAY_XMAS, "RAINBOW_CLAY_XMAS", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.CHRISTMAS, (SlimefunItemStack) SlimefunItems.RAINBOW_CLAY_XMAS, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.GREEN_DYE), new ItemStack(Material.WHITE_TERRACOTTA), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.GREEN_DYE), SlimefunItems.CHRISTMAS_COOKIE, new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_XMAS, 2)) .register(true, xmas); RainbowTicker valentine = new RainbowTicker(2, 6, 10); - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_WOOL_VALENTINE, "RAINBOW_WOOL_VALENTINE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.VALENTINES_DAY, (SlimefunItemStack) SlimefunItems.RAINBOW_WOOL_VALENTINE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.PINK_DYE), new ItemStack(Material.WHITE_WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.PINK_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_VALENTINE, 2)) .register(true, valentine); - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_VALENTINE, "RAINBOW_GLASS_VALENTINE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.VALENTINES_DAY, (SlimefunItemStack) SlimefunItems.RAINBOW_GLASS_VALENTINE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.PINK_DYE), new ItemStack(Material.WHITE_STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_STAINED_GLASS), new ItemStack(Material.PINK_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_VALENTINE, 2)) .register(true, valentine); - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, "RAINBOW_GLASS_PANE_VALENTINE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.VALENTINES_DAY, (SlimefunItemStack) SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.PINK_DYE), new ItemStack(Material.WHITE_STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_STAINED_GLASS_PANE), new ItemStack(Material.PINK_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, 2)) .register(true, valentine); - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_CLAY_VALENTINE, "RAINBOW_CLAY_VALENTINE", RecipeType.ANCIENT_ALTAR, + new SlimefunItem(Categories.VALENTINES_DAY, (SlimefunItemStack) SlimefunItems.RAINBOW_CLAY_VALENTINE, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.RED_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.PINK_DYE), new ItemStack(Material.WHITE_TERRACOTTA), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WHITE_TERRACOTTA), new ItemStack(Material.PINK_DYE), new ItemStack(Material.POPPY), new ItemStack(Material.RED_DYE)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_VALENTINE, 2)) .register(true, valentine); - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_GLASS, "WITHER_PROOF_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.TECH_MISC, (SlimefunItemStack) SlimefunItems.WITHER_PROOF_GLASS, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.HARDENED_GLASS, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT}, new CustomItem(SlimefunItems.WITHER_PROOF_GLASS, 4)) .register(true); - new GEOScannerBlock(Categories.GPS, SlimefunItems.GPS_GEO_SCANNER, "GPS_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, + new GEOScannerBlock(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_GEO_SCANNER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET}) .register(true); - new PortableGEOScanner(Categories.GPS, SlimefunItems.PORTABLE_GEO_SCANNER, "PORTABLE_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, + new PortableGEOScanner(Categories.GPS, (SlimefunItemStack) SlimefunItems.PORTABLE_GEO_SCANNER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.ELECTRO_MAGNET, new ItemStack(Material.COMPASS), SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.GPS_MARKER_TOOL, SlimefunItems.STEEL_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SOLDER_INGOT}) .register(true); - new OilPump(Categories.GPS, SlimefunItems.OIL_PUMP, "OIL_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, + new OilPump(Categories.GPS, (SlimefunItemStack) SlimefunItems.OIL_PUMP, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, null, new ItemStack(Material.BUCKET), null}) { @Override @@ -2607,7 +2607,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 200); - new GEOMiner(Categories.GPS, SlimefunItems.GEO_MINER, "GEO_MINER", RecipeType.ENHANCED_CRAFTING_TABLE, + new GEOMiner(Categories.GPS, (SlimefunItemStack) SlimefunItems.GEO_MINER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.MEDIUM_CAPACITOR, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.OIL_PUMP, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override @@ -2637,19 +2637,19 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_OIL, "BUCKET_OF_OIL", new RecipeType(SlimefunItems.OIL_PUMP), + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BUCKET_OF_OIL, new RecipeType(SlimefunItems.OIL_PUMP), new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_FUEL, "BUCKET_OF_FUEL", new RecipeType(SlimefunItems.REFINERY), + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BUCKET_OF_FUEL, new RecipeType(SlimefunItems.REFINERY), new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.NETHER_ICE, "NETHER_ICE", new RecipeType(SlimefunItems.GEO_MINER), + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.NETHER_ICE, new RecipeType(SlimefunItems.GEO_MINER), new ItemStack[] {null, null, null, null, null, null, null, null}) .register(true); - new Refinery(Categories.ELECTRICITY, SlimefunItems.REFINERY, "REFINERY", RecipeType.ENHANCED_CRAFTING_TABLE, + new Refinery(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.REFINERY, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, new ItemStack(Material.PISTON), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON)}) { @Override @@ -2664,7 +2664,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new LavaGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new LavaGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2674,7 +2674,7 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 512); - new LavaGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR_2, "LAVA_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new LavaGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2684,7 +2684,7 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 1024); - new CombustionGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new CombustionGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2694,11 +2694,11 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 256); - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TELEPORTER_PYLON, "GPS_TELEPORTER_PYLON", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_TELEPORTER_PYLON, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.HEATING_COIL, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT}, new CustomItem(SlimefunItems.GPS_TELEPORTER_PYLON, 8)) .register(true, new RainbowTicker(9, 10)); - new Teleporter(Categories.GPS, SlimefunItems.GPS_TELEPORTATION_MATRIX, "GPS_TELEPORTATION_MATRIX", RecipeType.ENHANCED_CRAFTING_TABLE, + new Teleporter(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_TELEPORTATION_MATRIX, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON}) { @Override @@ -2709,11 +2709,11 @@ public final class SlimefunSetup { } .register(true); - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, "GPS_ACTIVATION_DEVICE_SHARED", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.STONE_PRESSURE_PLATE), null, new ItemStack(Material.REDSTONE), SlimefunItems.GPS_TRANSMITTER, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT}) .register(true); - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, "GPS_ACTIVATION_DEVICE_PERSONAL", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.LEAD_INGOT, null, SlimefunItems.COBALT_INGOT, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, SlimefunItems.COBALT_INGOT, null, SlimefunItems.LEAD_INGOT, null}) .register(true); @@ -2730,27 +2730,27 @@ public final class SlimefunSetup { } }); - new InfusedHopper(Categories.MAGIC, SlimefunItems.INFUSED_HOPPER, "INFUSED_HOPPER", RecipeType.ANCIENT_ALTAR, + new InfusedHopper(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.INFUSED_HOPPER, RecipeType.ANCIENT_ALTAR, new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.RUNE_EARTH, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_ENDER, SlimefunItems.INFUSED_MAGNET, SlimefunItems.RUNE_ENDER, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.OBSIDIAN)}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT, "BLISTERING_INGOT", RecipeType.HEATED_PRESSURE_CHAMBER, + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BLISTERING_INGOT, RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_2, "BLISTERING_INGOT_2", RecipeType.HEATED_PRESSURE_CHAMBER, + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BLISTERING_INGOT_2, RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[] {SlimefunItems.BLISTERING_INGOT, SlimefunItems.CARBONADO, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_3, "BLISTERING_INGOT_3", RecipeType.HEATED_PRESSURE_CHAMBER, + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BLISTERING_INGOT_3, RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2,new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.ENRICHED_NETHER_ICE, "ENRICHED_NETHER_ICE", RecipeType.HEATED_PRESSURE_CHAMBER, + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.ENRICHED_NETHER_ICE, RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null}) .register(true); - new ElevatorPlate(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElevatorPlate(Categories.GPS, (SlimefunItemStack) SlimefunItems.ELEVATOR, 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); @@ -2785,35 +2785,39 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 512); - new SlimefunItem(Categories.MISC, SlimefunItems.WHEAT_ORGANIC_FOOD, "WHEAT_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.WHEAT_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.WHEAT), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.CARROT_ORGANIC_FOOD, "CARROT_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.CARROT_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.CARROT), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.POTATO_ORGANIC_FOOD, "POTATO_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.POTATO_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.POTATO), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.SEEDS_ORGANIC_FOOD, "SEEDS_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SEEDS_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.WHEAT_SEEDS), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.BEETROOT_ORGANIC_FOOD, "BEETROOT_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.BEETROOT_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.BEETROOT), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.MELON_ORGANIC_FOOD, "MELON_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.MELON_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.MELON), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.APPLE_ORGANIC_FOOD, "APPLE_ORGANIC_FOOD", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.APPLE_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), null, null, null, null, null, null, null}) .register(true); - new AutoBreeder(Categories.ELECTRICITY, SlimefunItems.AUTO_BREEDER, "AUTO_BREEDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD, new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.SWEET_BERRIES), null, null, null, null, null, null, null}) + .register(true); + + new AutoBreeder(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_BREEDER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GOLD_18K, SlimefunItems.CAN, SlimefunItems.GOLD_18K, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.HAY_BLOCK), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.LEAD_INGOT}) .registerChargeableBlock(true, 1024); @@ -2855,34 +2859,38 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new SlimefunItem(Categories.MISC, SlimefunItems.WHEAT_FERTILIZER, "WHEAT_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.WHEAT_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.WHEAT_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.CARROT_FERTILIZER, "CARROT_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.CARROT_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.CARROT_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.POTATO_FERTILIZER, "POTATO_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.POTATO_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.POTATO_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.SEEDS_FERTILIZER, "SEEDS_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SEEDS_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.SEEDS_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.BEETROOT_FERTILIZER, "BEETROOT_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.BEETROOT_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.BEETROOT_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.MELON_FERTILIZER, "MELON_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.MELON_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.MELON_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.APPLE_FERTILIZER, "APPLE_FERTILIZER", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.APPLE_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), new ItemStack[] {SlimefunItems.APPLE_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SWEET_BERRIES_FERTILIZER, new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) + .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}) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index 1af022d03..acdce2efd 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -309,13 +309,13 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent BlockStorage.addBlockInfo(b, "rotation", directions.get(indexRight).toString()); break; case DIG_FORWARD: - mine(b, b.getRelative(face)); + mine(b, menu, b.getRelative(face)); break; case DIG_UP: - mine(b, b.getRelative(BlockFace.UP)); + mine(b, menu, b.getRelative(BlockFace.UP)); break; case DIG_DOWN: - mine(b, b.getRelative(BlockFace.DOWN)); + mine(b, menu, b.getRelative(BlockFace.DOWN)); break; case CATCH_FISH: Block water = b.getRelative(BlockFace.DOWN); @@ -331,13 +331,13 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } break; case MOVE_AND_DIG_FORWARD: - movedig(b, face, b.getRelative(face)); + movedig(b, menu, face, b.getRelative(face)); break; case MOVE_AND_DIG_UP: - movedig(b, face, b.getRelative(BlockFace.UP)); + movedig(b, menu, face, b.getRelative(BlockFace.UP)); break; case MOVE_AND_DIG_DOWN: - movedig(b, face, b.getRelative(BlockFace.DOWN)); + movedig(b, menu, face, b.getRelative(BlockFace.DOWN)); break; case INTERFACE_ITEMS: if (BlockStorage.check(b.getRelative(face), "ANDROID_INTERFACE_ITEMS") && b.getRelative(face).getState() instanceof Dispenser) { @@ -496,17 +496,18 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } } - private void mine(Block b, Block block) { + private void mine(Block b, BlockMenu menu, Block block) { Collection drops = block.getDrops(); if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && SlimefunPlugin.getProtectionManager().hasPermission(Bukkit.getOfflinePlayer(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner"))), block.getLocation(), ProtectableAction.BREAK_BLOCK)) { String item = BlockStorage.checkID(block); if (item == null) { - ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); - if (fits(b, items)) { - pushItems(b, items); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - block.setType(Material.AIR); + for (ItemStack drop: drops) { + if (menu.fits(drop, getOutputSlots())) { + menu.pushItem(drop, getOutputSlots()); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + block.setType(Material.AIR); + } } } /* @@ -524,23 +525,23 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } - private void movedig(Block b, BlockFace face, Block block) { + private void movedig(Block b, BlockMenu menu, BlockFace face, Block block) { Collection drops = block.getDrops(); if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && SlimefunPlugin.getProtectionManager().hasPermission(Bukkit.getOfflinePlayer(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner"))), block.getLocation(), ProtectableAction.BREAK_BLOCK)) { SlimefunItem item = BlockStorage.check(block); if (item == null) { - ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); - if (fits(b, items)) { - pushItems(b, items); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - - block.setType(Material.AIR); - move(b, face, block); - - b.setType(Material.AIR); - BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation()); + for (ItemStack drop: drops) { + if (menu.fits(drop, getOutputSlots())) { + menu.pushItem(drop, getOutputSlots()); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + + block.setType(Material.AIR); + move(b, face, block); + + b.setType(Material.AIR); + BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation()); + } } - } /* else { @@ -1003,7 +1004,9 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } public void addItems(Block b, ItemStack... items) { - this.pushItems(b, items); + for (ItemStack item: items) { + BlockStorage.getInventory(b).pushItem(item, getOutputSlots()); + } } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java index 19c8e5860..1ff22cb09 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -5,7 +5,6 @@ import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/StatsCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/StatsCommand.java index 0ea2772d1..8fafe4fc2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/StatsCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/StatsCommand.java @@ -29,7 +29,7 @@ public class StatsCommand extends SubCommand { if (sender.hasPermission("slimefun.stats.others") || sender instanceof ConsoleCommandSender) { Optional player = PlayerList.findByName(args[1]); if (player.isPresent()) { - PlayerProfile.get(player.get()).sendStats(sender); + PlayerProfile.get(player.get(), profile -> profile.sendStats(sender)); } else { SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace("%player%", args[1])); @@ -38,7 +38,7 @@ public class StatsCommand extends SubCommand { else SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); } else if (sender instanceof Player) { - PlayerProfile.get((Player) sender).sendStats(sender); + PlayerProfile.get((Player) sender, profile -> profile.sendStats(sender)); } else { SlimefunPlugin.getLocal().sendMessage(sender, "messages.only-players", true); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java b/src/main/java/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java index fcccbd54f..f91dcd84a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java @@ -8,7 +8,6 @@ import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunPlugin; public final class EnergyHologram { @@ -41,7 +40,7 @@ public final class EnergyHologram { } if (!createIfNoneExists) return null; - else return ArmorStandFactory.createHidden(l); + else return SimpleHologram.create(l); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java b/src/main/java/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java index 784c3acac..55ee081c4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/holograms/HologramProjectorHologram.java @@ -13,7 +13,6 @@ import io.github.thebusybiscuit.cscorelib2.chat.ChatInput; import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -34,7 +33,7 @@ public final class HologramProjectorHologram { return null; } - ArmorStand hologram = ArmorStandFactory.createHidden(l); + ArmorStand hologram = SimpleHologram.create(l); hologram.setCustomName(nametag); return hologram; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java b/src/main/java/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java index f05dc9921..a31b9ce2d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java @@ -6,7 +6,6 @@ import org.bukkit.Location; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunPlugin; public final class ReactorHologram { @@ -22,7 +21,7 @@ public final class ReactorHologram { if (!createIfNoneExists) return null; - ArmorStand hologram = ArmorStandFactory.createHidden(l); + ArmorStand hologram = SimpleHologram.create(l); hologram.setCustomNameVisible(false); hologram.setCustomName(null); return hologram; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/holograms/SimpleHologram.java b/src/main/java/me/mrCookieSlime/Slimefun/holograms/SimpleHologram.java index 37c1ac2cb..070622c2b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/holograms/SimpleHologram.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/holograms/SimpleHologram.java @@ -6,8 +6,8 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory; import me.mrCookieSlime.Slimefun.SlimefunPlugin; public final class SimpleHologram { @@ -36,7 +36,19 @@ public final class SimpleHologram { } if (!createIfNoneExists) return null; - else return ArmorStandFactory.createHidden(l); + else return create(l); + } + + public static ArmorStand create(Location l) { + ArmorStand armorStand = (ArmorStand) l.getWorld().spawnEntity(l, EntityType.ARMOR_STAND); + armorStand.setVisible(false); + armorStand.setSilent(true); + armorStand.setMarker(true); + armorStand.setGravity(false); + armorStand.setBasePlate(false); + armorStand.setCustomNameVisible(true); + armorStand.setRemoveWhenFarAway(false); + return armorStand; } } From fc7c4e4d81163d544f174813082ceac1dde56dac Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 12:53:13 +0200 Subject: [PATCH 06/80] Fixed #1200 --- .../java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index cf297d862..d2714067a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -601,7 +601,7 @@ public final class SlimefunItems { 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; + RUNE_RAINBOW = new SlimefunItemStack("ANCIENT_RUNE_RAINBOW", itemR); ItemStack itemL = new ItemStack(Material.FIREWORK_STAR); FireworkEffectMeta imL = (FireworkEffectMeta) itemL.getItemMeta(); From c5341a6b02c03d25f2d033e59a76288008bcf856 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 15:04:45 +0200 Subject: [PATCH 07/80] Fixes #1196 --- .../me/mrCookieSlime/Slimefun/SlimefunGuide.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index cc3eb0518..ec2105d3d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -264,7 +264,7 @@ public final class SlimefunGuide { } private static void openMainMenu(final PlayerProfile profile, final boolean survival, final boolean book, final int selected_page) { - Player p = Bukkit.getPlayer(profile.getUUID()); + Player p = profile.getPlayer(); if (p == null) return; if (survival) { @@ -742,7 +742,7 @@ public final class SlimefunGuide { menu.setEmptySlotsClickable(false); fillInv(menu, cheat); - addBackButton(menu, 1, profile, false, cheat); + addBackButton(menu, 1, profile, cheat); String searchTerm = input.toLowerCase(); @@ -805,7 +805,7 @@ public final class SlimefunGuide { } } - private static void addBackButton(ChestMenu menu, int slot, PlayerProfile profile, boolean book, boolean cheat) { + private static void addBackButton(ChestMenu menu, int slot, PlayerProfile profile, boolean cheat) { List playerHistory = profile.getGuideHistory(); if (playerHistory.size() > 1) { @@ -817,10 +817,12 @@ public final class SlimefunGuide { ); menu.addMenuClickHandler(slot, (pl, s, is, action) -> { - if (action.isShiftClicked()) openMainMenuAsync(pl, true, false, 1); + if (action.isShiftClicked()) { + openMainMenu(profile, !cheat, false, 0); + } else { Object last = getLastEntry(profile, true); - handleHistory(pl, last, book, cheat); + handleHistory(pl, last, false, cheat); } return false; }); @@ -829,7 +831,7 @@ public final class SlimefunGuide { else { menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); menu.addMenuClickHandler(0, (pl, s, is, action) -> { - openMainMenuAsync(pl, true, book, 1); + openMainMenu(profile, !cheat, false, 0); return false; }); } @@ -913,7 +915,7 @@ public final class SlimefunGuide { PlayerProfile profile = PlayerProfile.get(p); - addBackButton(menu, 0, profile, book, false); + addBackButton(menu, 0, profile, false); LinkedList history = profile.getGuideHistory(); From 70cc1d04f48250938833c3546f9f2c58811dc1ce Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 15:14:05 +0200 Subject: [PATCH 08/80] Fixes #1196 --- src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index ec2105d3d..6cf7813f0 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -830,7 +830,7 @@ public final class SlimefunGuide { } else { menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); - menu.addMenuClickHandler(0, (pl, s, is, action) -> { + menu.addMenuClickHandler(slot, (pl, s, is, action) -> { openMainMenu(profile, !cheat, false, 0); return false; }); From 3eed8cebc62ecc8acc6aa1b0085f5d2b0433058c Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 15:15:11 +0200 Subject: [PATCH 09/80] Another fix --- src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 6cf7813f0..289f50156 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -818,7 +818,7 @@ public final class SlimefunGuide { menu.addMenuClickHandler(slot, (pl, s, is, action) -> { if (action.isShiftClicked()) { - openMainMenu(profile, !cheat, false, 0); + openMainMenu(profile, !cheat, false, 1); } else { Object last = getLastEntry(profile, true); @@ -831,7 +831,7 @@ public final class SlimefunGuide { else { menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); menu.addMenuClickHandler(slot, (pl, s, is, action) -> { - openMainMenu(profile, !cheat, false, 0); + openMainMenu(profile, !cheat, false, 1); return false; }); } From a3bf63a023a840984d8792f2136ee4024b98863b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 16:16:40 +0200 Subject: [PATCH 10/80] More optimizations (+ Added more Jerky Meat) --- .../Slimefun/Lists/SlimefunItems.java | 8 +- .../SlimefunItem/items/DietCookie.java | 5 - .../SlimefunItem/items/FortuneCookie.java | 39 +++++++ .../SlimefunItem/items/MagicSugar.java | 13 ++- .../Objects/SlimefunItem/items/MeatJerky.java | 36 ++++++ .../SlimefunItem/items/MonsterJerky.java | 5 - .../Slimefun/Setup/SlimefunSetup.java | 28 ++++- .../Slimefun/listeners/ItemListener.java | 110 ++++++++---------- 8 files changed, 165 insertions(+), 79 deletions(-) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index d2714067a..2694b48e0 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -130,7 +130,6 @@ public final class SlimefunItems { /* Food */ public static final ItemStack FORTUNE_COOKIE = new SlimefunItemStack("FORTUNE_COOKIE", Material.COOKIE, "&6Fortune Cookie", "", "&a&oTells you stuff about your Future :o"); public static final ItemStack DIET_COOKIE = new SlimefunItemStack("DIET_COOKIE", Material.COOKIE, "&6Diet Cookie", "", "&aA very &olightweight &r&acookie."); - public static final ItemStack BEEF_JERKY = new SlimefunItemStack("BEEF_JERKY", Material.COOKED_BEEF, "&6Beef Jerky", "", "&a&oSaturating"); public static final ItemStack MAGIC_SUGAR = new SlimefunItemStack("MAGIC_SUGAR", Material.SUGAR, "&6Magic Sugar", "", "&a&oFeel the Power of Hermes!"); public static final ItemStack MONSTER_JERKY = new SlimefunItemStack("MONSTER_JERKY", Material.ROTTEN_FLESH, "&6Monster Jerky", "", "&a&oNo longer hungry"); public static final ItemStack APPLE_JUICE = new SlimefunItemStack("APPLE_JUICE", new CustomPotion("&cApple Juice", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger")); @@ -140,6 +139,13 @@ public final class SlimefunItems { public static final ItemStack SWEET_BERRY_JUICE = new SlimefunItemStack("SWEET_BERRY_JUICE", new CustomPotion("&cSweet Berry Juice", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger")); public static final ItemStack GOLDEN_APPLE_JUICE = new SlimefunItemStack("GOLDEN_APPLE_JUICE", new CustomPotion("&bGolden Apple Juice", Color.YELLOW, new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0))); + public static final ItemStack BEEF_JERKY = new SlimefunItemStack("BEEF_JERKY", Material.COOKED_BEEF, "&6Beef Jerky", "", "&rExtra saturating!"); + public static final ItemStack PORK_JERKY = new SlimefunItemStack("PORK_JERKY", Material.COOKED_PORKCHOP, "&6Pork Jerky", "", "&rExtra saturating!"); + public static final ItemStack CHICKEN_JERKY = new SlimefunItemStack("CHICKEN_JERKY", Material.COOKED_CHICKEN, "&6Chicken Jerky", "", "&rExtra saturating!"); + public static final ItemStack MUTTON_JERKY = new SlimefunItemStack("MUTTON_JERKY", Material.COOKED_MUTTON, "&6Mutton Jerky", "", "&rExtra saturating!"); + public static final ItemStack RABBIT_JERKY = new SlimefunItemStack("RABBIT_JERKY", Material.COOKED_RABBIT, "&6Rabbit Jerky", "", "&rExtra saturating!"); + public static final ItemStack FISH_JERKY = new SlimefunItemStack("FISH_JERKY", Material.COOKED_COD, "&6Fish Jerky", "", "&rExtra saturating!"); + /* Christmas */ public static final ItemStack CHRISTMAS_MILK = new CustomPotion("&6Glass of Milk", Color.WHITE, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "", "&7&oRestores &b&o" + "2.5" + " &7&oHunger"); public static final ItemStack CHRISTMAS_CHOCOLATE_MILK = new CustomPotion("&6Chocolate Milk", Color.MAROON, new PotionEffect(PotionEffectType.SATURATION, 12, 0), "", "&7&oRestores &b&o" + "6.0" + " &7&oHunger"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java index 6f02bc63a..158ae6600 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java @@ -18,11 +18,6 @@ public class DietCookie extends SimpleSlimefunItem { super(category, item, recipeType, recipe); } - @Override - protected boolean areItemHandlersPrivate() { - return false; - } - @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java new file mode 100644 index 000000000..6d282c8b8 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java @@ -0,0 +1,39 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.List; +import java.util.Random; + +import org.bukkit.ChatColor; +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.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class FortuneCookie extends SimpleSlimefunItem { + + private final Random random = new Random(); + + public FortuneCookie(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public ItemConsumptionHandler getItemHandler() { + return (e, p, item) -> { + if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + List messages = SlimefunPlugin.getLocal().getMessages("messages.fortune-cookie"); + String message = messages.get(random.nextInt(messages.size())); + + p.sendMessage(ChatColor.translateAlternateColorCodes('&', message)); + return true; + } + return false; + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java index 584df8a4a..32e6d7b37 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java @@ -8,28 +8,33 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; 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.ItemInteractionHandler; -import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class MagicSugar extends SimpleSlimefunItem { + private int speed; + public MagicSugar(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) { super(category, item, recipeType, recipe, keys, values); } + + @Override + public void postRegister() { + speed = (int) Slimefun.getItemValue("MAGIC_SUGAR", "effects.SPEED"); + } @Override public ItemInteractionHandler getItemHandler() { return (e, p, item) -> { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.MAGIC_SUGAR, true)) { + if (isItem(item)) { if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); - p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, (Integer) Slimefun.getItemValue("MAGIC_SUGAR", "effects.SPEED"))); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, speed)); return true; } else return false; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java new file mode 100644 index 000000000..c80335713 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java @@ -0,0 +1,36 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +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.handlers.ItemConsumptionHandler; +import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class MeatJerky extends SimpleSlimefunItem { + + private int saturation; + + public MeatJerky(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe, new String[] {"Saturation"}, new Object[] {18}); + } + + @Override + public void postRegister() { + saturation = (int) Slimefun.getItemValue(getID(), "Saturation"); + } + + @Override + public ItemConsumptionHandler getItemHandler() { + return (e, p, item) -> { + if (isItem(item)) { + p.setSaturation(saturation); + return true; + } + return false; + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java index dbbb716ab..d75975c57 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java @@ -18,11 +18,6 @@ public class MonsterJerky extends SimpleSlimefunItem { super(category, item, recipeType, recipe); } - @Override - protected boolean areItemHandlersPrivate() { - return false; - } - @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 71151e4ab..11a64d18b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -79,6 +79,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.DietCookie; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.EnderBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosivePickaxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosiveShovel; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.FortuneCookie; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GoldPan; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GrapplingHook; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HerculesPickaxe; @@ -89,6 +90,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeTome; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.LumberAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicEyeOfEnder; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MeatJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; @@ -195,7 +197,7 @@ public final class SlimefunSetup { new ItemStack[] {new ItemStack(Material.BOOK), new ItemStack(Material.CRAFTING_TABLE), null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.FOOD, (SlimefunItemStack) SlimefunItems.FORTUNE_COOKIE, RecipeType.ENHANCED_CRAFTING_TABLE, + new FortuneCookie(Categories.FOOD, (SlimefunItemStack) SlimefunItems.FORTUNE_COOKIE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.PAPER), null, null, null, null, null, null, null}) .register(true); @@ -213,8 +215,28 @@ public final class SlimefunSetup { new ItemStack[] {new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT)}) .register(true); - new SlimefunItem(Categories.FOOD, (SlimefunItemStack) SlimefunItems.BEEF_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_BEEF), null, null, null, null, null, null, null}, new String[] {"Saturation"}, new Integer[] {20}) + new MeatJerky(Categories.FOOD, (SlimefunItemStack) SlimefunItems.BEEF_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_BEEF), null, null, null, null, null, null, null}) + .register(true); + + new MeatJerky(Categories.FOOD, (SlimefunItemStack) SlimefunItems.PORK_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_PORKCHOP), null, null, null, null, null, null, null}) + .register(true); + + new MeatJerky(Categories.FOOD, (SlimefunItemStack) SlimefunItems.CHICKEN_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_CHICKEN), null, null, null, null, null, null, null}) + .register(true); + + new MeatJerky(Categories.FOOD, (SlimefunItemStack) SlimefunItems.MUTTON_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_MUTTON), null, null, null, null, null, null, null}) + .register(true); + + new MeatJerky(Categories.FOOD, (SlimefunItemStack) SlimefunItems.RABBIT_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_RABBIT), null, null, null, null, null, null, null}) + .register(true); + + new MeatJerky(Categories.FOOD, (SlimefunItemStack) SlimefunItems.FISH_JERKY, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_COD), null, null, null, null, null, null, null}) .register(true); new GrindStone().register(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 5b89ab44b..421ce201a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -321,67 +321,56 @@ public class ItemListener implements Listener { @EventHandler public void onEat(PlayerItemConsumeEvent e) { - if (e.getItem() != null) { - final Player p = e.getPlayer(); - ItemStack item = e.getItem(); - - if (Slimefun.hasUnlocked(p, item, true)) { - for (ItemHandler handler : SlimefunItem.getHandlers("ItemConsumptionHandler")) { - if (((ItemConsumptionHandler) handler).onConsume(e, p, item)) return; - } - - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.FORTUNE_COOKIE, true)) { - List messages = SlimefunPlugin.getLocal().getMessages("messages.fortune-cookie"); - String message = messages.get(random.nextInt(messages.size())); - - p.sendMessage(ChatColor.translateAlternateColorCodes('&', message)); - } - else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BEEF_JERKY, true)) { - p.setSaturation((int) Slimefun.getItemValue("BEEF_JERKY", "Saturation")); - } - else if (item.getType() == Material.POTION) { - SlimefunItem sfItem = SlimefunItem.getByItem(item); - - if (sfItem instanceof Juice) { - // Fix for Saturation on potions is no longer working - for (PotionEffect effect : ((PotionMeta) item.getItemMeta()).getCustomEffects()) { - if (effect.getType().equals(PotionEffectType.SATURATION)) { - p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, effect.getDuration(), effect.getAmplifier())); - break; - } - } - - // Determine from which hand the juice is being drunk, and its amount - int mode = 0; - if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInMainHand(), true)) { - if (p.getInventory().getItemInMainHand().getAmount() == 1) { - mode = 0; - } - else { - mode = 2; - } - } - else if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInOffHand(), true)) { - if (p.getInventory().getItemInOffHand().getAmount() == 1) { - mode = 1; - } - else { - mode = 2; - } - } - - // Remove the glass bottle once drunk - final int m = mode; - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { - if (m == 0) p.getEquipment().getItemInMainHand().setAmount(0); - else if (m == 1) p.getEquipment().getItemInOffHand().setAmount(0); - else if (m == 2) p.getInventory().removeItem(new ItemStack(Material.GLASS_BOTTLE, 1)); - }, 0L); + final Player p = e.getPlayer(); + ItemStack item = e.getItem(); + SlimefunItem sfItem = SlimefunItem.getByItem(item); + + if (sfItem != null && Slimefun.hasUnlocked(p, sfItem, true)) { + if (sfItem instanceof Juice) { + // Fix for Saturation on potions is no longer working + for (PotionEffect effect : ((PotionMeta) item.getItemMeta()).getCustomEffects()) { + if (effect.getType().equals(PotionEffectType.SATURATION)) { + p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, effect.getDuration(), effect.getAmplifier())); + break; } } + + // Determine from which hand the juice is being drunk, and its amount + int mode = 0; + if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInMainHand(), true)) { + if (p.getInventory().getItemInMainHand().getAmount() == 1) { + mode = 0; + } + else { + mode = 2; + } + } + else if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInOffHand(), true)) { + if (p.getInventory().getItemInOffHand().getAmount() == 1) { + mode = 1; + } + else { + mode = 2; + } + } + + // Remove the glass bottle once drunk + final int m = mode; + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + if (m == 0) p.getEquipment().getItemInMainHand().setAmount(0); + else if (m == 1) p.getEquipment().getItemInOffHand().setAmount(0); + else if (m == 2) p.getInventory().removeItem(new ItemStack(Material.GLASS_BOTTLE, 1)); + }, 0L); } - else e.setCancelled(true); + else { + sfItem.callItemHandler(ItemConsumptionHandler.class, handler -> + handler.onConsume(e, p, item) + ); + } + } + else { + e.setCancelled(true); } } @@ -418,9 +407,8 @@ public class ItemListener implements Listener { } else if (e.getEntity() instanceof Wither) { String id = BlockStorage.checkID(e.getBlock()); - if (id != null) { - if (id.equals("WITHER_PROOF_OBSIDIAN")) e.setCancelled(true); - else if (id.equals("WITHER_PROOF_GLASS")) e.setCancelled(true); + if (id != null && id.startsWith("WITHER_PROOF_")) { + e.setCancelled(true); } } } From 41811b90f1b057e375d4309e90e29c1ab4436cab Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 16:48:22 +0200 Subject: [PATCH 11/80] [CI skip] Added some documentation to the code --- .../Slimefun/Objects/Category.java | 5 ++ .../Objects/SlimefunItem/SlimefunItem.java | 49 +++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java index 20acc458f..b383b8655 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java @@ -158,5 +158,10 @@ public class Category { public int getTier() { return tier; } + + @Override + public String toString() { + return "Slimefun Category {" + item.getItemMeta().getDisplayName() + ",tier=" + tier + "}"; + } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index a25dcecc9..254861435 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -11,7 +11,6 @@ import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; @@ -27,14 +26,12 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.ancient_altar.AltarRecipe; -import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.EnergyNet; import me.mrCookieSlime.Slimefun.api.energy.EnergyNetComponent; import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker; -import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; public class SlimefunItem { @@ -55,7 +52,7 @@ public class SlimefunItem { private boolean addon = false; private String permission = ""; private List noPermissionTooltip; - private Set itemhandlers = new HashSet<>(); + private final Set itemhandlers = new HashSet<>(); private boolean ticking = false; private BlockTicker blockTicker; private EnergyTicker energyTicker; @@ -527,30 +524,64 @@ public class SlimefunItem { registerChargeableBlock(vanilla, capacity); } - public BlockMenu getBlockMenu(Block b) { - return BlockStorage.getInventory(b); - } - + /** + * This method will assign the given wiki page to this Item. + * Note that you only need to provide the page name itself, + * the URL to our wiki is prepended automatically. + * + * @param page The associated wiki page + */ public void addWikipage(String page) { wiki = "https://github.com/TheBusyBiscuit/Slimefun4/wiki/" + page; } + /** + * This method returns whether this item has been assigned a wiki page. + * @see SlimefunItem#addWikipage(String) + * + * @return Whether this Item has a wiki page + */ public boolean hasWiki() { return wiki != null; } + /** + * This method returns the wiki page that has been asigned to this item. + * It will return null, if no wiki page was found. + * @see SlimefunItem#addWikipage(String) + * + * @return This item's wiki page + */ public String getWiki() { return wiki; } - public String getItemName() { + /** + * This method will return this Item's Name (The name that is displayed when + * hovering over this Item in an Inventory). + * + * @return This item's name in ItemStack form + */ + public final String getItemName() { return ItemUtils.getItemName(item); } + /** + * This method returns a Set of item handlers associated with this Item. + * + * @return The Set of item handlers + */ public Set getHandlers() { return itemhandlers; } + /** + * Override this method if you don't want to add your Item Handler to the global list. + * Only use this method if you absolutely know what you are doing and can make sure that the + * Item handler is handled somewhere else. + * + * @return Whether this Item handler is handled directly by the Item itself + */ protected boolean areItemHandlersPrivate() { return false; } From bb2d9d851fc199faf6fe2a902ccb94ab296c0f51 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 18:18:17 +0200 Subject: [PATCH 12/80] Fixes #1153 --- pom.xml | 2 +- .../me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8ba5cbece..a5672cb50 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.6.1 + 0.6.2 compile diff --git a/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java b/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java index acdce2efd..837a33a0b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/androids/ProgrammableAndroid.java @@ -399,7 +399,6 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent case CHOP_TREE: if (MaterialCollections.getAllLogs().contains(b.getRelative(face).getType())) { List list = Vein.find(b.getRelative(face), 180, block -> MaterialCollections.getAllLogs().contains(block.getType())); - list.add(0, b.getRelative(face)); if (!list.isEmpty()) { refresh = false; Block log = list.get(list.size() - 1); From 783a66d2dacf3bb5a430cd0c368f8864b8414076 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 18:20:08 +0200 Subject: [PATCH 13/80] Fixed Food --- .../Slimefun/listeners/ItemListener.java | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 421ce201a..884bcc4b9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -1,7 +1,6 @@ package me.mrCookieSlime.Slimefun.listeners; import java.util.List; -import java.util.Random; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -65,7 +64,6 @@ import me.mrCookieSlime.Slimefun.utils.Utilities; public class ItemListener implements Listener { private Utilities utilities; - private Random random = new Random(); public ItemListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); @@ -325,53 +323,55 @@ public class ItemListener implements Listener { ItemStack item = e.getItem(); SlimefunItem sfItem = SlimefunItem.getByItem(item); - if (sfItem != null && Slimefun.hasUnlocked(p, sfItem, true)) { - if (sfItem instanceof Juice) { - // Fix for Saturation on potions is no longer working - for (PotionEffect effect : ((PotionMeta) item.getItemMeta()).getCustomEffects()) { - if (effect.getType().equals(PotionEffectType.SATURATION)) { - p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, effect.getDuration(), effect.getAmplifier())); - break; + if (sfItem != null) { + if (Slimefun.hasUnlocked(p, sfItem, true)) { + if (sfItem instanceof Juice) { + // Fix for Saturation on potions is no longer working + for (PotionEffect effect : ((PotionMeta) item.getItemMeta()).getCustomEffects()) { + if (effect.getType().equals(PotionEffectType.SATURATION)) { + p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, effect.getDuration(), effect.getAmplifier())); + break; + } } - } - // Determine from which hand the juice is being drunk, and its amount - int mode = 0; - if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInMainHand(), true)) { - if (p.getInventory().getItemInMainHand().getAmount() == 1) { - mode = 0; + // Determine from which hand the juice is being drunk, and its amount + int mode = 0; + if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInMainHand(), true)) { + if (p.getInventory().getItemInMainHand().getAmount() == 1) { + mode = 0; + } + else { + mode = 2; + } } - else { - mode = 2; + else if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInOffHand(), true)) { + if (p.getInventory().getItemInOffHand().getAmount() == 1) { + mode = 1; + } + else { + mode = 2; + } } - } - else if (SlimefunManager.isItemSimiliar(item, p.getInventory().getItemInOffHand(), true)) { - if (p.getInventory().getItemInOffHand().getAmount() == 1) { - mode = 1; - } - else { - mode = 2; - } - } - // Remove the glass bottle once drunk - final int m = mode; + // Remove the glass bottle once drunk + final int m = mode; - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { - if (m == 0) p.getEquipment().getItemInMainHand().setAmount(0); - else if (m == 1) p.getEquipment().getItemInOffHand().setAmount(0); - else if (m == 2) p.getInventory().removeItem(new ItemStack(Material.GLASS_BOTTLE, 1)); - }, 0L); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + if (m == 0) p.getEquipment().getItemInMainHand().setAmount(0); + else if (m == 1) p.getEquipment().getItemInOffHand().setAmount(0); + else if (m == 2) p.getInventory().removeItem(new ItemStack(Material.GLASS_BOTTLE, 1)); + }, 0L); + } + else { + sfItem.callItemHandler(ItemConsumptionHandler.class, handler -> + handler.onConsume(e, p, item) + ); + } } else { - sfItem.callItemHandler(ItemConsumptionHandler.class, handler -> - handler.onConsume(e, p, item) - ); + e.setCancelled(true); } } - else { - e.setCancelled(true); - } } @EventHandler From ad3ca513add4c7b206b7496aa375c075609aaad7 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 19 Oct 2019 19:06:38 +0200 Subject: [PATCH 14/80] Fixed Multi Tools --- .../java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 884bcc4b9..7b793c513 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -250,7 +250,7 @@ public class ItemListener implements Listener { float cost = 0.3F; if (charge >= cost) { p.getEquipment().setItemInMainHand(ItemEnergy.chargeItem(item, -cost)); - Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock())); + Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem().clone(), e.getClickedBlock())); } } else { From 852b4bfc2aaf63fefee61cd346a7bdb347ac1a00 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 20 Oct 2019 14:19:27 +0200 Subject: [PATCH 15/80] fixes #1202 --- .../Objects/SlimefunItem/items/PickaxeOfVeinMining.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java index b90a8cd4f..08b1235d9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java @@ -23,6 +23,11 @@ public class PickaxeOfVeinMining extends SimpleSlimefunItem { public PickaxeOfVeinMining(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } @Override public BlockBreakHandler getItemHandler() { From 57e1126553e29d9ed0d3922ebaa05b57ab197751 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 20 Oct 2019 16:41:28 +0200 Subject: [PATCH 16/80] Optimized and cleaned up guide --- .../Objects/SlimefunItem/MultiTool.java | 2 +- .../Slimefun/Setup/SlimefunLocalization.java | 1 + .../mrCookieSlime/Slimefun/SlimefunGuide.java | 925 +----------------- .../mrCookieSlime/Slimefun/api/Slimefun.java | 14 + .../commands/subcommands/GuideCommand.java | 2 +- .../commands/subcommands/SearchCommand.java | 3 +- .../Slimefun/guides/BookSlimefunGuide.java | 288 ++++++ .../Slimefun/guides/ChestSlimefunGuide.java | 681 +++++++++++++ .../Slimefun/guides/ISlimefunGuide.java | 47 + .../{api => guides}/SlimefunGuideLayout.java | 2 +- .../Slimefun/hooks/github/GitHubSetup.java | 103 +- .../listeners/GuideOnJoinListener.java | 2 +- .../Slimefun/listeners/ItemListener.java | 2 +- .../Slimefun/utils/Utilities.java | 9 + 14 files changed, 1148 insertions(+), 933 deletions(-) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/guides/BookSlimefunGuide.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/guides/ISlimefunGuide.java rename src/main/java/me/mrCookieSlime/Slimefun/{api => guides}/SlimefunGuideLayout.java (62%) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java index 1d490a747..2356aaae2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java @@ -26,7 +26,7 @@ public class MultiTool extends DamagableChargableItem { public void postRegister() { List list = new ArrayList<>(); for (int i = 0; i < 50; i++) { - if (Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled") != null && (Boolean) Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled")) list.add(i); + if (Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled") != null && (boolean) Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled")) list.add(i); } this.modes = list; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunLocalization.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunLocalization.java index 56bf08c17..d4283b8ca 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunLocalization.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunLocalization.java @@ -26,6 +26,7 @@ public class SlimefunLocalization extends Localization { setDefaultMessage("guide.search.name", "&7Search"); setDefaultMessages("guide.search.lore", "&bWhat would you like to search for?", "&7Type your search term into chat"); + setDefaultMessage("search.message", "&bWhat would you like to search for?"); setDefaultMessage("guide.cheat.no-multiblocks", "&4You cannot cheat in Multiblocks, you have to build them!"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 289f50156..05a506952 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -1,59 +1,45 @@ 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.Optional; import java.util.logging.Level; -import java.util.stream.Collectors; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; -import org.bukkit.inventory.FurnaceRecipe; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.meta.SkullMeta; -import io.github.thebusybiscuit.cscorelib2.chat.ChatInput; -import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; -import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable; -import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage; -import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.HoverAction; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; -import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.LockedCategory; -import me.mrCookieSlime.Slimefun.Objects.Research; -import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.MultiBlockMachine; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.api.GuideHandler; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout; +import me.mrCookieSlime.Slimefun.guides.BookSlimefunGuide; +import me.mrCookieSlime.Slimefun.guides.ChestSlimefunGuide; +import me.mrCookieSlime.Slimefun.guides.ISlimefunGuide; +import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.hooks.github.Contributor; import me.mrCookieSlime.Slimefun.hooks.github.IntegerFormat; public final class SlimefunGuide { private SlimefunGuide() {} + + static { + Map layouts = SlimefunPlugin.getUtilities().guideLayouts; + ISlimefunGuide chestGuide = new ChestSlimefunGuide(); + layouts.put(SlimefunGuideLayout.CHEST, chestGuide); + layouts.put(SlimefunGuideLayout.CHEAT_SHEET, chestGuide); + layouts.put(SlimefunGuideLayout.BOOK, new BookSlimefunGuide()); + } - 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 @@ -143,7 +129,7 @@ public final class SlimefunGuide { }); } - menu.addItem(1, new CustomItem(new ItemStack(Material.WRITABLE_BOOK), "&aCredits", "", "&7Version: &a" + SlimefunPlugin.instance.getDescription().getVersion(), "&7Contributors: &e" + SlimefunPlugin.getUtilities().contributors.size(), "", "&7\u21E8 Click to see the people behind this Plugin")); + menu.addItem(1, new CustomItem(new ItemStack(Material.WRITABLE_BOOK), "&aCredits", "", "&7Version: &a" + Slimefun.getVersion(), "&7Installed Addons: &b" + Slimefun.getInstalledAddons().size(), "&7Contributors: &e" + SlimefunPlugin.getUtilities().contributors.size(), "", "&7\u21E8 Click to see the people behind this Plugin")); menu.addMenuClickHandler(1, (pl, slot, item, action) -> { openCredits(pl, guide); return false; @@ -162,7 +148,7 @@ public final class SlimefunGuide { Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Info-Panel for Slimefun " + Slimefun.getVersion(), x); } - menu.addItem(7, new CustomItem(new ItemStack(Material.REDSTONE), "&4Bug Tracker", "", "&7Unsolved Issues: &a" + SlimefunPlugin.getUtilities().issues, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker")); + menu.addItem(7, new CustomItem(new ItemStack(Material.REDSTONE), "&4Bug Tracker", "", "&7Open Issues: &a" + SlimefunPlugin.getUtilities().issues, "&7Pending Pull Requests: &a" + SlimefunPlugin.getUtilities().prs, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker")); menu.addMenuClickHandler(7, (pl, slot, item, action) -> { pl.closeInventory(); pl.sendMessage(""); @@ -238,887 +224,54 @@ public final class SlimefunGuide { } public static void openCheatMenu(Player p) { - openMainMenuAsync(p, false, false, 1); + openMainMenuAsync(p, false, SlimefunGuideLayout.CHEAT_SHEET, 1); } + @Deprecated public static void openGuide(Player p, boolean book) { + openGuide(p, book ? SlimefunGuideLayout.BOOK: SlimefunGuideLayout.CHEST); + } + + public static void openGuide(Player p, SlimefunGuideLayout layout) { if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return; if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return; + ISlimefunGuide guide = SlimefunPlugin.getUtilities().guideLayouts.get(layout); Object last = null; Optional profile = PlayerProfile.find(p); if (profile.isPresent()) { - last = getLastEntry(profile.get(), false); + last = guide.getLastEntry(profile.get(), false); + guide.handleHistory(profile.get(), last, true); + } + else { + openMainMenuAsync(p, true, layout, 1); } - - if (last == null) - openMainMenuAsync(p, true, book, 1); - else - handleHistory(p, last, book, false); } - private static void openMainMenuAsync(final Player player, final boolean survival, final boolean book, final int selected_page) { - if (!PlayerProfile.get(player, profile -> Slimefun.runSync(() -> openMainMenu(profile, survival, book, selected_page)))) + private static void openMainMenuAsync(final Player player, final boolean survival, final SlimefunGuideLayout layout, final int selected_page) { + if (!PlayerProfile.get(player, profile -> Slimefun.runSync(() -> openMainMenu(profile, layout, survival, selected_page)))) Slimefun.getLocal().sendMessage(player, "messages.opening-guide"); } - private static void openMainMenu(final PlayerProfile profile, final boolean survival, final boolean book, final int selected_page) { - Player p = profile.getPlayer(); - if (p == null) return; - - if (survival) { - profile.getGuideHistory().clear(); - } - - if (book) { - List pages = new ArrayList<>(); - List texts = new ArrayList<>(); - List tooltips = new ArrayList<>(); - List actions = new ArrayList<>(); - - int tier = 0; - - for (final Category category: Category.list()) { - boolean locked = true; - - for (SlimefunItem item: category.getItems()) { - if (Slimefun.isEnabled(p, item, false)) { - locked = false; - break; - } - } - - if (!locked) { - if (tier < category.getTier()) { - if (survival) { - for (final GuideHandler handler: Slimefun.getGuideHandlers(tier)) { - handler.addEntry(texts, tooltips); - actions.add(new PlayerRunnable(2) { - - @Override - public void run(Player p) { - handler.run(p, survival, book); - } - }); - } - } - tier = category.getTier(); - if (tier > 1) { - for (int i = 0; i < 10; i++) { - if (texts.size() % 10 == 0) break; - texts.add(" "); - tooltips.add(null); - actions.add(null); - } - } - texts.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &6Tier " + tier)); - tooltips.add(null); - actions.add(null); - } - if (category instanceof LockedCategory && !((LockedCategory) category).hasUnlocked(p, profile)) { - StringBuilder parents = new StringBuilder(ChatColor.translateAlternateColorCodes('&', "&4&lLOCKED\n\n&7In order to unlock this Category,\n&7you need to unlock all Items from\n&7the following Categories first:\n")); - - for (Category parent: ((LockedCategory) category).getParents()) { - parents.append(ChatColor.translateAlternateColorCodes('&', "\n&c" + StringUtils.formatItemName(parent.getItem(), false))); - } - - texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&c" , StringUtils.formatItemName(category.getItem(), false)))); - tooltips.add(parents.toString()); - actions.add(null); - } - else if (category instanceof SeasonalCategory) { - if (((SeasonalCategory) category).isUnlocked()) { - texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&a", StringUtils.formatItemName(category.getItem(), false)))); - tooltips.add(ChatColor.translateAlternateColorCodes('&', "&eClick to open the following Category:\n" + StringUtils.formatItemName(category.getItem(), false))); - actions.add(new PlayerRunnable(1) { - @Override - public void run(final Player p) { - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, 1, book), 1L); - } - }); - } - } - else { - texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&a", StringUtils.formatItemName(category.getItem(), false)))); - tooltips.add(ChatColor.translateAlternateColorCodes('&', "&eClick to open the following Category:\n" + StringUtils.formatItemName(category.getItem(), false))); - actions.add(new PlayerRunnable(1) { - @Override - public void run(final Player p) { - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, 1, book), 1L); - } - }); - } - } - } - - if (survival) { - for (final GuideHandler handler: Slimefun.getGuideHandlers(tier)) { - handler.addEntry(texts, tooltips); - actions.add(new PlayerRunnable(2) { - @Override - public void run(Player p) { - handler.run(p, survival, book); - } - }); - } - } - - 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"); -// if (i > 0) { -// page.addText(ChatColor.translateAlternateColorCodes('&', "&c<- Prev")); -// page.addHoverEvent(HoverAction.SHOW_TEXT, ChatColor.translateAlternateColorCodes('&', "&eGo to Page " + (i))); -// page.addClickEvent(me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.ClickAction.CHANGE_PAGE, String.valueOf(i)); -// page.addText(" "); -// } -// if (texts.size() > i * 10) { -// page.addText(" "); -// page.addText(ChatColor.translateAlternateColorCodes('&', "&cNext ->")); -// page.addHoverEvent(HoverAction.SHOW_TEXT, ChatColor.translateAlternateColorCodes('&', "&eGo to Page " + (i + 2))); -// page.addClickEvent(me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.ClickAction.CHANGE_PAGE, String.valueOf(i + 2)); -// } - pages.add(page); - } - - new CustomBookOverlay("Slimefun Guide", "TheBusyBiscuit", pages.toArray(new TellRawMessage[pages.size()])).open(p); - } - else { - final ChestMenu menu = new ChestMenu("Slimefun Guide"); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1)); - - List categories = SlimefunPlugin.getUtilities().enabledCategories; - List handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList()); - - int index = 9; - int pages = 1; - - fillInv(menu, !survival); - - int target = (CATEGORY_SIZE * (selected_page - 1)) - 1; - - while (target < (categories.size() + handlers.size() - 1)) { - if (index >= CATEGORY_SIZE + 9) { - pages++; - break; - } - - target++; - - if (target >= categories.size()) { - if (!survival) { - break; - } - - index = handlers.get(target - categories.size()).next(p, index, menu); - } - else { - Category category = categories.get(target); - boolean locked = true; - - for (SlimefunItem item: category.getItems()) { - if (Slimefun.isEnabled(p, item, false)) { - locked = false; - break; - } - } - - if (!locked) { - if (!(category instanceof LockedCategory)) { - if (!(category instanceof SeasonalCategory)) { - menu.addItem(index, category.getItem()); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - openCategory(pl, category, survival, 1, book); - return false; - }); - index++; - } - else { - if (((SeasonalCategory) category).isUnlocked()) { - menu.addItem(index, category.getItem()); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - openCategory(pl, category, survival, 1, book); - return false; - }); - index++; - } - } - } - else if (!survival || ((LockedCategory) category).hasUnlocked(p, profile)) { - menu.addItem(index, category.getItem()); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - openCategory(pl, category, survival, 1, book); - return false; - }); - index++; - } - else { - List parents = new ArrayList<>(); - parents.add(""); - 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[0]))); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); - index++; - } - } - } - } - - final int finalPages = pages; - - menu.addItem(46, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&r\u21E6 Previous Page", "", "&7(" + selected_page + " / " + pages + ")")); - menu.addMenuClickHandler(46, (pl, slot, item, action) -> { - int next = selected_page - 1; - if (next < 1) next = finalPages; - if (next != selected_page) openMainMenuAsync(pl, survival, book, next); - return false; - }); - - menu.addItem(52, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + selected_page + " / " + pages + ")")); - menu.addMenuClickHandler(52, (pl, slot, item, action) -> { - int next = selected_page + 1; - if (next > finalPages) next = 1; - if (next != selected_page) openMainMenuAsync(pl, survival, book, next); - return false; - }); - - menu.open(p); - } + public static void openMainMenu(final PlayerProfile profile, SlimefunGuideLayout layout, final boolean survival, final int selected_page) { + SlimefunPlugin.getUtilities().guideLayouts.get(layout).openMainMenu(profile, survival, selected_page); } - private static String shorten(String string, String string2) { - if (ChatColor.stripColor(string + string2).length() > 19) return (string + ChatColor.stripColor(string2)).substring(0, 18) + "..."; - else return (string + ChatColor.stripColor(string2)); - } - - private static void openCategory(final Player p, final Category category, final boolean survival, final int selected_page, final boolean book) { + public static void openCategory(final PlayerProfile profile, final Category category, SlimefunGuideLayout layout, final boolean survival, final int selected_page) { if (category == null) return; - - if (book && category.getItems().size() < 250) { - List pages = new ArrayList<>(); - List texts = new ArrayList<>(); - List tooltips = new ArrayList<>(); - List actions = new ArrayList<>(); - - for (final SlimefunItem item: category.getItems()) { - if (Slimefun.hasPermission(p, item, false)) { - if (Slimefun.isEnabled(p, item, false)) { - if (survival && !Slimefun.hasUnlocked(p, item, false) && item.getResearch() != null) { - final Research research = item.getResearch(); - - texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&7", StringUtils.formatItemName(item.getItem(), false)))); - tooltips.add(ChatColor.translateAlternateColorCodes('&', StringUtils.formatItemName(item.getItem(), false) + "\n&c&lLOCKED\n\n&7Cost: " + (p.getLevel() >= research.getCost() ? "&b": "&4") + research.getCost() + " Levels\n\n&a> Click to unlock")); - actions.add(new PlayerRunnable(2) { - - @Override - public void run(final Player p) { - if (!Research.isResearching(p)) { - if (research.canUnlock(p)) { - PlayerProfile profile = PlayerProfile.get(p); - - if (profile.hasUnlocked(research)) { - openCategory(p, category, true, selected_page, book); - } - else { - if (!(p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative)) { - p.setLevel(p.getLevel() - research.getCost()); - } - - if (p.getGameMode() == GameMode.CREATIVE) { - research.unlock(p, true); - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, selected_page, book), 1L); - } - else { - research.unlock(p, false); - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, selected_page, book), 103L); - } - } - } else SlimefunPlugin.getLocal().sendMessage(p, "messages.not-enough-xp", true); - } - } - }); - } - else { - texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&a", StringUtils.formatItemName(item.getItem(), false)))); - - StringBuilder tooltip = new StringBuilder(); - - tooltip.append(StringUtils.formatItemName(item.getItem(), false)); - - if (item.getItem().hasItemMeta() && item.getItem().getItemMeta().hasLore()) { - for (String line : item.getItem().getItemMeta().getLore()) { - tooltip.append("\n" + line); - } - } - - tooltip.append(ChatColor.translateAlternateColorCodes('&', "\n\n&e&oClick for more Info")); - - tooltips.add(tooltip.toString()); - actions.add(new PlayerRunnable(2) { - - @Override - public void run(Player p) { - displayItem(p, item.getItem(), true, book, 0); - } - }); - } - } - } - else { - texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&4", StringUtils.formatItemName(item.getItem(), false)))); - tooltips.add(ChatColor.translateAlternateColorCodes('&', "&cNo Permission!")); - actions.add(null); - } - } - - 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) { - openMainMenuAsync(p, survival, true, 1); - } - - }); - pages.add(page); - } - - new CustomBookOverlay("Slimefun Guide", "TheBusyBiscuit", pages.toArray(new TellRawMessage[pages.size()])).open(p); - } - else { - final ChestMenu menu = new ChestMenu("Slimefun Guide"); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1)); - - int index = 9; - final int pages = (category.getItems().size() - 1) / CATEGORY_SIZE + 1; - for (int i = 0; i < 4; i++) { - menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); - } - - menu.addItem(4, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back")); - menu.addMenuClickHandler(4, (pl, slot, item, action) -> { - openMainMenuAsync(pl, survival, book, 1); - return false; - }); - - for (int i = 5; i < 9; i++) { - menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - 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.addItem(46, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&r\u21E6 Previous Page", "", "&7(" + selected_page + " / " + pages + ")")); - menu.addMenuClickHandler(46, (pl, slot, item, action) -> { - int next = selected_page - 1; - if (next < 1) next = pages; - if (next != selected_page) openCategory(pl, category, survival, next, book); - return false; - }); - - menu.addItem(52, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + selected_page + " / " + pages + ")")); - menu.addMenuClickHandler(52, (pl, slot, item, action) -> { - int next = selected_page + 1; - if (next > pages) next = 1; - if (next != selected_page) openCategory(pl, category, survival, next, book); - return false; - }); - - PlayerProfile profile = PlayerProfile.get(p); - - int categoryIndex = CATEGORY_SIZE * (selected_page - 1); - for (int i = 0; i < CATEGORY_SIZE; i++) { - int target = categoryIndex + i; - if (target >= category.getItems().size()) break; - final SlimefunItem sfitem = category.getItems().get(target); - - if (Slimefun.isEnabled(p, sfitem, false)) { - final Research research = sfitem.getResearch(); - if (survival && research != null && !profile.hasUnlocked(research)) { - if (Slimefun.hasPermission(p, sfitem, false)) { - menu.addItem(index, new CustomItem(Material.BARRIER, "&r" + ItemUtils.getItemName(sfitem.getItem()), "&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + research.getCost() + " Level")); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - if (!Research.isResearching(pl)) { - if (research.canUnlock(pl)) { - - if (profile.hasUnlocked(research)) { - openCategory(p, category, true, selected_page, book); - } - else { - if (!(pl.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative)) { - pl.setLevel(pl.getLevel() - research.getCost()); - } - - if (pl.getGameMode() == GameMode.CREATIVE) { - research.unlock(pl, SlimefunPlugin.getSettings().researchesFreeInCreative); - openCategory(pl, category, survival, selected_page, book); - } - else { - research.unlock(pl, false); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(pl, category, survival, selected_page, book), 103L); - } - } - } - else SlimefunPlugin.getLocal().sendMessage(pl, "messages.not-enough-xp", true); - } - return false; - }); - - index++; - } - else { - List message = sfitem.getNoPermissionTooltip(); - menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), message.toArray(new String[message.size()]))); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); - index++; - } - } - else { - menu.addItem(index, sfitem.getItem()); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - if (survival) displayItem(pl, item, true, book, 0); - else { - if (sfitem instanceof MultiBlockMachine) { - SlimefunPlugin.getLocal().sendMessage(pl, "guide.cheat.no-multiblocks"); - } - else { - pl.getInventory().addItem(item); - } - } - return false; - }); - index++; - } - } - } - - menu.open(p); - } - - if (survival) { - PlayerProfile.get(p, profile -> profile.getGuideHistory().add(category)); - } + SlimefunPlugin.getUtilities().guideLayouts.get(layout).openCategory(profile, category, survival, selected_page); } - public static void openSearch(Player player, String input, boolean cheat, boolean addToHistory) { - PlayerProfile.get(player, profile -> { - final ChestMenu menu = new ChestMenu("Searching for: " + shorten("", input)); - - menu.setEmptySlotsClickable(false); - fillInv(menu, cheat); - addBackButton(menu, 1, profile, cheat); - - String searchTerm = input.toLowerCase(); - - int index = 9; - // Find items and add them - for (SlimefunItem item : SlimefunItem.list()) { - final String itemName = ChatColor.stripColor(item.getItem().getItemMeta().getDisplayName()).toLowerCase(); - - if (itemName.isEmpty()) continue; - if (index == 44) break; - - if (itemName.equals(searchTerm) || itemName.contains(searchTerm)) { - menu.addItem(index, item.getItem()); - menu.addMenuClickHandler(index, (pl, slot, itm, action) -> { - if (cheat) { - pl.getInventory().addItem(itm); - } - else { - displayItem(pl, itm, true, false, 0); - } - - return false; - }); - - index++; - } - } - - if (addToHistory) { - profile.getGuideHistory().add(searchTerm); - } - - menu.open(player); - }); + public static void openSearch(final PlayerProfile profile, String input, boolean survival, boolean addToHistory) { + SlimefunPlugin.getUtilities().guideLayouts.get(SlimefunGuideLayout.CHEST).openSearch(profile, input, survival, addToHistory); } - private static void fillInv(ChestMenu menu, boolean cheat) { - for (int i = 0; i < 9; i++) { - menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, (arg0, arg1, arg2, arg3) -> false); - } - - // Search feature! - menu.addItem(7, new CustomItem(Material.NAME_TAG, SlimefunPlugin.getLocal().getMessage("guide.search.name"), SlimefunPlugin.getLocal().getMessagesArray("guide.search.lore"))); - - menu.addMenuClickHandler(7, (player, i, itemStack, clickAction) -> { - player.closeInventory(); - SlimefunPlugin.getLocal().sendMessage(player, "search.message"); - - ChatInput.waitForPlayer(SlimefunPlugin.instance, player, msg -> - openSearch(player, msg, cheat, true) - ); - - return false; - }); - - for (int i = 45; i < 54; i++) { - menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, (arg0, arg1, arg2, arg3) -> false); - } + public static void displayItem(PlayerProfile profile, final ItemStack item, boolean addToHistory) { + SlimefunPlugin.getUtilities().guideLayouts.get(SlimefunGuideLayout.CHEST).displayItem(profile, item, addToHistory); } - private static void addBackButton(ChestMenu menu, int slot, PlayerProfile profile, boolean cheat) { - List playerHistory = profile.getGuideHistory(); - - if (playerHistory.size() > 1) { - - menu.addItem(slot, 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(slot, (pl, s, is, action) -> { - if (action.isShiftClicked()) { - openMainMenu(profile, !cheat, false, 1); - } - else { - Object last = getLastEntry(profile, true); - handleHistory(pl, last, false, cheat); - } - return false; - }); - - } - else { - menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); - menu.addMenuClickHandler(slot, (pl, s, is, action) -> { - openMainMenu(profile, !cheat, false, 1); - return false; - }); - } - } - - private static Object getLastEntry(PlayerProfile profile, boolean remove) { - LinkedList history = profile.getGuideHistory(); - - if (remove && !history.isEmpty()) { - history.removeLast(); - } - - return history.isEmpty() ? null: history.getLast(); - } - - private static void displayItem(Player p, final ItemStack item, boolean addToHistory, final boolean book, final int page) { - if (item == null || item.getType() == Material.AIR) return; - - final SlimefunItem sfItem = SlimefunItem.getByItem(item); - - if (sfItem == null && !SlimefunPlugin.getSettings().guideShowVanillaRecipes) return; - - ItemStack[] recipe = new ItemStack[9]; - ItemStack recipeType = null; - ItemStack recipeOutput = item; - - ChestMenu menu = new ChestMenu("Slimefun Guide"); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1)); - - if (sfItem != null) { - recipe = sfItem.getRecipe(); - recipeType = sfItem.getRecipeType().toItem(); - recipeOutput = sfItem.getRecipeOutput() != null ? sfItem.getRecipeOutput(): sfItem.getItem(); - } - else { - List recipes = new ArrayList<>(); - Iterator iterator = Bukkit.recipeIterator(); - while (iterator.hasNext()) { - Recipe r = iterator.next(); - if (SlimefunManager.isItemSimiliar(new CustomItem(r.getResult(), 1), item, true)) recipes.add(r); - } - - if (recipes.isEmpty()) return; - Recipe r = recipes.get(page); - - if (recipes.size() > page + 1) { - menu.addItem(1, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7Next \u21E8", "", "&e&l! &rThere are multiple recipes for this Item")); - menu.addMenuClickHandler(1, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, false, book, page + 1); - return false; - }); - } - - if (r instanceof ShapedRecipe) { - String[] shape = ((ShapedRecipe) r).getShape(); - for (int i = 0; i < shape.length; i++) { - for (int j = 0; j < shape[i].length(); j++) { - recipe[i * 3 + j] = ((ShapedRecipe) r).getIngredientMap().get(shape[i].charAt(j)); - } - } - recipeType = RecipeType.SHAPED_RECIPE.toItem(); - recipeOutput = r.getResult(); - } - else if (r instanceof ShapelessRecipe) { - List ingredients = ((ShapelessRecipe) r).getIngredientList(); - for (int i = 0; i < ingredients.size(); i++) { - recipe[i] = ingredients.get(i); - } - recipeType = RecipeType.SHAPELESS_RECIPE.toItem(); - recipeOutput = r.getResult(); - } - else if (r instanceof FurnaceRecipe) { - recipe[4] = ((FurnaceRecipe) r).getInput(); - - recipeType = RecipeType.FURNACE.toItem(); - recipeOutput = r.getResult(); - } - } - - PlayerProfile profile = PlayerProfile.get(p); - - addBackButton(menu, 0, profile, false); - - LinkedList history = profile.getGuideHistory(); - - if (addToHistory) { - history.add(sfItem != null ? sfItem: item); - } - - if (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()) openMainMenuAsync(p, true, book, 1); - else { - Object last = getLastEntry(profile, true); - handleHistory(pl, last, book, false); - } - return false; - }); - } - else { - menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); - menu.addMenuClickHandler(0, (pl, slot, itemstack, action) -> { - openMainMenuAsync(pl, true, book, 1); - return false; - }); - } - - menu.addItem(3, getDisplayItem(p, sfItem != null, recipe[0])); - menu.addMenuClickHandler(3, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(4, getDisplayItem(p, sfItem != null, recipe[1])); - menu.addMenuClickHandler(4, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(5, getDisplayItem(p, sfItem != null, recipe[2])); - menu.addMenuClickHandler(5, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - if (sfItem != null) { - if (sfItem.hasWiki()) { - try { - menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, "&rView this Item on our Wiki &7(Slimefun Wiki)", "", "&7\u21E8 Click to open")); - menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { - pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + sfItem.getWiki())); - pl.sendMessage(""); - return false; - }); - } catch (Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while adding a Wiki Page for Slimefun " + Slimefun.getVersion(), x); - } - } - - if (Slimefun.getItemConfig().contains(sfItem.getID() + ".youtube")) { - try { - menu.addItem(7, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzNTNmZDBmODYzMTQzNTM4NzY1ODYwNzViOWJkZjBjNDg0YWFiMDMzMWI4NzJkZjExYmQ1NjRmY2IwMjllZCJ9fX0="), "&rDemonstration Video &7(Youtube)", "", "&7\u21E8 Click to watch")); - menu.addMenuClickHandler(7, (pl, slot, itemstack, action) -> { - pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + Slimefun.getItemConfig().getString(sfItem.getID() + ".youtube"))); - pl.sendMessage(""); - return false; - }); - } catch (Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while adding a Youtube Video for Slimefun " + Slimefun.getVersion(), x); - } - } - } - - menu.addItem(10, recipeType); - menu.addMenuClickHandler(10, (pl, slot, itemstack, action) -> false); - - menu.addItem(12, getDisplayItem(p, sfItem != null, recipe[3])); - menu.addMenuClickHandler(12, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(13, getDisplayItem(p, sfItem != null, recipe[4])); - menu.addMenuClickHandler(13, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(14, getDisplayItem(p, sfItem != null, recipe[5])); - menu.addMenuClickHandler(14, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(16, recipeOutput); - menu.addMenuClickHandler(16, (pl, slot, itemstack, action) -> false); - - menu.addItem(21, getDisplayItem(p, sfItem != null, recipe[6])); - menu.addMenuClickHandler(21, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(22, getDisplayItem(p, sfItem != null, recipe[7])); - menu.addMenuClickHandler(22, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - menu.addItem(23, getDisplayItem(p, sfItem != null, recipe[8])); - menu.addMenuClickHandler(23, (pl, slot, itemstack, action) -> { - displayItem(pl, itemstack, true, book, 0); - return false; - }); - - if (sfItem instanceof RecipeDisplayItem) { - displayRecipes(menu, (RecipeDisplayItem) sfItem, 0); - } - - menu.open(p); - } - - private static ItemStack getDisplayItem(Player p, boolean isSlimefunRecipe, ItemStack item) { - if (isSlimefunRecipe) { - SlimefunItem slimefunItem = SlimefunItem.getByItem(item); - if (slimefunItem == null) return item; - - String lore = Slimefun.hasPermission(p, slimefunItem, false) ? "&rNeeds to be unlocked elsewhere" : "&rNo Permission"; - return Slimefun.hasUnlocked(p, slimefunItem, false) ? item: new CustomItem(Material.BARRIER, ItemUtils.getItemName(item), "&4&lLOCKED", "", lore); - } - else { - return item; - } - } - - private static void handleHistory(Player pl, Object last, boolean book, boolean cheat) { - if (last instanceof Category) openCategory(pl, (Category) last, !cheat, 1, book); - else if (last instanceof SlimefunItem) displayItem(pl, ((SlimefunItem) last).getItem(), false, book, 0); - else if (last instanceof GuideHandler) ((GuideHandler) last).run(pl, true, book); - else if (last instanceof String) openSearch(pl, (String) last, cheat, false); - else displayItem(pl, (ItemStack) last, false, book, 0); - } - - private static void displayRecipes(ChestMenu menu, RecipeDisplayItem sfItem, int page) { - List recipes = sfItem.getDisplayRecipes(); - - if (!recipes.isEmpty()) { - menu.addItem(53, null); - - if (page == 0) { - for (int i = 27; i < 36; i++) { - menu.replaceExistingItem(i, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, sfItem.getRecipeSectionLabel())); - menu.addMenuClickHandler(i, (pl, slot, itemstack, action) -> false); - } - } - else { - menu.replaceExistingItem(28, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&a\u21E6 Previous Page")); - menu.addMenuClickHandler(28, (pl, slot, itemstack, action) -> { - displayRecipes(menu, sfItem, page - 1); - pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1); - return false; - }); - } - - if (recipes.size() > (18 * (page + 1))) { - menu.replaceExistingItem(34, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&aNext Page \u21E8")); - menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> { - displayRecipes(menu, sfItem, page + 1); - pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1); - return false; - }); - } - else { - menu.replaceExistingItem(34, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, sfItem.getRecipeSectionLabel())); - menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> false); - } - - int inputs = 36; - int outputs = 45; - - for (int i = 0; i < 18; i++) { - int slot = i % 2 == 0 ? inputs++: outputs++; - - if ((i + (page * 18)) < recipes.size()) { - if (page == 0) { - menu.replaceExistingItem(slot, recipes.get(i + (page * 18))); - menu.addMenuClickHandler(slot, (pl, s, itemstack, action) -> { - displayItem(pl, itemstack, true, false, 0); - return false; - }); - } - else { - menu.replaceExistingItem(slot, recipes.get(i + (page * 18))); - } - } - else { - menu.replaceExistingItem(slot, null); - menu.addMenuClickHandler(slot, (pl, s, itemstack, action) -> false); - } - } - } + public static void displayItem(PlayerProfile profile, final SlimefunItem item, boolean addToHistory) { + SlimefunPlugin.getUtilities().guideLayouts.get(SlimefunGuideLayout.CHEST).displayItem(profile, item, addToHistory); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java b/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java index f52393794..91ee8602c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java @@ -3,11 +3,14 @@ package me.mrCookieSlime.Slimefun.api; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Set; import java.util.logging.Logger; +import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.SlimefunPlugin; @@ -328,4 +331,15 @@ public final class Slimefun { public static void runSync(Runnable r) { Bukkit.getScheduler().runTask(SlimefunPlugin.instance, r); } + + public static void runSync(Runnable r, long delay) { + Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, r, delay); + } + + public static Set getInstalledAddons() { + return Arrays.stream(SlimefunPlugin.instance.getServer().getPluginManager().getPlugins()) + .filter(Plugin::isEnabled) + .filter(plugin -> plugin.getDescription().getDepend().contains("Slimefun") || plugin.getDescription().getSoftDepend().contains("Slimefun")) + .collect(Collectors.toSet()); + } } \ No newline at end of file diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/GuideCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/GuideCommand.java index 3e9cbd3ea..c551364dd 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/GuideCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/GuideCommand.java @@ -5,9 +5,9 @@ import org.bukkit.entity.Player; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.commands.SubCommand; +import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; public class GuideCommand extends SubCommand { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/SearchCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/SearchCommand.java index 3d293262d..5781e4862 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/SearchCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/SearchCommand.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.commands.SubCommand; @@ -27,7 +28,7 @@ public class SearchCommand extends SubCommand { if (sender.hasPermission("slimefun.command.search")) { if (args.length > 1) { String query = String.join(" ", Arrays.copyOfRange(args, 1, args.length)); - SlimefunGuide.openSearch((Player) sender, query, false, false); + PlayerProfile.get((Player) sender, profile -> SlimefunGuide.openSearch(profile, query, true, true)); } else { SlimefunPlugin.getLocal().sendMessage(sender, "messages.usage", true, msg -> msg.replace("%usage%", "/sf search ")); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/BookSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/BookSlimefunGuide.java new file mode 100644 index 000000000..5eb8b23a0 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/BookSlimefunGuide.java @@ -0,0 +1,288 @@ +package me.mrCookieSlime.Slimefun.guides; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable; +import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage; +import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.HoverAction; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; +import me.mrCookieSlime.Slimefun.SlimefunGuide; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.LockedCategory; +import me.mrCookieSlime.Slimefun.Objects.Research; +import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.api.GuideHandler; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; +import me.mrCookieSlime.Slimefun.api.Slimefun; + +public class BookSlimefunGuide implements ISlimefunGuide { + + @Override + public SlimefunGuideLayout getLayout() { + return SlimefunGuideLayout.BOOK; + } + + @Override + public ItemStack getItem() { + return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&aSlimefun Guide &7(Book GUI)", "", "&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits"); + } + + @Override + public void openMainMenu(PlayerProfile profile, boolean survival, int page) { + Player p = profile.getPlayer(); + if (p == null) return; + + if (survival) { + profile.getGuideHistory().clear(); + } + + List pages = new ArrayList<>(); + List texts = new ArrayList<>(); + List tooltips = new ArrayList<>(); + List actions = new ArrayList<>(); + + int tier = 0; + + for (final Category category: Category.list()) { + boolean locked = true; + + for (SlimefunItem item: category.getItems()) { + if (Slimefun.isEnabled(p, item, false)) { + locked = false; + break; + } + } + + if (!locked) { + if (tier < category.getTier()) { + if (survival) { + for (final GuideHandler handler: Slimefun.getGuideHandlers(tier)) { + handler.addEntry(texts, tooltips); + actions.add(new PlayerRunnable(2) { + + @Override + public void run(Player p) { + handler.run(p, survival, true); + } + }); + } + } + tier = category.getTier(); + if (tier > 1) { + for (int i = 0; i < 10; i++) { + if (texts.size() % 10 == 0) break; + texts.add(" "); + tooltips.add(null); + actions.add(null); + } + } + texts.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &6Tier " + tier)); + tooltips.add(null); + actions.add(null); + } + if (category instanceof LockedCategory && !((LockedCategory) category).hasUnlocked(p, profile)) { + StringBuilder parents = new StringBuilder(ChatColor.translateAlternateColorCodes('&', "&4&lLOCKED\n\n&7In order to unlock this Category,\n&7you need to unlock all Items from\n&7the following Categories first:\n")); + + for (Category parent: ((LockedCategory) category).getParents()) { + parents.append(ChatColor.translateAlternateColorCodes('&', "\n&c" + StringUtils.formatItemName(parent.getItem(), false))); + } + + texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&c" , StringUtils.formatItemName(category.getItem(), false)))); + tooltips.add(parents.toString()); + actions.add(null); + } + else if (category instanceof SeasonalCategory) { + if (((SeasonalCategory) category).isUnlocked()) { + texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&a", StringUtils.formatItemName(category.getItem(), false)))); + tooltips.add(ChatColor.translateAlternateColorCodes('&', "&eClick to open the following Category:\n" + StringUtils.formatItemName(category.getItem(), false))); + actions.add(new PlayerRunnable(1) { + @Override + public void run(final Player p) { + Slimefun.runSync(() -> openCategory(profile, category, survival, 1), 1L); + } + }); + } + } + else { + texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&a", StringUtils.formatItemName(category.getItem(), false)))); + tooltips.add(ChatColor.translateAlternateColorCodes('&', "&eClick to open the following Category:\n" + StringUtils.formatItemName(category.getItem(), false))); + actions.add(new PlayerRunnable(1) { + @Override + public void run(final Player p) { + Slimefun.runSync(() -> openCategory(profile, category, survival, 1), 1L); + } + }); + } + } + } + + if (survival) { + for (final GuideHandler handler: Slimefun.getGuideHandlers(tier)) { + handler.addEntry(texts, tooltips); + actions.add(new PlayerRunnable(2) { + @Override + public void run(Player p) { + handler.run(p, survival, true); + } + }); + } + } + + for (int i = 0; i < texts.size(); i = i + 10) { + TellRawMessage pageMessage = new TellRawMessage(); + pageMessage.addText(ChatColor.translateAlternateColorCodes('&', "&b&l- Slimefun Guide -\n\n")); + for (int j = i; j < texts.size() && j < i + 10; j++) { + pageMessage.addText(texts.get(j) + "\n"); + if (tooltips.get(j) != null) pageMessage.addHoverEvent(HoverAction.SHOW_TEXT, tooltips.get(j)); + if (actions.get(j) != null) pageMessage.addClickEvent(actions.get(j)); + } + pages.add(pageMessage); + } + + new CustomBookOverlay("Slimefun Guide", "TheBusyBiscuit", pages.toArray(new TellRawMessage[0])).open(p); + } + + @Override + public void openCategory(PlayerProfile profile, Category category, boolean survival, int page) { + Player p = profile.getPlayer(); + if (p == null) return; + + if (category.getItems().size() < 250) { + + if (survival) { + profile.getGuideHistory().add(category); + } + + List pages = new ArrayList<>(); + List texts = new ArrayList<>(); + List tooltips = new ArrayList<>(); + List actions = new ArrayList<>(); + + for (final SlimefunItem item: category.getItems()) { + if (Slimefun.hasPermission(p, item, false)) { + if (Slimefun.isEnabled(p, item, false)) { + if (survival && !Slimefun.hasUnlocked(p, item, false) && item.getResearch() != null) { + final Research research = item.getResearch(); + + texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&7", StringUtils.formatItemName(item.getItem(), false)))); + tooltips.add(ChatColor.translateAlternateColorCodes('&', StringUtils.formatItemName(item.getItem(), false) + "\n&c&lLOCKED\n\n&7Cost: " + (p.getLevel() >= research.getCost() ? "&b": "&4") + research.getCost() + " Levels\n\n&a> Click to unlock")); + actions.add(new PlayerRunnable(2) { + + @Override + public void run(final Player p) { + if (!Research.isResearching(p)) { + if (research.canUnlock(p)) { + if (profile.hasUnlocked(research)) { + openCategory(profile, category, true, page); + } + else { + if (!(p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative)) { + p.setLevel(p.getLevel() - research.getCost()); + } + + if (p.getGameMode() == GameMode.CREATIVE) { + research.unlock(p, true); + + Slimefun.runSync(() -> openCategory(profile, category, survival, page), 1L); + } + else { + research.unlock(p, false); + Slimefun.runSync(() -> openCategory(profile, category, survival, page), 103L); + } + } + } else SlimefunPlugin.getLocal().sendMessage(p, "messages.not-enough-xp", true); + } + } + }); + } + else { + texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&a", StringUtils.formatItemName(item.getItem(), false)))); + + StringBuilder tooltip = new StringBuilder(); + + tooltip.append(StringUtils.formatItemName(item.getItem(), false)); + + if (item.getItem().hasItemMeta() && item.getItem().getItemMeta().hasLore()) { + for (String line : item.getItem().getItemMeta().getLore()) { + tooltip.append("\n" + line); + } + } + + tooltip.append(ChatColor.translateAlternateColorCodes('&', "\n\n&e&oClick for more Info")); + + tooltips.add(tooltip.toString()); + actions.add(new PlayerRunnable(2) { + + @Override + public void run(Player p) { + displayItem(profile, item, true); + } + }); + } + } + } + else { + texts.add(ChatColor.translateAlternateColorCodes('&', shorten("&4", StringUtils.formatItemName(item.getItem(), false)))); + tooltips.add(ChatColor.translateAlternateColorCodes('&', "&cNo Permission!")); + actions.add(null); + } + } + + for (int i = 0; i < texts.size(); i = i + 10) { + TellRawMessage pageMessage = new TellRawMessage(); + pageMessage.addText(ChatColor.translateAlternateColorCodes('&', "&b&l- Slimefun Guide -\n\n")); + + for (int j = i; j < texts.size() && j < i + 10; j++) { + pageMessage.addText(texts.get(j) + "\n"); + if (tooltips.get(j) != null) pageMessage.addHoverEvent(HoverAction.SHOW_TEXT, tooltips.get(j)); + if (actions.get(j) != null) pageMessage.addClickEvent(actions.get(j)); + } + + pageMessage.addText("\n"); + pageMessage.addText(ChatColor.translateAlternateColorCodes('&', "&6\u21E6 &lBack")); + pageMessage.addHoverEvent(HoverAction.SHOW_TEXT, ChatColor.translateAlternateColorCodes('&', "&eClick to go back to the Category Overview")); + pageMessage.addClickEvent(new PlayerRunnable(2) { + + @Override + public void run(final Player p) { + openMainMenu(profile, survival, 1); + } + + }); + pages.add(pageMessage); + } + + new CustomBookOverlay("Slimefun Guide", "TheBusyBiscuit", pages.toArray(new TellRawMessage[0])).open(p); + } + else { + p.sendMessage(ChatColor.RED + "That Category is too big to open :/"); + } + } + + @Override + public void openSearch(PlayerProfile profile, String input, boolean survival, boolean addToHistory) { + SlimefunGuide.openSearch(profile, input, survival, addToHistory); + } + + @Override + public void displayItem(PlayerProfile profile, ItemStack item, boolean addToHistory) { + SlimefunGuide.displayItem(profile, item, addToHistory); + } + + @Override + public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory) { + SlimefunGuide.displayItem(profile, item, addToHistory); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java new file mode 100644 index 000000000..e15da1319 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java @@ -0,0 +1,681 @@ +package me.mrCookieSlime.Slimefun.guides; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.FurnaceRecipe; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.ShapelessRecipe; + +import io.github.thebusybiscuit.cscorelib2.chat.ChatInput; +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; +import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; +import me.mrCookieSlime.Slimefun.SlimefunGuide; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.LockedCategory; +import me.mrCookieSlime.Slimefun.Objects.Research; +import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.MultiBlockMachine; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.GuideHandler; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; +import me.mrCookieSlime.Slimefun.api.Slimefun; + +public class ChestSlimefunGuide implements ISlimefunGuide { + + private static final int CATEGORY_SIZE = 36; + + @Override + public SlimefunGuideLayout getLayout() { + return SlimefunGuideLayout.CHEST; + } + + @Override + public ItemStack getItem() { + return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&aSlimefun Guide &7(Chest GUI)", "", "&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits"); + } + + @Override + public void openMainMenu(PlayerProfile profile, boolean survival, int page) { + Player p = profile.getPlayer(); + if (p == null) return; + + if (survival) { + profile.getGuideHistory().clear(); + } + + final ChestMenu menu = create(); + + List categories = SlimefunPlugin.getUtilities().enabledCategories; + List handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList()); + + int index = 9; + int pages = 1; + + fillInv(profile, p, menu, survival); + + int target = (CATEGORY_SIZE * (page - 1)) - 1; + + while (target < (categories.size() + handlers.size() - 1)) { + if (index >= CATEGORY_SIZE + 9) { + pages++; + break; + } + + target++; + + if (target >= categories.size()) { + if (!survival) { + break; + } + + index = handlers.get(target - categories.size()).next(p, index, menu); + } + else { + Category category = categories.get(target); + boolean locked = true; + + for (SlimefunItem item: category.getItems()) { + if (Slimefun.isEnabled(p, item, false)) { + locked = false; + break; + } + } + + if (!locked) { + if (!(category instanceof LockedCategory)) { + if (!(category instanceof SeasonalCategory)) { + menu.addItem(index, category.getItem()); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + openCategory(profile, category, survival, 1); + return false; + }); + index++; + } + else { + if (((SeasonalCategory) category).isUnlocked()) { + menu.addItem(index, category.getItem()); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + openCategory(profile, category, survival, 1); + return false; + }); + index++; + } + } + } + else if (!survival || ((LockedCategory) category).hasUnlocked(p, profile)) { + menu.addItem(index, category.getItem()); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + openCategory(profile, category, survival, 1); + return false; + }); + index++; + } + else { + List parents = new ArrayList<>(); + parents.add(""); + 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[0]))); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); + index++; + } + } + } + } + + final int finalPages = pages; + + menu.addItem(46, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&r\u21E6 Previous Page", "", "&7(" + page + " / " + pages + ")")); + menu.addMenuClickHandler(46, (pl, slot, item, action) -> { + int next = page - 1; + if (next < 1) next = finalPages; + if (next != page) openMainMenu(profile, survival, next); + return false; + }); + + menu.addItem(52, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + page + " / " + pages + ")")); + menu.addMenuClickHandler(52, (pl, slot, item, action) -> { + int next = page + 1; + if (next > finalPages) next = 1; + if (next != page) openMainMenu(profile, survival, next); + return false; + }); + + menu.open(p); + } + + @Override + public void openCategory(PlayerProfile profile, Category category, boolean survival, int page) { + Player p = profile.getPlayer(); + if (p == null) return; + + if (survival) { + profile.getGuideHistory().add(category); + } + + final ChestMenu menu = create(); + + int index = 9; + final int pages = (category.getItems().size() - 1) / CATEGORY_SIZE + 1; + for (int i = 0; i < 4; i++) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); + } + + menu.addItem(4, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back")); + menu.addMenuClickHandler(4, (pl, slot, item, action) -> { + openMainMenu(profile, survival, 1); + return false; + }); + + for (int i = 5; i < 9; i++) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + 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.addItem(46, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&r\u21E6 Previous Page", "", "&7(" + page + " / " + pages + ")")); + menu.addMenuClickHandler(46, (pl, slot, item, action) -> { + int next = page - 1; + if (next < 1) next = pages; + if (next != page) openCategory(profile, category, survival, next); + return false; + }); + + menu.addItem(52, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + page + " / " + pages + ")")); + menu.addMenuClickHandler(52, (pl, slot, item, action) -> { + int next = page + 1; + if (next > pages) next = 1; + if (next != page) openCategory(profile, category, survival, next); + return false; + }); + + int categoryIndex = CATEGORY_SIZE * (page - 1); + for (int i = 0; i < CATEGORY_SIZE; i++) { + int target = categoryIndex + i; + if (target >= category.getItems().size()) break; + final SlimefunItem sfitem = category.getItems().get(target); + + if (Slimefun.isEnabled(p, sfitem, false)) { + final Research research = sfitem.getResearch(); + if (survival && research != null && !profile.hasUnlocked(research)) { + if (Slimefun.hasPermission(p, sfitem, false)) { + menu.addItem(index, new CustomItem(Material.BARRIER, "&r" + ItemUtils.getItemName(sfitem.getItem()), "&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + research.getCost() + " Level")); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + if (!Research.isResearching(pl)) { + if (research.canUnlock(pl)) { + + if (profile.hasUnlocked(research)) { + openCategory(profile, category, true, page); + } + else { + if (!(pl.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative)) { + pl.setLevel(pl.getLevel() - research.getCost()); + } + + if (pl.getGameMode() == GameMode.CREATIVE) { + research.unlock(pl, SlimefunPlugin.getSettings().researchesFreeInCreative); + openCategory(profile, category, survival, page); + } + else { + research.unlock(pl, false); + Slimefun.runSync(() -> openCategory(profile, category, survival, page), 103L); + } + } + } + else SlimefunPlugin.getLocal().sendMessage(pl, "messages.not-enough-xp", true); + } + return false; + }); + + index++; + } + else { + List message = sfitem.getNoPermissionTooltip(); + menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), message.toArray(new String[message.size()]))); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> false); + index++; + } + } + else { + menu.addItem(index, sfitem.getItem()); + menu.addMenuClickHandler(index, (pl, slot, item, action) -> { + if (survival) { + displayItem(profile, sfitem, true); + } + else { + if (sfitem instanceof MultiBlockMachine) { + SlimefunPlugin.getLocal().sendMessage(pl, "guide.cheat.no-multiblocks"); + } + else { + pl.getInventory().addItem(sfitem.getItem().clone()); + } + } + return false; + }); + index++; + } + } + } + + menu.open(p); + } + + @Override + public void openSearch(PlayerProfile profile, String input, boolean survival, boolean addToHistory) { + Player p = profile.getPlayer(); + if (p == null) return; + + final ChestMenu menu = new ChestMenu("Searching for: " + shorten("", input)); + String searchTerm = input.toLowerCase(); + + if (addToHistory) { + profile.getGuideHistory().add(searchTerm); + } + + menu.setEmptySlotsClickable(false); + fillInv(profile, p, menu, survival); + addBackButton(menu, 1, profile, survival); + + int index = 9; + // Find items and add them + for (SlimefunItem item : SlimefunItem.list()) { + final String itemName = ChatColor.stripColor(item.getItemName()).toLowerCase(); + + if (index == 44) break; + + if (!itemName.isEmpty()) { + if (itemName.equals(searchTerm) || itemName.contains(searchTerm)) { + menu.addItem(index, item.getItem()); + menu.addMenuClickHandler(index, (pl, slot, itm, action) -> { + if (!survival) { + pl.getInventory().addItem(item.getItem().clone()); + } + else { + displayItem(profile, item, true); + } + + return false; + }); + + index++; + } + } + } + + menu.open(p); + } + + @Override + public void displayItem(PlayerProfile profile, ItemStack item, boolean addToHistory) { + Player p = profile.getPlayer(); + if (p == null) return; + + if (item == null || item.getType() == Material.AIR) return; + + final SlimefunItem sfItem = SlimefunItem.getByItem(item); + + if (sfItem != null) { + displayItem(profile, sfItem, addToHistory); + return; + } + + if (!SlimefunPlugin.getSettings().guideShowVanillaRecipes) { + return; + } + + Recipe r = null; + Iterator iterator = Bukkit.recipeIterator(); + while (iterator.hasNext()) { + Recipe current = iterator.next(); + if (SlimefunManager.isItemSimiliar(new CustomItem(current.getResult(), 1), item, true)) { + r = current; + break; + } + } + + if (r == null) { + return; + } + + ItemStack[] recipe = new ItemStack[9]; + RecipeType recipeType = null; + ItemStack result = null; + + if (r instanceof ShapedRecipe) { + String[] shape = ((ShapedRecipe) r).getShape(); + for (int i = 0; i < shape.length; i++) { + for (int j = 0; j < shape[i].length(); j++) { + recipe[i * 3 + j] = ((ShapedRecipe) r).getIngredientMap().get(shape[i].charAt(j)); + } + } + recipeType = RecipeType.SHAPED_RECIPE; + result = r.getResult(); + } + else if (r instanceof ShapelessRecipe) { + List ingredients = ((ShapelessRecipe) r).getIngredientList(); + for (int i = 0; i < ingredients.size(); i++) { + recipe[i] = ingredients.get(i); + } + recipeType = RecipeType.SHAPELESS_RECIPE; + result = r.getResult(); + } + else if (r instanceof FurnaceRecipe) { + recipe[4] = ((FurnaceRecipe) r).getInput(); + + recipeType = RecipeType.FURNACE; + result = r.getResult(); + } + + ChestMenu menu = create(); + displayItem(menu, profile, p, item, result, recipeType, recipe, addToHistory); + menu.open(p); + } + + @Override + public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory) { + Player p = profile.getPlayer(); + if (p == null) return; + + ItemStack result = item.getRecipeOutput() != null ? item.getRecipeOutput(): item.getItem(); + RecipeType recipeType = item.getRecipeType(); + ItemStack[] recipe = item.getRecipe(); + + ChestMenu menu = create(); + + if (item.hasWiki()) { + try { + menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, "&rView this Item on our Wiki &7(Slimefun Wiki)", "", "&7\u21E8 Click to open")); + menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { + pl.closeInventory(); + pl.sendMessage(""); + pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + item.getWiki())); + pl.sendMessage(""); + return false; + }); + } catch (Exception x) { + Slimefun.getLogger().log(Level.SEVERE, "An Error occured while adding a Wiki Page for Slimefun " + Slimefun.getVersion(), x); + } + } + + if (Slimefun.getItemConfig().contains(item.getID() + ".youtube")) { + try { + menu.addItem(7, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzNTNmZDBmODYzMTQzNTM4NzY1ODYwNzViOWJkZjBjNDg0YWFiMDMzMWI4NzJkZjExYmQ1NjRmY2IwMjllZCJ9fX0="), "&rDemonstration Video &7(Youtube)", "", "&7\u21E8 Click to watch")); + menu.addMenuClickHandler(7, (pl, slot, itemstack, action) -> { + pl.closeInventory(); + pl.sendMessage(""); + pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + Slimefun.getItemConfig().getString(item.getID() + ".youtube"))); + pl.sendMessage(""); + return false; + }); + } catch (Exception x) { + Slimefun.getLogger().log(Level.SEVERE, "An Error occured while adding a Youtube Video for Slimefun " + Slimefun.getVersion(), x); + } + } + + displayItem(menu, profile, p, item, result, recipeType, recipe, addToHistory); + + if (item instanceof RecipeDisplayItem) { + displayRecipes(profile, menu, (RecipeDisplayItem) item, 0); + } + + menu.open(p); + } + + private void displayItem(ChestMenu menu, PlayerProfile profile, Player p, Object obj, ItemStack output, RecipeType recipeType, ItemStack[] recipe, boolean addToHistory) { + LinkedList history = profile.getGuideHistory(); + boolean isSlimefunRecipe = obj instanceof SlimefunItem; + + if (addToHistory) { + history.add(obj); + } + + addBackButton(menu, 0, profile, true); + + menu.addItem(3, getDisplayItem(p, isSlimefunRecipe, recipe[0])); + menu.addMenuClickHandler(3, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(4, getDisplayItem(p, isSlimefunRecipe, recipe[1])); + menu.addMenuClickHandler(4, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(5, getDisplayItem(p, isSlimefunRecipe, recipe[2])); + menu.addMenuClickHandler(5, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(10, recipeType.toItem()); + menu.addMenuClickHandler(10, (pl, slot, itemstack, action) -> false); + + menu.addItem(12, getDisplayItem(p, isSlimefunRecipe, recipe[3])); + menu.addMenuClickHandler(12, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(13, getDisplayItem(p, isSlimefunRecipe, recipe[4])); + menu.addMenuClickHandler(13, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(14, getDisplayItem(p, isSlimefunRecipe, recipe[5])); + menu.addMenuClickHandler(14, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(16, output); + menu.addMenuClickHandler(16, (pl, slot, itemstack, action) -> false); + + menu.addItem(21, getDisplayItem(p, isSlimefunRecipe, recipe[6])); + menu.addMenuClickHandler(21, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(22, getDisplayItem(p, isSlimefunRecipe, recipe[7])); + menu.addMenuClickHandler(22, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + + menu.addItem(23, getDisplayItem(p, isSlimefunRecipe, recipe[8])); + menu.addMenuClickHandler(23, (pl, slot, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + } + + private void fillInv(PlayerProfile profile, Player p, ChestMenu menu, boolean survival) { + for (int i = 0; i < 9; i++) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + menu.addMenuClickHandler(i, (pl, s, itemstack, action) -> false); + } + + /* + // Settings Panel + menu.addItem(1, new CustomItem(Material.ENCHANTED_BOOK, "&eSettings / Info", "", "&7\u21E8 Click to see more")); + menu.addMenuClickHandler(1, (player, i, itemStack, clickAction) -> { + SlimefunGuide.openSettings(player, getItem()); + return false; + }); + + // Stats + menu.addItem(4, new CustomItem(SkullItem.fromPlayer(p), "&7Player Stats: &e" + p.getName(), "", "&7Progress: &a" + Math.round(((profile.getResearches().size() * 100.0F) / Research.list().size()) * 100.0F) / 100.0F + "% &e(" + profile.getResearches().size() + " / " + Research.list().size() + ")", "", "&7\u21E8 Click for a full summary")); + menu.addMenuClickHandler(4, (player, i, itemStack, clickAction) -> { + player.closeInventory(); + profile.sendStats(player); + return false; + }); + */ + + // Search feature! + menu.addItem(7, new CustomItem(Material.NAME_TAG, SlimefunPlugin.getLocal().getMessage("guide.search.name"), SlimefunPlugin.getLocal().getMessagesArray("guide.search.lore"))); + menu.addMenuClickHandler(7, (player, i, itemStack, clickAction) -> { + player.closeInventory(); + SlimefunPlugin.getLocal().sendMessage(player, "search.message"); + + ChatInput.waitForPlayer(SlimefunPlugin.instance, player, msg -> + SlimefunGuide.openSearch(profile, msg, survival, true) + ); + + return false; + }); + + for (int i = 45; i < 54; i++) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + menu.addMenuClickHandler(i, (pl, s, itemstack, action) -> false); + } + } + + private void addBackButton(ChestMenu menu, int slot, PlayerProfile profile, boolean survival) { + List playerHistory = profile.getGuideHistory(); + + if (playerHistory.size() > 1) { + + menu.addItem(slot, 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(slot, (pl, s, is, action) -> { + if (action.isShiftClicked()) { + openMainMenu(profile, survival, 1); + } + else { + Object last = getLastEntry(profile, true); + handleHistory(profile, last, survival); + } + return false; + }); + + } + else { + menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); + menu.addMenuClickHandler(slot, (pl, s, is, action) -> { + openMainMenu(profile, survival, 1); + return false; + }); + } + } + + private static ItemStack getDisplayItem(Player p, boolean isSlimefunRecipe, ItemStack item) { + if (isSlimefunRecipe) { + SlimefunItem slimefunItem = SlimefunItem.getByItem(item); + if (slimefunItem == null) return item; + + String lore = Slimefun.hasPermission(p, slimefunItem, false) ? "&rNeeds to be unlocked elsewhere" : "&rNo Permission"; + return Slimefun.hasUnlocked(p, slimefunItem, false) ? item: new CustomItem(Material.BARRIER, ItemUtils.getItemName(item), "&4&lLOCKED", "", lore); + } + else { + return item; + } + } + + private void displayRecipes(PlayerProfile profile, ChestMenu menu, RecipeDisplayItem sfItem, int page) { + List recipes = sfItem.getDisplayRecipes(); + + if (!recipes.isEmpty()) { + menu.addItem(53, null); + + if (page == 0) { + for (int i = 27; i < 36; i++) { + menu.replaceExistingItem(i, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, sfItem.getRecipeSectionLabel())); + menu.addMenuClickHandler(i, (pl, slot, itemstack, action) -> false); + } + } + else { + menu.replaceExistingItem(28, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&a\u21E6 Previous Page")); + menu.addMenuClickHandler(28, (pl, slot, itemstack, action) -> { + displayRecipes(profile, menu, sfItem, page - 1); + pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1); + return false; + }); + } + + if (recipes.size() > (18 * (page + 1))) { + menu.replaceExistingItem(34, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&aNext Page \u21E8")); + menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> { + displayRecipes(profile, menu, sfItem, page + 1); + pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1); + return false; + }); + } + else { + menu.replaceExistingItem(34, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, sfItem.getRecipeSectionLabel())); + menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> false); + } + + int inputs = 36; + int outputs = 45; + + for (int i = 0; i < 18; i++) { + int slot = i % 2 == 0 ? inputs++: outputs++; + + if ((i + (page * 18)) < recipes.size()) { + if (page == 0) { + menu.replaceExistingItem(slot, recipes.get(i + (page * 18))); + menu.addMenuClickHandler(slot, (pl, s, itemstack, action) -> { + displayItem(profile, itemstack, true); + return false; + }); + } + else { + menu.replaceExistingItem(slot, recipes.get(i + (page * 18))); + } + } + else { + menu.replaceExistingItem(slot, null); + menu.addMenuClickHandler(slot, (pl, s, itemstack, action) -> false); + } + } + } + } + + private static ChestMenu create() { + ChestMenu menu = new ChestMenu("Slimefun Guide"); + + menu.setEmptySlotsClickable(false); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1)); + return menu; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ISlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ISlimefunGuide.java new file mode 100644 index 000000000..f138b7422 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ISlimefunGuide.java @@ -0,0 +1,47 @@ +package me.mrCookieSlime.Slimefun.guides; + +import java.util.LinkedList; + +import org.bukkit.ChatColor; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.api.GuideHandler; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; + +public interface ISlimefunGuide { + + SlimefunGuideLayout getLayout(); + ItemStack getItem(); + + void openMainMenu(PlayerProfile profile, boolean survival, int page); + void openCategory(PlayerProfile profile, Category category, boolean survival, int page); + void openSearch(PlayerProfile profile, String input, boolean survival, boolean addToHistory); + void displayItem(PlayerProfile profile, ItemStack item, boolean addToHistory); + void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory); + + default String shorten(String string, String string2) { + if (ChatColor.stripColor(string + string2).length() > 19) return (string + ChatColor.stripColor(string2)).substring(0, 18) + "..."; + else return (string + ChatColor.stripColor(string2)); + } + + default Object getLastEntry(PlayerProfile profile, boolean remove) { + LinkedList history = profile.getGuideHistory(); + + if (remove && !history.isEmpty()) { + history.removeLast(); + } + + return history.isEmpty() ? null: history.getLast(); + } + + default void handleHistory(PlayerProfile profile, Object last, boolean survival) { + if (last == null) openMainMenu(profile, survival, 1); + else if (last instanceof Category) openCategory(profile, (Category) last, survival, 1); + else if (last instanceof SlimefunItem) displayItem(profile, (SlimefunItem) last, false); + else if (last instanceof GuideHandler) ((GuideHandler) last).run(profile.getPlayer(), survival, getLayout() == SlimefunGuideLayout.BOOK); + else if (last instanceof String) openSearch(profile, (String) last, survival, false); + else displayItem(profile, (ItemStack) last, false); + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunGuideLayout.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/SlimefunGuideLayout.java similarity index 62% rename from src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunGuideLayout.java rename to src/main/java/me/mrCookieSlime/Slimefun/guides/SlimefunGuideLayout.java index d46fea780..62a559394 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunGuideLayout.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/SlimefunGuideLayout.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.api; +package me.mrCookieSlime.Slimefun.guides; public enum SlimefunGuideLayout { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java index 23613a607..c8c59125d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java @@ -3,7 +3,6 @@ package me.mrCookieSlime.Slimefun.hooks.github; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; -import java.util.logging.Level; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -11,10 +10,13 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.api.Slimefun; public final class GitHubSetup { + private static final String REPOSITORY = "TheBusyBiscuit/Slimefun4"; + + private static final String ROLE_AUTHOR = "&cAuthor"; + private GitHubSetup() {} public static void setup() { @@ -29,12 +31,11 @@ public final class GitHubSetup { JsonObject object = array.get(i).getAsJsonObject(); String name = object.get("login").getAsString(); - String job = "&cAuthor"; int commits = object.get("contributions").getAsInt(); String profile = object.get("html_url").getAsString(); if (!name.equals("invalid-email-address")) { - Contributor contributor = new Contributor(name, job, commits); + Contributor contributor = new Contributor(name, ROLE_AUTHOR, commits); contributor.setProfile(profile); SlimefunPlugin.getUtilities().contributors.add(contributor); } @@ -49,40 +50,22 @@ public final class GitHubSetup { continue; } - InputStreamReader profileReader = null; - InputStreamReader sessionReader = null; - - try { - URL profile = new URL("https://api.mojang.com/users/profiles/minecraft/" + name); - profileReader = new InputStreamReader(profile.openStream()); + try (InputStreamReader profileReader = new InputStreamReader(new URL("https://api.mojang.com/users/profiles/minecraft/" + name).openStream())) { String uuid = new JsonParser().parse(profileReader).getAsJsonObject().get("id").getAsString(); - URL session = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false"); - sessionReader = new InputStreamReader(session.openStream()); - JsonArray properties = new JsonParser().parse(sessionReader).getAsJsonObject().get("properties").getAsJsonArray(); - - for (JsonElement el: properties) { - if (el.isJsonObject() && el.getAsJsonObject().get("name").getAsString().equals("textures")) { - SlimefunPlugin.getUtilities().contributorHeads.put(name, el.getAsJsonObject().get("value").getAsString()); - break; - } - } - } catch (Exception x) { - if (SlimefunPlugin.isActive()) SlimefunPlugin.getUtilities().contributorHeads.put(name, null); - } finally { - if (profileReader != null) { - try { - profileReader.close(); - } catch (IOException x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while closing GitHub-Stream for Slimefun " + Slimefun.getVersion(), x); - } + try (InputStreamReader sessionReader = new InputStreamReader(new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false").openStream())) { + JsonArray properties = new JsonParser().parse(sessionReader).getAsJsonObject().get("properties").getAsJsonArray(); + + for (JsonElement el: properties) { + if (el.isJsonObject() && el.getAsJsonObject().get("name").getAsString().equals("textures")) { + SlimefunPlugin.getUtilities().contributorHeads.put(name, el.getAsJsonObject().get("value").getAsString()); + break; + } + } } - if (sessionReader != null) { - try { - sessionReader.close(); - } catch (IOException x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while closing GitHub-Stream for Slimefun " + Slimefun.getVersion(), x); - } + } catch (IOException | IllegalStateException x) { + if (SlimefunPlugin.isActive()) { + SlimefunPlugin.getUtilities().contributorHeads.put(name, null); } } } @@ -92,14 +75,13 @@ public final class GitHubSetup { @Override public void onFailure() { SlimefunPlugin.getUtilities().contributors.clear(); - SlimefunPlugin.getUtilities().contributors.add(new Contributor("TheBusyBiscuit", "&cAuthor", 3)); - SlimefunPlugin.getUtilities().contributors.add(new Contributor("John000708", "&cAuthor", 2)); + SlimefunPlugin.getUtilities().contributors.add(new Contributor("TheBusyBiscuit", ROLE_AUTHOR, 1)); SlimefunPlugin.getUtilities().contributors.add(new Contributor("AquaLazuryt", "&6Lead Head Artist", 0)); } @Override public String getRepository() { - return "TheBusyBiscuit/Slimefun4"; + return REPOSITORY; } @Override @@ -118,7 +100,6 @@ public final class GitHubSetup { @Override public void onSuccess(JsonElement element) { JsonObject object = element.getAsJsonObject(); - SlimefunPlugin.getUtilities().issues = object.get("open_issues_count").getAsInt(); SlimefunPlugin.getUtilities().forks = object.get("forks").getAsInt(); SlimefunPlugin.getUtilities().stars = object.get("stargazers_count").getAsInt(); SlimefunPlugin.getUtilities().lastUpdate = IntegerFormat.parseGitHubDate(object.get("pushed_at").getAsString()); @@ -131,7 +112,7 @@ public final class GitHubSetup { @Override public String getRepository() { - return "TheBusyBiscuit/Slimefun4"; + return REPOSITORY; } @Override @@ -145,6 +126,46 @@ public final class GitHubSetup { } }; + new GitHubConnector() { + + @Override + public void onSuccess(JsonElement element) { + JsonArray array = element.getAsJsonArray(); + + int issues = 0; + int prs = 0; + + for (JsonElement elem: array) { + JsonObject obj = elem.getAsJsonObject(); + if (obj.has("pull_request")) prs++; + else issues++; + } + + SlimefunPlugin.getUtilities().issues = issues; + SlimefunPlugin.getUtilities().prs = prs; + } + + @Override + public void onFailure() { + // We don't have to do anything on failure + } + + @Override + public String getRepository() { + return REPOSITORY; + } + + @Override + public String getFileName() { + return "issues"; + } + + @Override + public String getURLSuffix() { + return "/issues"; + } + }; + new GitHubConnector() { @Override @@ -160,7 +181,7 @@ public final class GitHubSetup { @Override public String getRepository() { - return "TheBusyBiscuit/Slimefun4"; + return REPOSITORY; } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java index 0dc47e2a6..0ec661e5e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/GuideOnJoinListener.java @@ -7,7 +7,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout; +import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; public class GuideOnJoinListener implements Listener { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 7b793c513..f2e879c79 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -53,12 +53,12 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; +import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.utils.Utilities; public class ItemListener implements Listener { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java index 4dcf5f0d4..9e9c849f6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -34,6 +34,8 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; import me.mrCookieSlime.Slimefun.api.item_transport.CargoTransportEvent; import me.mrCookieSlime.Slimefun.api.item_transport.ItemRequest; +import me.mrCookieSlime.Slimefun.guides.ISlimefunGuide; +import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.hooks.github.Contributor; import me.mrCookieSlime.Slimefun.hooks.github.GitHubConnector; @@ -56,6 +58,8 @@ public final class Utilities { public final List allMultiblocks = new LinkedList<>(); public final List allResearches = new LinkedList<>(); + public final Map guideLayouts = new HashMap<>(); + /** * List of the registered Categories. * @since 4.0 @@ -146,6 +150,11 @@ public final class Utilities { */ public int issues = 0; + /** + * Represents the number of pending Pull Requests on the Slimefun4 GitHub repository. + */ + public int prs = 0; + /** * Represents the number of Forks of the Slimefun4 GitHub repository. * @since 4.1.13 From bf4991264b3fb7fbf5c5b572bfb69ce449a6c971 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 27 Oct 2019 14:38:39 +0100 Subject: [PATCH 17/80] Migrated more Items to the new System (+ Added auto-migration) --- .../Slimefun/Lists/SlimefunItems.java | 62 ++++++------- .../Slimefun/Objects/Research.java | 67 +++++++------- .../Objects/SlimefunItem/SlimefunItem.java | 18 ++-- .../SlimefunItem/items/Multimeter.java | 36 ++++++++ .../machines/electric/AutoAnvil.java | 12 +-- .../machines/electric/AutoDisenchanter.java | 12 +-- .../machines/electric/AutoDrier.java | 20 +++-- .../machines/electric/AutoEnchanter.java | 11 +-- .../machines/electric/ChargingBench.java | 27 +++--- .../machines/electric/ElectricDustWasher.java | 21 +++-- .../machines/electric/ElectricFurnace.java | 5 +- .../machines/electric/ElectricGoldPan.java | 15 ++-- .../electric/ElectricIngotFactory.java | 5 +- .../electric/ElectricIngotPulverizer.java | 5 +- .../machines/electric/ElectricOreGrinder.java | 5 +- .../electric/ElectrifiedCrucible.java | 5 +- .../electric/HeatedPressureChamber.java | 14 +-- .../electric/generators/BioGenerator.java | 5 +- .../electric/generators/CoalGenerator.java | 5 +- .../Slimefun/Setup/SlimefunSetup.java | 87 ++++++++----------- 20 files changed, 248 insertions(+), 189 deletions(-) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 2694b48e0..d5d34780b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -776,50 +776,50 @@ public final class SlimefunItems { public static final ItemStack APPLE_FERTILIZER = new SlimefunItemStack("FERTILIZER_APPLE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Apple"); public static final ItemStack SWEET_BERRIES_FERTILIZER = new SlimefunItemStack("FERTILIZER_SWEET_BERRIES", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ==", "&aOrganic Fertilizer", "&7Content: &9Sweet Berries"); - public static final ItemStack ANIMAL_GROWTH_ACCELERATOR = new CustomItem(Material.HAY_BLOCK, "&bAnimal Growth Accelerator", "", "&rRuns on &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &728 J/s"); - public static final ItemStack CROP_GROWTH_ACCELERATOR = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator", "", "&rRuns on &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Radius: 7x7", "&8\u21E8 &7Speed: &a3/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &750 J/s"); - public static final ItemStack CROP_GROWTH_ACCELERATOR_2 = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator &7(&eII&7)", "", "&rRuns on &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Radius: 9x9", "&8\u21E8 &7Speed: &a4/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/s"); + public static final ItemStack ANIMAL_GROWTH_ACCELERATOR = new SlimefunItemStack("ANIMAL_GROWTH_ACCELERATOR", Material.HAY_BLOCK, "&bAnimal Growth Accelerator", "", "&rRuns on &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &728 J/s"); + public static final ItemStack CROP_GROWTH_ACCELERATOR = new SlimefunItemStack("CROP_GROWTH_ACCELERATOR", Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator", "", "&rRuns on &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Radius: 7x7", "&8\u21E8 &7Speed: &a3/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &750 J/s"); + public static final ItemStack CROP_GROWTH_ACCELERATOR_2 = new SlimefunItemStack("CROP_GROWTH_ACCELERATOR_2", Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator &7(&eII&7)", "", "&rRuns on &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Radius: 9x9", "&8\u21E8 &7Speed: &a4/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/s"); - public static final ItemStack FOOD_FABRICATOR = new CustomItem(Material.GREEN_STAINED_GLASS, "&cFood Fabricator", "", "&rProduces &aOrganic Food", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &714 J/s"); - public static final ItemStack FOOD_FABRICATOR_2 = new CustomItem(Material.GREEN_STAINED_GLASS, "&cFood Fabricator &7(&eII&7)", "", "&rProduces &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 6x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &748 J/s"); + public static final ItemStack FOOD_FABRICATOR = new SlimefunItemStack("FOOD_FABRICATOR", Material.GREEN_STAINED_GLASS, "&cFood Fabricator", "", "&rProduces &aOrganic Food", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &714 J/s"); + public static final ItemStack FOOD_FABRICATOR_2 = new SlimefunItemStack("FOOD_FABRICATOR_2", Material.GREEN_STAINED_GLASS, "&cFood Fabricator &7(&eII&7)", "", "&rProduces &aOrganic Food", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 6x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &748 J/s"); - public static final ItemStack FOOD_COMPOSTER = new CustomItem(Material.GREEN_TERRACOTTA, "&cFood Composter", "", "&rProduces &aOrganic Fertilizer", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s"); - public static final ItemStack FOOD_COMPOSTER_2 = new CustomItem(Material.GREEN_TERRACOTTA, "&cFood Composter &7(&eII&7)", "", "&rProduces &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &752 J/s"); + public static final ItemStack FOOD_COMPOSTER = new SlimefunItemStack("FOOD_COMPOSTER", Material.GREEN_TERRACOTTA, "&cFood Composter", "", "&rProduces &aOrganic Fertilizer", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s"); + public static final ItemStack FOOD_COMPOSTER_2 = new SlimefunItemStack("FOOD_COMPOSTER_2", Material.GREEN_TERRACOTTA, "&cFood Composter &7(&eII&7)", "", "&rProduces &aOrganic Fertilizer", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &752 J/s"); - public static final ItemStack XP_COLLECTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTc2MmExNWIwNDY5MmEyZTRiM2ZiMzY2M2JkNGI3ODQzNGRjZTE3MzJiOGViMWM3YTlmN2MwZmJmNmYifX19"), "&aEXP Collector", "", "&rCollects nearby Exp and stores it", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s"); - public static final ItemStack REACTOR_COOLANT_CELL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGU0MDczYmU0MGNiM2RlYjMxMGEwYmU5NTliNGNhYzY4ZTgyNTM3MjcyOGZhZmI2YzI5NzNlNGU3YzMzIn19fQ=="), "&bReactor Coolant Cell"); + public static final ItemStack XP_COLLECTOR = new SlimefunItemStack("XP_COLLECTOR", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTc2MmExNWIwNDY5MmEyZTRiM2ZiMzY2M2JkNGI3ODQzNGRjZTE3MzJiOGViMWM3YTlmN2MwZmJmNmYifX19", "&aEXP Collector", "", "&rCollects nearby Exp and stores it", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s"); + public static final ItemStack REACTOR_COOLANT_CELL = new SlimefunItemStack("REACTOR_COLLANT_CELL", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGU0MDczYmU0MGNiM2RlYjMxMGEwYmU5NTliNGNhYzY4ZTgyNTM3MjcyOGZhZmI2YzI5NzNlNGU3YzMzIn19fQ==", "&bReactor Coolant Cell"); - public static final ItemStack NUCLEAR_REACTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&2Nuclear Reactor", "", "&rRequires Cooling!", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Reactor Coolant Cells", "", MachineTier.END_GAME.and(MachineType.GENERATOR), "&8\u21E8 &e\u26A1 &716384 J Buffer", "&8\u21E8 &e\u26A1 &7500 J/s"); - public static final ItemStack NETHERSTAR_REACTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&fNether Star Reactor", "", "&fRuns on Nether Stars", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Nether Ice Coolant Cells", "", MachineTier.END_GAME.and(MachineType.GENERATOR), "&8\u21E8 &e\u26A1 &732768 J Buffer", "&8\u21E8 &e\u26A1 &71024 J/s", "&8\u21E8 &4Causes nearby Entities to get Withered"); - public static final ItemStack REACTOR_ACCESS_PORT = new CustomItem(Material.CYAN_TERRACOTTA, "&2Reactor Access Port", "", "&rAllows you to interact with a Reactor", "&rvia Cargo Nodes, can also be used", "&ras a Buffer", "", "&8\u21E8 &eMust be placed &a3 Blocks &eabove the Reactor"); + public static final ItemStack NUCLEAR_REACTOR = new SlimefunItemStack("NUCLEAR_REACTOR", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ==", "&2Nuclear Reactor", "", "&rRequires Cooling!", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Reactor Coolant Cells", "", MachineTier.END_GAME.and(MachineType.GENERATOR), "&8\u21E8 &e\u26A1 &716384 J Buffer", "&8\u21E8 &e\u26A1 &7500 J/s"); + public static final ItemStack NETHERSTAR_REACTOR = new SlimefunItemStack("NETHERSTAR_REACTOR", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ==", "&fNether Star Reactor", "", "&fRuns on Nether Stars", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Nether Ice Coolant Cells", "", MachineTier.END_GAME.and(MachineType.GENERATOR), "&8\u21E8 &e\u26A1 &732768 J Buffer", "&8\u21E8 &e\u26A1 &71024 J/s", "&8\u21E8 &4Causes nearby Entities to get Withered"); + public static final ItemStack REACTOR_ACCESS_PORT = new SlimefunItemStack("REACTOR_ACCESS_PORT", Material.CYAN_TERRACOTTA, "&2Reactor Access Port", "", "&rAllows you to interact with a Reactor", "&rvia Cargo Nodes, can also be used", "&ras a Buffer", "", "&8\u21E8 &eMust be placed &a3 Blocks &eabove the Reactor"); - public static final ItemStack FREEZER = new CustomItem(Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &718 J/s"); - public static final ItemStack FREEZER_2 = new CustomItem(Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer &7(&eII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s"); + public static final ItemStack FREEZER = new SlimefunItemStack("FREEZER", Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &718 J/s"); + public static final ItemStack FREEZER_2 = new SlimefunItemStack("FREEZER_2", Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer &7(&eII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s"); - public static final ItemStack ELECTRIC_GOLD_PAN = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &72 J/s"); - public static final ItemStack ELECTRIC_GOLD_PAN_2 = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eII&7)", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &74 J/s"); - public static final ItemStack ELECTRIC_GOLD_PAN_3 = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eIII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &714 J/s"); + public static final ItemStack ELECTRIC_GOLD_PAN = new SlimefunItemStack("ELECTRIC_GOLD_PAN", Material.BROWN_TERRACOTTA, "&6Electric Gold Pan", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &72 J/s"); + public static final ItemStack ELECTRIC_GOLD_PAN_2 = new SlimefunItemStack("ELECTRIC_GOLD_PAN_2", Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eII&7)", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &74 J/s"); + public static final ItemStack ELECTRIC_GOLD_PAN_3 = new SlimefunItemStack("ELECTRIC_GOLD_PAN_3", Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eIII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &714 J/s"); - public static final ItemStack ELECTRIC_DUST_WASHER = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &76 J/s"); - public static final ItemStack ELECTRIC_DUST_WASHER_2 = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eII&7)", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &710 J/s"); - public static final ItemStack ELECTRIC_DUST_WASHER_3 = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eIII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &730 J/s"); + public static final ItemStack ELECTRIC_DUST_WASHER = new SlimefunItemStack("ELECTRIC_DUST_WASHER", Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &76 J/s"); + public static final ItemStack ELECTRIC_DUST_WASHER_2 = new SlimefunItemStack("ELECTRIC_DUST_WASHER_2", Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eII&7)", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &710 J/s"); + public static final ItemStack ELECTRIC_DUST_WASHER_3 = new SlimefunItemStack("ELECTRIC_DUST_WASHER_3", Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eIII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &730 J/s"); - public static final ItemStack ELECTRIC_INGOT_FACTORY = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &78 J/s"); - public static final ItemStack ELECTRIC_INGOT_FACTORY_2 = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eII&7)", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &714 J/s"); - public static final ItemStack ELECTRIC_INGOT_FACTORY_3 = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eIII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 8x", "&8\u21E8 &e\u26A1 &740 J/s"); + public static final ItemStack ELECTRIC_INGOT_FACTORY = new SlimefunItemStack("ELECTRIC_INGOT_FACTORY", Material.RED_TERRACOTTA, "&cElectric Ingot Factory", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &78 J/s"); + public static final ItemStack ELECTRIC_INGOT_FACTORY_2 = new SlimefunItemStack("ELECTRIC_INGOT_FACTORY_2", Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eII&7)", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &714 J/s"); + public static final ItemStack ELECTRIC_INGOT_FACTORY_3 = new SlimefunItemStack("ELECTRIC_INGOT_FACTORY_3", Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eIII&7)", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 8x", "&8\u21E8 &e\u26A1 &740 J/s"); - public static final ItemStack AUTOMATED_CRAFTING_CHAMBER = new CustomItem(Material.CRAFTING_TABLE, "&6Automated Crafting Chamber", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &710 J/Item"); - public static final ItemStack FLUID_PUMP = new CustomItem(Material.BLUE_TERRACOTTA, "&9Fluid Pump", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &732 J/Block"); - public static final ItemStack CHARGING_BENCH = new CustomItem(Material.CRAFTING_TABLE, "&6Charging Bench", "", "&rCharges Items such as Jetpacks", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &7Energy Loss: &c50%"); + public static final ItemStack AUTOMATED_CRAFTING_CHAMBER = new SlimefunItemStack("AUTOMATED_CRAFTING_CHAMBER", Material.CRAFTING_TABLE, "&6Automated Crafting Chamber", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &710 J/Item"); + public static final ItemStack FLUID_PUMP = new SlimefunItemStack("FLUID_PUMP", Material.BLUE_TERRACOTTA, "&9Fluid Pump", "", MachineTier.ADVANCED.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &732 J/Block"); + public static final ItemStack CHARGING_BENCH = new SlimefunItemStack("CHARGING_BENCH", Material.CRAFTING_TABLE, "&6Charging Bench", "", "&rCharges Items such as Jetpacks", "", MachineTier.BASIC.and(MachineType.MACHINE), "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &7Energy Loss: &c50%"); - public static final ItemStack WITHER_ASSEMBLER = new CustomItem(Material.OBSIDIAN, "&5Wither Assembler", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Cooldown: &b30 Seconds", "&8\u21E8 &e\u26A1 &74096 J Buffer", "&8\u21E8 &e\u26A1 &74096 J/Wither"); + public static final ItemStack WITHER_ASSEMBLER = new SlimefunItemStack("WITHER_ASSEMBLER", Material.OBSIDIAN, "&5Wither Assembler", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Cooldown: &b30 Seconds", "&8\u21E8 &e\u26A1 &74096 J Buffer", "&8\u21E8 &e\u26A1 &74096 J/Wither"); - public static final ItemStack TRASH_CAN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ=="), "&3Trash Can", "", "&rWill destroy all Items put into it"); + public static final ItemStack TRASH_CAN = new SlimefunItemStack("TRASH_CAN", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ==", "&3Trash Can", "", "&rWill destroy all Items put into it"); public static final ItemStack ELYTRA = new ItemStack(Material.ELYTRA); - public static final ItemStack ELYTRA_SCALE = new CustomItem(Material.FEATHER, "&bElytra Scale"); - public static final ItemStack INFUSED_ELYTRA = new CustomItem(ELYTRA, "&5Infused Elytra"); - public static final ItemStack SOULBOUND_ELYTRA = new CustomItem(ELYTRA, "&cSoulbound Elytra"); + public static final ItemStack ELYTRA_SCALE = new SlimefunItemStack("ELYTRA_SCALE", Material.FEATHER, "&bElytra Scale"); + public static final ItemStack INFUSED_ELYTRA = new SlimefunItemStack("INFUSED_ELYTRA", ELYTRA, "&5Infused Elytra"); + public static final ItemStack SOULBOUND_ELYTRA = new SlimefunItemStack("SOULBOUND_ELYTRA", ELYTRA, "&cSoulbound Elytra"); public static final ItemStack TOTEM_OF_UNDYING = new ItemStack(Material.TOTEM_OF_UNDYING); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java index e0033be76..02219fd94 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -228,41 +228,50 @@ public class Research { * @since 4.0 */ public void unlock(final Player p, boolean instant) { - if (!hasUnlocked(p)) { - ResearchUnlockEvent event = new ResearchUnlockEvent(p, this); - Bukkit.getPluginManager().callEvent(event); - - Runnable runnable = () -> { - PlayerProfile.get(p).setResearched(this, true); - SlimefunPlugin.getLocal().sendMessage(p, "messages.unlocked", true, msg -> msg.replace("%research%", getName())); + Slimefun.runSync(() -> { + p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", "0%")); + }, 10L); + + PlayerProfile.get(p, profile -> { + if (!profile.hasUnlocked(this)) { + ResearchUnlockEvent event = new ResearchUnlockEvent(p, this); + Bukkit.getPluginManager().callEvent(event); - if (SlimefunPlugin.getCfg().getBoolean("options.research-unlock-fireworks")) { - FireworkShow.launchRandom(p, 1); - } - }; - - if (!event.isCancelled()) { - if (instant) runnable.run(); - else if (!SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId())){ - SlimefunPlugin.getUtilities().researching.add(p.getUniqueId()); - SlimefunPlugin.getLocal().sendMessage(p, "messages.research.start", true, msg -> msg.replace("%research%", getName())); + Runnable runnable = () -> { + profile.setResearched(this, true); + SlimefunPlugin.getLocal().sendMessage(p, "messages.unlocked", true, msg -> msg.replace("%research%", getName())); - for (int i = 1; i < research_progress.length + 1; i++) { - int j = i; - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { - p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); - SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", research_progress[j - 1] + "%")); - }, i * 20L); + if (SlimefunPlugin.getCfg().getBoolean("options.research-unlock-fireworks")) { + FireworkShow.launchRandom(p, 1); } - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + }; + + if (!event.isCancelled()) { + if (instant) { runnable.run(); - SlimefunPlugin.getUtilities().researching.remove(p.getUniqueId()); - }, (research_progress.length + 1) * 20L); + } + else if (!SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId())){ + SlimefunPlugin.getUtilities().researching.add(p.getUniqueId()); + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.start", true, msg -> msg.replace("%research%", getName())); + + for (int i = 1; i < research_progress.length + 1; i++) { + int j = i; + + Slimefun.runSync(() -> { + p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", research_progress[j - 1] + "%")); + }, i * 20L); + } + + Slimefun.runSync(() -> { + runnable.run(); + SlimefunPlugin.getUtilities().researching.remove(p.getUniqueId()); + }, (research_progress.length + 1) * 20L); + } } } - } + }); } /** diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 254861435..d6213cda9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -13,6 +13,7 @@ import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; @@ -285,13 +286,15 @@ public class SlimefunItem { } 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)) || - (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) || - SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) - - return sfi; + if (sfi.isItem(item)) { + // If we have to loop all items for the given item, then at least + // set the id via PersistenDataAPI for future performance boosts + ItemMeta im = item.getItemMeta(); + PersistentDataAPI.setString(im, SlimefunPlugin.getItemDataKey(), sfi.getID()); + item.setItemMeta(im); + + return sfi; + } } if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER"); if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER"); @@ -309,6 +312,7 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; + else if (this instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else return SlimefunManager.isItemSimiliar(item, this.item, true); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java new file mode 100644 index 000000000..e5d8e8d71 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java @@ -0,0 +1,36 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.ChatColor; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; +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.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; +import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; + +public class Multimeter extends SimpleSlimefunItem { + + public Multimeter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public ItemInteractionHandler getItemHandler() { + return (e, p, item) -> { + if (isItem(item)) { + if (e.getClickedBlock() != null && ChargableBlock.isChargable(e.getClickedBlock())) { + e.setCancelled(true); + p.sendMessage(""); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(e.getClickedBlock())) + " J")); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(e.getClickedBlock())) + " J")); + p.sendMessage(""); + } + return true; + } + else return false; + }; + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java index ffbf7a104..488b613a6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java @@ -15,14 +15,15 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public abstract class AutoAnvil extends AContainer { - public AutoAnvil(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public AutoAnvil(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -49,10 +50,12 @@ public abstract class AutoAnvil extends AContainer { @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b); + if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -62,7 +65,7 @@ public abstract class AutoAnvil extends AContainer { else progress.put(b, timeleft - 1); } else { - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); pushItems(b, processing.get(b).getOutput()); progress.remove(b); @@ -70,7 +73,6 @@ public abstract class AutoAnvil extends AContainer { } } else { - BlockMenu menu = BlockStorage.getInventory(b); MachineRecipe recipe = null; for (int slot: getInputSlots()) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index 4eac21650..c49620acd 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -22,14 +22,15 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public class AutoDisenchanter extends AContainer { - public AutoDisenchanter(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public AutoDisenchanter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -49,10 +50,12 @@ public class AutoDisenchanter extends AContainer { @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b); + if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -62,7 +65,7 @@ public class AutoDisenchanter extends AContainer { else progress.put(b, timeleft - 1); } else { - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); pushItems(b, processing.get(b).getOutput()); progress.remove(b); @@ -70,7 +73,6 @@ public class AutoDisenchanter extends AContainer { } } else { - BlockMenu menu = BlockStorage.getInventory(b); MachineRecipe recipe = null; Map enchantments = new HashMap<>(); Set enchantments2 = new HashSet<>(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java index b59fa7b58..c9d9e637d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java @@ -18,15 +18,17 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; +import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public class AutoDrier extends AContainer implements RecipeDisplayItem { private final List recipeList = new ArrayList<>(); - public AutoDrier(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public AutoDrier(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); recipeList.add(new ItemStack(Material.ROTTEN_FLESH)); recipeList.add(new ItemStack(Material.LEATHER)); @@ -70,10 +72,12 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b); + if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -83,8 +87,8 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { else progress.put(b, timeleft - 1); } else { - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); - pushItems(b, processing.get(b).getOutput()); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.pushItem(processing.get(b).getOutput()[0], getOutputSlots()); progress.remove(b); processing.remove(b); @@ -95,7 +99,7 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { int inputSlot = -1; for (int slot: getInputSlots()) { - ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot); + ItemStack item = menu.getItemInSlot(slot); if (item != null) { Material mat = item.getType(); ItemStack output = null; @@ -126,8 +130,8 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { if (r != null) { if (inputSlot == -1) return; - if (!fits(b, r.getOutput())) return; - BlockStorage.getInventory(b).replaceExistingItem(inputSlot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(inputSlot), 1)); + if (!menu.fits(r.getOutput()[0], getOutputSlots())) return; + menu.replaceExistingItem(inputSlot, InvUtils.decreaseItem(menu.getItemInSlot(inputSlot), 1)); processing.put(b, r); progress.put(b, r.getTicks()); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java index cbdfa5132..e96796373 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java @@ -22,14 +22,15 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public class AutoEnchanter extends AContainer { - public AutoEnchanter(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public AutoEnchanter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -49,10 +50,11 @@ public class AutoEnchanter extends AContainer { @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b.getLocation()); if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -62,7 +64,7 @@ public class AutoEnchanter extends AContainer { else progress.put(b, timeleft - 1); } else { - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); pushItems(b, processing.get(b).getOutput()); progress.remove(b); @@ -70,7 +72,6 @@ public class AutoEnchanter extends AContainer { } } else { - BlockMenu menu = BlockStorage.getInventory(b.getLocation()); MachineRecipe recipe = null; for (int slot: getInputSlots()) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java index cde1852e5..0164ca0e3 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java @@ -8,13 +8,15 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy; +import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; public class ChargingBench extends AContainer { - public ChargingBench(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public ChargingBench(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -36,32 +38,33 @@ public class ChargingBench extends AContainer { protected void tick(Block b) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; + BlockMenu menu = BlockStorage.getInventory(b); for (int slot: getInputSlots()) { - ItemStack stack = BlockStorage.getInventory(b).getItemInSlot(slot); + ItemStack stack = menu.getItemInSlot(slot); if (ItemEnergy.getMaxEnergy(stack) > 0) { if (ItemEnergy.getStoredEnergy(stack) < ItemEnergy.getMaxEnergy(stack)) { ChargableBlock.addCharge(b, -getEnergyConsumption()); float rest = ItemEnergy.addStoredEnergy(stack, getEnergyConsumption() / 2F); if (rest > 0F) { - if (fits(b, stack)) { - pushItems(b, stack); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + if (menu.fits(stack, getOutputSlots())) { + menu.pushItem(stack, getOutputSlots()); + menu.replaceExistingItem(slot, null); } else { - BlockStorage.getInventory(b).replaceExistingItem(slot, stack); + menu.replaceExistingItem(slot, stack); } } else { - BlockStorage.getInventory(b).replaceExistingItem(slot, stack); + menu.replaceExistingItem(slot, stack); } } - else if (fits(b, stack)) { - pushItems(b, stack); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + else if (menu.fits(stack, getOutputSlots())) { + menu.pushItem(stack, getOutputSlots()); + menu.replaceExistingItem(slot, null); } else { - BlockStorage.getInventory(b).replaceExistingItem(slot, stack); + menu.replaceExistingItem(slot, stack); } return; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java index 8d8b7b879..5ff440beb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java @@ -16,13 +16,15 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; +import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public abstract class ElectricDustWasher extends AContainer { - public ElectricDustWasher(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public ElectricDustWasher(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -39,10 +41,11 @@ public abstract class ElectricDustWasher extends AContainer { @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b); if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0 && getSpeed() < 10) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -55,7 +58,7 @@ public abstract class ElectricDustWasher extends AContainer { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; ChargableBlock.addCharge(b, -getEnergyConsumption()); - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); pushItems(b, processing.get(b).getOutput()); progress.remove(b); @@ -66,12 +69,12 @@ public abstract class ElectricDustWasher extends AContainer { ItemStack[] items = SlimefunPlugin.getUtilities().oreWasherOutputs; for (int slot: getInputSlots()) { - if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) { + if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) { if (!SlimefunPlugin.getSettings().legacyDustWasher) { boolean emptySlot = false; for (int output_slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) { + if (menu.getItemInSlot(output_slot) == null) { emptySlot = true; break; } @@ -82,15 +85,15 @@ public abstract class ElectricDustWasher extends AContainer { ItemStack adding = items[new Random().nextInt(items.length)]; MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding}); if (SlimefunPlugin.getSettings().legacyDustWasher && !fits(b, r.getOutput())) return; - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); + menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1)); processing.put(b, r); progress.put(b, r.getTicks()); break; } - else if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.PULVERIZED_ORE, true)) { + else if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), SlimefunItems.PULVERIZED_ORE, true)) { MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {SlimefunItems.PURE_ORE_CLUSTER}); if (!fits(b, r.getOutput())) return; - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); + menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1)); processing.put(b, r); progress.put(b, r.getTicks()); break; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java index f35558e3b..fec068a96 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java @@ -12,11 +12,12 @@ import org.bukkit.inventory.Recipe; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class ElectricFurnace extends AContainer { - public ElectricFurnace(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public ElectricFurnace(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java index 752d3e40f..51a094c84 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java @@ -18,7 +18,9 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; +import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; public abstract class ElectricGoldPan extends AContainer implements RecipeDisplayItem { @@ -36,8 +38,8 @@ public abstract class ElectricGoldPan extends AContainer implements RecipeDispla new ItemStack(Material.CLAY_BALL) ); - public ElectricGoldPan(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public ElectricGoldPan(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override @@ -54,10 +56,11 @@ public abstract class ElectricGoldPan extends AContainer implements RecipeDispla @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b); if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0 && getSpeed() < 10) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -70,7 +73,7 @@ public abstract class ElectricGoldPan extends AContainer implements RecipeDispla if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; ChargableBlock.addCharge(b, -getEnergyConsumption()); - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); pushItems(b, processing.get(b).getOutput()); progress.remove(b); @@ -79,14 +82,14 @@ public abstract class ElectricGoldPan extends AContainer implements RecipeDispla } else { for (int slot: getInputSlots()) { - if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.GRAVEL), true)) { + if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), new ItemStack(Material.GRAVEL), true)) { ItemStack output = SlimefunItems.SIFTED_ORE; if (random.nextInt(100) < 16) output = new ItemStack(Material.FLINT); if (random.nextInt(100) < 16) output = new ItemStack(Material.CLAY_BALL); MachineRecipe r = new MachineRecipe(3 / getSpeed(), new ItemStack[0], new ItemStack[] {output}); if (!fits(b, r.getOutput())) return; - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); + menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1)); processing.put(b, r); progress.put(b, r.getTicks()); break; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java index ee0c76b9c..b5cb120bf 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java @@ -9,11 +9,12 @@ 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.Objects.SlimefunItem.interfaces.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class ElectricIngotFactory extends AContainer implements RecipeDisplayItem { - public ElectricIngotFactory(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public ElectricIngotFactory(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java index 319f53474..5a24e08aa 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java @@ -12,11 +12,12 @@ 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.Objects.SlimefunItem.interfaces.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class ElectricIngotPulverizer extends AContainer implements RecipeDisplayItem { - public ElectricIngotPulverizer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public ElectricIngotPulverizer(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java index f2439dcd4..2a439ad4e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java @@ -7,11 +7,12 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; 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); + public ElectricOreGrinder(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectrifiedCrucible.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectrifiedCrucible.java index 43137ab89..3dfdf797e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectrifiedCrucible.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectrifiedCrucible.java @@ -7,11 +7,12 @@ import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class ElectrifiedCrucible extends AContainer { - public ElectrifiedCrucible(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public ElectrifiedCrucible(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java index ae682e2e7..1c67cd270 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java @@ -25,6 +25,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -34,10 +35,10 @@ import me.mrCookieSlime.Slimefun.utils.MachineHelper; public abstract class HeatedPressureChamber extends AContainer { - public HeatedPressureChamber(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public HeatedPressureChamber(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); - new BlockMenuPreset(name, getInventoryTitle()) { + new BlockMenuPreset(getID(), getInventoryTitle()) { @Override public void init() { @@ -135,11 +136,13 @@ public abstract class HeatedPressureChamber extends AContainer { @Override protected void tick(Block b) { + BlockMenu menu = BlockStorage.getInventory(b); + if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0) { - MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar()); + MachineHelper.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); if (ChargableBlock.isChargable(b)) { if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; @@ -149,7 +152,7 @@ public abstract class HeatedPressureChamber extends AContainer { else progress.put(b, timeleft - 1); } else { - BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); + menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); pushItems(b, processing.get(b).getOutput()); progress.remove(b); @@ -157,7 +160,6 @@ public abstract class HeatedPressureChamber extends AContainer { } } else { - BlockMenu menu = BlockStorage.getInventory(b.getLocation()); Map found = new HashMap<>(); MachineRecipe recipe = findRecipe(menu, found); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/BioGenerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/BioGenerator.java index 1011d6bfc..281098806 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/BioGenerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/BioGenerator.java @@ -8,11 +8,12 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class BioGenerator extends AGenerator { - public BioGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public BioGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java index e972e9aa5..23aeb17ce 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java @@ -8,11 +8,12 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class CoalGenerator extends AGenerator { - public CoalGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public CoalGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 11a64d18b..32dca930e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -32,7 +32,6 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; -import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; @@ -92,6 +91,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicEyeOfEnder; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MeatJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Multimeter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; @@ -173,7 +173,6 @@ import me.mrCookieSlime.Slimefun.androids.ProgrammableAndroid; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -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.ReactorHologram; @@ -1725,12 +1724,12 @@ public final class SlimefunSetup { return false; } }); - - new ChargingBench(Categories.ELECTRICITY, SlimefunItems.CHARGING_BENCH, "CHARGING_BENCH", RecipeType.ENHANCED_CRAFTING_TABLE, + + new ChargingBench(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.CHARGING_BENCH, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.BATTERY, new ItemStack(Material.CRAFTING_TABLE), SlimefunItems.BATTERY, null, SlimefunItems.SMALL_CAPACITOR, null}) .registerChargeableBlock(true, 128); - new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE, "ELECTRIC_FURNACE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricFurnace(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_FURNACE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.FURNACE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { @Override @@ -1745,7 +1744,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 64); - new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_2, "ELECTRIC_FURNACE_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricFurnace(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_FURNACE_2, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_FURNACE, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { @Override @@ -1760,7 +1759,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_3, "ELECTRIC_FURNACE_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricFurnace(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_FURNACE_3, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.STEEL_INGOT, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { @Override @@ -1775,7 +1774,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN, "ELECTRIC_GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricGoldPan(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_GOLD_PAN, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.FLINT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.FLINT), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) { @Override @@ -1790,7 +1789,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_2, "ELECTRIC_GOLD_PAN_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricGoldPan(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_GOLD_PAN_2, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_GOLD_PAN, new ItemStack(Material.IRON_INGOT), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT}) { @Override @@ -1805,7 +1804,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_3, "ELECTRIC_GOLD_PAN_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricGoldPan(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_GOLD_PAN_3, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COBALT_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.COBALT_INGOT}) { @Override @@ -1820,7 +1819,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 512); - new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER, "ELECTRIC_DUST_WASHER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricDustWasher(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_DUST_WASHER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) { @Override @@ -1835,7 +1834,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_2, "ELECTRIC_DUST_WASHER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricDustWasher(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_DUST_WASHER_2, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT}) { @Override @@ -1850,7 +1849,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_3, "ELECTRIC_DUST_WASHER_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricDustWasher(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_DUST_WASHER_3, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CORINTHIAN_BRONZE_INGOT}) { @Override @@ -1865,7 +1864,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 512); - new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY, "ELECTRIC_INGOT_FACTORY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricIngotFactory(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -1880,7 +1879,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, "ELECTRIC_INGOT_FACTORY_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricIngotFactory(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -1895,7 +1894,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, "ELECTRIC_INGOT_FACTORY_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricIngotFactory(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -1910,7 +1909,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 512); - new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE, "ELECTRIFIED_CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectrifiedCrucible(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIFIED_CRUCIBLE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.CRUCIBLE, SlimefunItems.LEAD_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.LEAD_INGOT}) { @Override @@ -1925,7 +1924,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, "ELECTRIFIED_CRUCIBLE_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectrifiedCrucible(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIFIED_CRUCIBLE_2, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { @Override @@ -1940,7 +1939,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_3, "ELECTRIFIED_CRUCIBLE_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectrifiedCrucible(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIFIED_CRUCIBLE_3, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT}) { @Override @@ -1955,7 +1954,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new ElectricOreGrinder(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricOreGrinder(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -1970,7 +1969,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new ElectricOreGrinder(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricOreGrinder(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -1985,7 +1984,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 512); - new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER, "HEATED_PRESSURE_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, + new HeatedPressureChamber(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2000,7 +1999,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER_2, "HEATED_PRESSURE_CHAMBER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new HeatedPressureChamber(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2015,11 +2014,11 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new ElectricIngotPulverizer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_PULVERIZER, "ELECTRIC_INGOT_PULVERIZER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ElectricIngotPulverizer(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_INGOT_PULVERIZER, RecipeType.ENHANCED_CRAFTING_TABLE, 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 CoalGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new CoalGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2029,7 +2028,7 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 64); - new CoalGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR_2, "COAL_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new CoalGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2039,7 +2038,7 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 256); - new BioGenerator(Categories.ELECTRICITY, SlimefunItems.BIO_REACTOR, "BIO_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new BioGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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}) { @Override @@ -2049,19 +2048,19 @@ public final class SlimefunSetup { }.registerUnrechargeableBlock(true, 128); - new AutoDrier(Categories.ELECTRICITY, SlimefunItems.AUTO_DRIER, "AUTO_DRIER", RecipeType.ENHANCED_CRAFTING_TABLE, + new AutoDrier(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_DRIER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.SMOKER), SlimefunItems.HEATING_COIL, null, new ItemStack(Material.CAMPFIRE), null}) .registerChargeableBlock(true, 128); - new AutoEnchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_ENCHANTER, "AUTO_ENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new AutoEnchanter(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_ENCHANTER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.ENCHANTING_TABLE), null, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) .registerChargeableBlock(true, 128); - new AutoDisenchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_DISENCHANTER, "AUTO_DISENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new AutoDisenchanter(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_DISENCHANTER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.ANVIL), new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) .registerChargeableBlock(true, 128); - new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL, "AUTO_ANVIL", RecipeType.ENHANCED_CRAFTING_TABLE, + new AutoAnvil(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_ANVIL, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.ANVIL), null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { @Override @@ -2076,7 +2075,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 128); - new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL_2, "AUTO_ANVIL_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new AutoAnvil(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_ANVIL_2, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.AUTO_ANVIL, null, SlimefunItems.STEEL_PLATE, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_PLATE, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { @Override @@ -2091,31 +2090,15 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MULTIMETER, "MULTIMETER", RecipeType.ENHANCED_CRAFTING_TABLE, + new Multimeter(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.MULTIMETER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.COPPER_INGOT, null, SlimefunItems.COPPER_INGOT, null, SlimefunItems.REDSTONE_ALLOY, null, null, SlimefunItems.GOLD_6K, null}) - .register(true, new ItemInteractionHandler() { + .register(true); - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(e.getItem(), SlimefunItems.MULTIMETER, true)) { - if (e.getClickedBlock() != null && ChargableBlock.isChargable(e.getClickedBlock())) { - e.setCancelled(true); - p.sendMessage(""); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(e.getClickedBlock())) + " J")); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(e.getClickedBlock())) + " J")); - p.sendMessage(""); - } - return true; - } - return false; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.PLASTIC_SHEET, "PLASTIC_SHEET", RecipeType.HEATED_PRESSURE_CHAMBER, + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.PLASTIC_SHEET, RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) .register(true); - new SlimefunItem(Categories.MISC, SlimefunItems.ANDROID_MEMORY_CORE, "ANDROID_MEMORY_CORE", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.ANDROID_MEMORY_CORE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.BRASS_INGOT, new ItemStack(Material.ORANGE_STAINED_GLASS), SlimefunItems.BRASS_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.TIN_DUST, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BRASS_INGOT, new ItemStack(Material.ORANGE_STAINED_GLASS), SlimefunItems.BRASS_INGOT}) .register(true); From e036e0f756e11ea10c68535159da87f4bfa3b33b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 27 Oct 2019 14:18:31 +0100 Subject: [PATCH 18/80] Fixes #1206 --- .../Objects/SlimefunItem/multiblocks/ArmorForge.java | 8 ++++++-- .../multiblocks/EnhancedCraftingTable.java | 10 +++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/ArmorForge.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/ArmorForge.java index 551fabf11..e2f801e78 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/ArmorForge.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/ArmorForge.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; @@ -54,8 +55,11 @@ public class ArmorForge extends MultiBlockMachine { if (Slimefun.hasUnlocked(p, adding, true)) { Inventory outputInv = findOutputInventory(adding, dispBlock, inv); if (outputInv != null) { - for (ItemStack removing: inputs.get(i)) { - if (removing != null) inv.removeItem(removing); + for (int j = 0; j < 9; j++) { + ItemStack item = inv.getContents()[j]; + if (item != null && item.getType() != Material.AIR) { + ItemUtils.consumeItem(item, true); + } } for (int j = 0; j < 4; j++) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java index a769b714f..ad5e3781c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/EnhancedCraftingTable.java @@ -3,7 +3,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks; import java.util.List; import java.util.UUID; -import me.mrCookieSlime.Slimefun.listeners.BackpackListener; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -16,6 +15,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; @@ -26,6 +26,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.listeners.BackpackListener; public class EnhancedCraftingTable extends MultiBlockMachine { @@ -127,10 +128,9 @@ public class EnhancedCraftingTable extends MultiBlockMachine { for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null && inv.getContents()[j].getType() != Material.AIR) { - if (inv.getContents()[j].getType().toString().endsWith("_BUCKET")) inv.setItem(j, new ItemStack(Material.BUCKET)); - else if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); - else inv.setItem(j, null); + ItemStack item = inv.getContents()[j]; + if (item != null && item.getType() != Material.AIR) { + ItemUtils.consumeItem(item, true); } } p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1); From 9f3c3a413b34f2a59376b780f1efe8243f60d77e Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 27 Oct 2019 20:07:12 +0100 Subject: [PATCH 19/80] Some optimizations, also changed /sf timings to use floating point times --- .../Slimefun/GEO/OreGenSystem.java | 5 +- .../machines/electric/geo/OilPump.java | 7 ++- .../Slimefun/api/BlockInfoConfig.java | 6 +++ .../Slimefun/api/BlockStorage.java | 43 ++++++++------- .../Slimefun/api/TickerTask.java | 52 +++++++++++-------- .../Slimefun/utils/Utilities.java | 3 +- 6 files changed, 67 insertions(+), 49 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java b/src/main/java/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java index 528a99ea8..89d785b74 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java @@ -66,8 +66,9 @@ public final class OreGenSystem { public static int getSupplies(OreGenResource resource, Chunk chunk, boolean generate) { if (resource == null) return 0; - if (BlockStorage.hasChunkInfo(chunk, "resources_" + resource.getName().toUpperCase())) { - return Integer.parseInt(BlockStorage.getChunkInfo(chunk, "resources_" + resource.getName().toUpperCase())); + String supply = BlockStorage.getChunkInfo(chunk, "resources_" + resource.getName().toUpperCase()); + if (supply != null) { + return Integer.parseInt(supply); } else if (!generate) { return 0; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java index 61e0e90ab..dd55c5df7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/OilPump.java @@ -98,11 +98,16 @@ public abstract class OilPump extends AContainer { else { OreGenResource oil = OreGenSystem.getResource("Oil"); int supplies = OreGenSystem.getSupplies(oil, b.getChunk(), false); + if (supplies > 0) { for (int slot: getInputSlots()) { if (SlimefunManager.isItemSimiliar(inv.getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) { MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL}); - if (!inv.fits(SlimefunItems.BUCKET_OF_OIL, getOutputSlots())) return; + + if (!inv.fits(SlimefunItems.BUCKET_OF_OIL, getOutputSlots())) { + return; + } + inv.replaceExistingItem(slot, InvUtils.decreaseItem(inv.getItemInSlot(slot), 1)); processing.put(b, r); progress.put(b, r.getTicks()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java index d0ccd73f9..d0251dc5a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java @@ -8,6 +8,8 @@ import java.util.Set; import org.bukkit.configuration.file.FileConfiguration; +import com.google.gson.GsonBuilder; + import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; public class BlockInfoConfig extends Config { @@ -136,4 +138,8 @@ public class BlockInfoConfig extends Config { throw new UnsupportedOperationException(); } + public String toJSON() { + return new GsonBuilder().create().toJson(data); + } + } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java index 9b5bb46f6..30a590777 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -160,7 +160,9 @@ public class BlockStorage { FileConfiguration cfg = YamlConfiguration.loadConfiguration(chunks); for (String key: cfg.getKeys(false)) { try { - if (world.getName().equals(key.split(";")[0])) SlimefunPlugin.getUtilities().mapChunks.put(key, cfg.getString(key)); + if (world.getName().equals(key.split(";")[0])) { + SlimefunPlugin.getUtilities().mapChunks.put(key, new BlockInfoConfig(parseJSON(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); } @@ -238,6 +240,7 @@ public class BlockStorage { for (Map.Entry entry: cache.entrySet()) { blocksCache.remove(entry.getKey()); Config cfg = entry.getValue(); + if (cfg.getKeys().isEmpty()) { if (!cfg.getFile().delete()) { Slimefun.getLogger().log(Level.WARNING, "Could not delete File: " + cfg.getFile().getName()); @@ -269,10 +272,10 @@ public class BlockStorage { if (chunkChanges > 0) { File chunks = new File(path_chunks + "chunks.sfc"); - Config cfg = new Config("data-storage/Slimefun/temp.yml"); + Config cfg = new Config(path_chunks + "chunks.temp"); - for (Map.Entry entry: SlimefunPlugin.getUtilities().mapChunks.entrySet()) { - cfg.setValue(entry.getKey(), entry.getValue()); + for (Map.Entry entry: SlimefunPlugin.getUtilities().mapChunks.entrySet()) { + cfg.setValue(entry.getKey(), entry.getValue().toJSON()); } cfg.save(chunks); @@ -369,7 +372,7 @@ public class BlockStorage { private static String getJSONData(Chunk chunk) { if (chunk == null) return null; - return SlimefunPlugin.getUtilities().mapChunks.get(serializeChunk(chunk)); + return SlimefunPlugin.getUtilities().mapChunks.get(serializeChunk(chunk)).toJSON(); } @Deprecated @@ -422,7 +425,9 @@ public class BlockStorage { storage.storage.put(l, cfg); if (BlockMenuPreset.isInventory(cfg.getString("id"))) { if (BlockMenuPreset.isUniversalInventory(cfg.getString("id"))) { - if (!SlimefunPlugin.getUtilities().universalInventories.containsKey(cfg.getString("id"))) storage.loadUniversalInventory(BlockMenuPreset.getPreset(cfg.getString("id"))); + if (!SlimefunPlugin.getUtilities().universalInventories.containsKey(cfg.getString("id"))) { + storage.loadUniversalInventory(BlockMenuPreset.getPreset(cfg.getString("id"))); + } } else if (!storage.hasInventory(l)) { File file = new File("data-storage/Slimefun/stored-inventories/" + serializeLocation(l) + ".sfi"); @@ -433,9 +438,11 @@ public class BlockStorage { } refreshCache(getStorage(l.getWorld()), l, cfg.getString("id"), serializeBlockInfo(cfg), updateTicker); } + public static void setBlockInfo(Block b, String json, boolean updateTicker) { setBlockInfo(b.getLocation(), json, updateTicker); } + public static void setBlockInfo(Location l, String json, boolean updateTicker) { Config blockInfo = json == null ? new BlockInfoConfig() : parseBlockInfo(l, json); if (blockInfo == null) return; @@ -666,17 +673,11 @@ public class BlockStorage { public static Config getChunkInfo(Chunk chunk) { try { - Config cfg = new Config("data-storage/Slimefun/temp.yml"); - if (!SlimefunPlugin.getUtilities().mapChunks.containsKey(serializeChunk(chunk))) return cfg; - - for (Map.Entry entry: parseJSON(getJSONData(chunk)).entrySet()) { - cfg.setValue(entry.getKey(), entry.getValue()); - } - - return cfg; + BlockInfoConfig cfg = SlimefunPlugin.getUtilities().mapChunks.get(serializeChunk(chunk)); + return cfg == null ? new BlockInfoConfig() : cfg; } catch (Exception x) { Slimefun.getLogger().log(Level.SEVERE, "Failed to parse ChunkInfo for Chunk: " + (chunk == null ? "?": chunk.getX()) + ", " + (chunk == null ? "?": chunk.getZ()) + " (" + getJSONData(chunk) + ") for Slimefun " + Slimefun.getVersion(), x); - return new Config("data-storage/Slimefun/temp.yml"); + return new BlockInfoConfig(); } } @@ -685,16 +686,14 @@ public class BlockStorage { } public static void setChunkInfo(Chunk chunk, String key, String value) { - Config cfg = new Config("data-storage/Slimefun/temp.yml"); - if (hasChunkInfo(chunk)) cfg = getChunkInfo(chunk); - cfg.setValue(key, value); + BlockInfoConfig cfg = SlimefunPlugin.getUtilities().mapChunks.get(serializeChunk(chunk)); - JsonObject json = new JsonObject(); - for (String path: cfg.getKeys()) { - json.add(path, new JsonPrimitive(cfg.getString(path))); + if (cfg == null) { + cfg = new BlockInfoConfig(); + SlimefunPlugin.getUtilities().mapChunks.put(serializeChunk(chunk), cfg); } - SlimefunPlugin.getUtilities().mapChunks.put(serializeChunk(chunk), json.toString()); + cfg.setValue(key, value); chunkChanges++; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java index 1ff22cb09..10e8ceba1 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -1,5 +1,6 @@ package me.mrCookieSlime.Slimefun.api; +import java.text.DecimalFormat; import java.util.AbstractMap; import java.util.Comparator; import java.util.HashMap; @@ -29,6 +30,8 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; public class TickerTask implements Runnable { + private static final DecimalFormat decimalFormat = new DecimalFormat("#.###"); + private boolean halted = false; protected final Map move = new HashMap<>(); @@ -60,7 +63,7 @@ public class TickerTask implements Runnable { if (running) return; running = true; - long timestamp = System.currentTimeMillis(); + long timestamp = System.nanoTime(); skipped = 0; chunks = 0; @@ -85,7 +88,7 @@ public class TickerTask implements Runnable { if (!halted) { for (final String c: BlockStorage.getTickingChunks()) { - long timestamp2 = System.currentTimeMillis(); + long timestamp2 = System.nanoTime(); chunks++; for (final Location l: BlockStorage.getTickingLocations(c)) { @@ -102,17 +105,17 @@ public class TickerTask implements Runnable { if (item.getBlockTicker().isSynchronized()) { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { try { - long timestamp3 = System.currentTimeMillis(); + long timestamp3 = System.nanoTime(); item.getBlockTicker().tick(b, item, BlockStorage.getLocationInfo(l)); Long machinetime = machineTimings.get(item.getID()); Integer chunk = chunkItemCount.get(c); Integer machine = machineCount.get(item.getID()); - machineTimings.put(item.getID(), (machinetime != null ? machinetime: 0) + (System.currentTimeMillis() - timestamp3)); + machineTimings.put(item.getID(), (machinetime != null ? machinetime: 0) + (System.nanoTime() - timestamp3)); chunkItemCount.put(c, (chunk != null ? chunk: 0) + 1); machineCount.put(item.getID(), (machine != null ? machine: 0) + 1); - blockTimings.put(l, System.currentTimeMillis() - timestamp3); + blockTimings.put(l, System.nanoTime() - timestamp3); } catch (Exception x) { int errors = bugged.getOrDefault(l, 0); reportErrors(l, item, x, errors); @@ -120,13 +123,13 @@ public class TickerTask implements Runnable { }); } else { - long timestamp3 = System.currentTimeMillis(); + long timestamp3 = System.nanoTime(); item.getBlockTicker().tick(b, item, BlockStorage.getLocationInfo(l)); - machineTimings.merge(item.getID(), (System.currentTimeMillis() - timestamp3), Long::sum); + machineTimings.merge(item.getID(), (System.nanoTime() - timestamp3), Long::sum); chunkItemCount.merge(c, 1, Integer::sum); machineCount.merge(item.getID(), 1, Integer::sum); - blockTimings.put(l, System.currentTimeMillis() - timestamp3); + blockTimings.put(l, System.nanoTime() - timestamp3); } tickers.add(item.getBlockTicker()); } catch (Exception x) { @@ -144,7 +147,7 @@ public class TickerTask implements Runnable { } } - chunkTimings.put(c, System.currentTimeMillis() - timestamp2); + chunkTimings.put(c, System.nanoTime() - timestamp2); } } @@ -159,7 +162,7 @@ public class TickerTask implements Runnable { iterator.remove(); } - time = System.currentTimeMillis() - timestamp; + time = System.nanoTime() - timestamp; running = false; } @@ -187,15 +190,15 @@ public class TickerTask implements Runnable { } } - public long getTime() { - return time; + public String getTime() { + return toMillis(time); } public void info(CommandSender sender) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2== &aSlimefun Diagnostic Tool &2==")); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Halted: &e&l" + String.valueOf(halted).toUpperCase())); sender.sendMessage(""); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Impact: &e" + time + "ms / 50-750ms")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Impact: &e" + toMillis(time))); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Chunks: &e" + chunks)); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Machines: &e" + machines)); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Skipped Machines: &e" + skipped)); @@ -215,10 +218,10 @@ public class TickerTask implements Runnable { for (Map.Entry entry : timings) { int count = machineCount.get(entry.getKey()); - if (entry.getValue() > 0) + if (entry.getValue() > 500_000) hover.append("\n&c").append(entry.getKey()).append(" - ") - .append(count).append("x &7(").append(entry.getValue()).append("ms, ") - .append(entry.getValue() / count).append("ms avg/machine)"); + .append(count).append("x &7(").append(toMillis(entry.getValue())).append(", ") + .append(toMillis(entry.getValue() / count)).append(" avg/machine)"); else hidden++; } @@ -237,11 +240,10 @@ public class TickerTask implements Runnable { for (Map.Entry entry: timings) { int count = machineCount.get(entry.getKey()); - if (entry.getValue() > 0) - sender.sendMessage(ChatColors.color(" &e" + entry.getKey() + " - " + count + "x &7(" + entry.getValue() + "ms" - + ", " + (entry.getValue() / count) + "ms avg/machine)")); - else - hidden++; + if (entry.getValue() > 500_000) { + sender.sendMessage(ChatColors.color(" &e" + entry.getKey() + " - " + count + "x &7(" + toMillis(entry.getValue()) + ", " + toMillis(entry.getValue() / count) + " avg/machine)")); + } + else hidden++; } sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c+ &4" + hidden + " Hidden")); @@ -265,7 +267,7 @@ public class TickerTask implements Runnable { if (entry.getValue() > 0) hover.append("\n&c").append(entry.getKey().replace("CraftChunk", "")).append(" - ") .append(chunkItemCount.getOrDefault(entry.getKey(), 0)) - .append("x &7(").append(entry.getValue()).append("ms)"); + .append("x &7(").append(toMillis(entry.getValue())).append(")"); else hidden++; } @@ -285,7 +287,7 @@ public class TickerTask implements Runnable { for (Map.Entry entry: timings) { if (!chunksSkipped.contains(entry.getKey())) { if (entry.getValue() > 0) sender.sendMessage(" &c" + entry.getKey().replace("CraftChunk", "") + " - " - + (chunkItemCount.getOrDefault(entry.getKey(), 0)) + "x &7(" + entry.getValue() + "ms)"); + + (chunkItemCount.getOrDefault(entry.getKey(), 0)) + "x &7(" + toMillis(entry.getValue()) + ")"); else hidden++; } } @@ -316,6 +318,10 @@ public class TickerTask implements Runnable { public void halt() { halted = true; } + + private String toMillis(long time) { + return decimalFormat.format(time / 1000000F) + "ms"; + } @Override public String toString() { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java index 9e9c849f6..d30b710bf 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -27,6 +27,7 @@ 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; +import me.mrCookieSlime.Slimefun.api.BlockInfoConfig; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.GuideHandler; import me.mrCookieSlime.Slimefun.api.PlayerProfile; @@ -92,7 +93,7 @@ public final class Utilities { public final Map worlds = new HashMap<>(); public final Set loadedTickers = new HashSet<>(); - public final Map mapChunks = new HashMap<>(); + public final Map mapChunks = new HashMap<>(); public final Map> tickingChunks = new HashMap<>(); public final Map universalInventories = new HashMap<>(); From 8601986c09fa69441283b338cdfb093a42d723d9 Mon Sep 17 00:00:00 2001 From: AlexLander123 <13492360+AlexLander123@users.noreply.github.com> Date: Mon, 28 Oct 2019 04:02:06 +0800 Subject: [PATCH 20/80] Allow reactors to take in fuel from access port - Also allow reactors to take in fuel in bulk --- .../Objects/SlimefunItem/abstractItems/AReactor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index c8f73a2bb..2f1526880 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -336,7 +336,7 @@ public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem MachineFuel fuel = findRecipe(menu, found); if (port != null) { - restockCoolant(menu, port); + restockFuel(menu, port); } if (fuel != null) { @@ -368,11 +368,11 @@ public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem }); } - private void restockCoolant(BlockMenu menu, BlockMenu port) { + private void restockFuel(BlockMenu menu, BlockMenu port) { for (int slot: getFuelSlots()) { for (MachineFuel recipe: recipes) { if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true) && menu.fits(new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots())) { - port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1)); + port.replaceExistingItem(slot, menu.pushItem(port.getItemInSlot(slot), getFuelSlots())); return; } } From 7ba0eba4e947da609facdd32f4f97de2248d7863 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 28 Oct 2019 14:53:54 +0100 Subject: [PATCH 21/80] Fixes #1211 --- .../Slimefun/guides/ChestSlimefunGuide.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java index e15da1319..e6a4cf26a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java @@ -13,6 +13,7 @@ import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.inventory.CookingRecipe; import org.bukkit.inventory.FurnaceRecipe; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; @@ -390,13 +391,17 @@ public class ChestSlimefunGuide implements ISlimefunGuide { recipeType = RecipeType.SHAPELESS_RECIPE; result = r.getResult(); } - else if (r instanceof FurnaceRecipe) { - recipe[4] = ((FurnaceRecipe) r).getInput(); + else if (r instanceof CookingRecipe) { + recipe[4] = ((CookingRecipe) r).getInput(); recipeType = RecipeType.FURNACE; result = r.getResult(); } + if (recipeType == null) { + return; + } + ChestMenu menu = create(); displayItem(menu, profile, p, item, result, recipeType, recipe, addToHistory); menu.open(p); From 26cccb0d1c343241c376839707408e9a0403735c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Oct 2019 23:44:59 +0000 Subject: [PATCH 22/80] Update dependency com.github.thebusybiscuit:CS-CoreLib2 to v0.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a5672cb50..e06119d77 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.6.2 + 0.7 compile From 05858309c5e93cc4565a5c41cc5dd4007ae80537 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 29 Oct 2019 09:13:32 +0100 Subject: [PATCH 23/80] [CI skip] Reduced technical debt --- .../SlimefunItem/items/KnowledgeTome.java | 9 +++-- .../SlimefunItem/items/SmeltersPickaxe.java | 38 +++++++++++-------- .../Slimefun/SlimefunPlugin.java | 7 ++++ .../Slimefun/api/PlayerProfile.java | 27 ++++++++++++- 4 files changed, 61 insertions(+), 20 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java index 748a740fd..2689d5aa7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java @@ -41,9 +41,12 @@ public class KnowledgeTome extends SimpleSlimefunItem { return true; } else if (SlimefunManager.isItemSimiliar(item, getItem(), false)) { - PlayerProfile profile = PlayerProfile.get(p); - Set researches = PlayerProfile.fromUUID(UUID.fromString(ChatColor.stripColor(item.getItemMeta().getLore().get(1)))).getResearches(); - researches.forEach(research -> profile.setResearched(research, true)); + PlayerProfile.get(p, profile -> { + PlayerProfile.fromUUID(UUID.fromString(ChatColor.stripColor(item.getItemMeta().getLore().get(1))), owner -> { + Set researches = owner.getResearches(); + researches.forEach(research -> profile.setResearched(research, true)); + }); + }); if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); return true; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java index b822c5c4a..890d99395 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java @@ -1,18 +1,19 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; -import java.util.List; +import java.util.Collection; +import java.util.Optional; 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 io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; +import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; +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; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; @@ -30,21 +31,26 @@ public class SmeltersPickaxe extends SimpleSlimefunItem { @Override public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { - if (SlimefunManager.isItemSimiliar(item, getItem(), true)) { + if (isItem(item)) { 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)); - ItemStack output = RecipeCalculator.getSmeltedOutput(drops.get(i).getType()); - if (output != null) { - e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - drops.set(j, new CustomItem(output, drops.get(i).getAmount())); + + Collection blockDrops = e.getBlock().getDrops(); + for (ItemStack drop: blockDrops) { + if (drop != null) { + ItemStack output = drop; + + if (MaterialCollections.getAllOres().contains(e.getBlock().getType())) { + output.setAmount(fortune); + + Optional furnaceOutput = SlimefunPlugin.getMinecraftRecipes().getRecipeOutput(MinecraftRecipe.FURNACE, drop); + if (furnaceOutput.isPresent()) { + e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + output.setType(furnaceOutput.get().getType()); + } } + + drops.add(output); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 0a1a2a950..e30ae07f5 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -11,6 +11,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import io.github.thebusybiscuit.cscorelib2.protection.ProtectionManager; +import io.github.thebusybiscuit.cscorelib2.recipes.RecipeSnapshot; import io.github.thebusybiscuit.cscorelib2.reflection.ReflectionUtils; import io.github.thebusybiscuit.cscorelib2.updater.BukkitUpdater; import io.github.thebusybiscuit.cscorelib2.updater.GitHubBuildsUpdater; @@ -77,6 +78,7 @@ public final class SlimefunPlugin extends JavaPlugin { public static SlimefunPlugin instance; + private RecipeSnapshot recipeSnapshot; private final NamespacedKey itemDataKey = new NamespacedKey(this, "slimefun_item"); private TickerTask ticker; @@ -250,6 +252,7 @@ public final class SlimefunPlugin extends JavaPlugin { // Initiating various Stuff and all Items with a slightly delay (0ms after the Server finished loading) getServer().getScheduler().scheduleSyncDelayedTask(this, () -> { + recipeSnapshot = new RecipeSnapshot(this); protections = new ProtectionManager(getServer()); MiscSetup.loadItems(settings); @@ -426,6 +429,10 @@ public final class SlimefunPlugin extends JavaPlugin { return instance.local; } + public static RecipeSnapshot getMinecraftRecipes() { + return instance.recipeSnapshot; + } + public static NamespacedKey getItemDataKey() { return instance.itemDataKey; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java b/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java index ca12312ec..36ba9cee6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java @@ -218,7 +218,16 @@ public final class PlayerProfile { public LinkedList getGuideHistory() { return guideHistory; } - + + /** + * This is now deprecated, use {@link #fromUUID(UUID, Consumer)} instead + * + * @param uuid The UUID of the profile you are trying to retrieve. + * @return The PlayerProfile of this player + * + * @deprecated Use {@link #fromUUID(UUID, Consumer)} + */ + @Deprecated public static PlayerProfile fromUUID(UUID uuid) { PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(uuid); @@ -232,6 +241,22 @@ public final class PlayerProfile { return profile; } + + public static boolean fromUUID(UUID uuid, Consumer callback) { + PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(uuid); + + if (profile != null) { + callback.accept(profile); + return true; + } + + Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> { + PlayerProfile pp = new PlayerProfile(uuid); + SlimefunPlugin.getUtilities().profiles.put(uuid, pp); + callback.accept(pp); + }); + return false; + } /** * This is now deprecated, use {@link #get(OfflinePlayer, Consumer)} instead From 6dd56e23f21cb9125eb6b0dd160e05423bee9135 Mon Sep 17 00:00:00 2001 From: AlexLander123 <13492360+AlexLander123@users.noreply.github.com> Date: Thu, 31 Oct 2019 22:01:53 +0800 Subject: [PATCH 24/80] Changed method of accessing reactor from access port The change is made to stop inventory.no-access message when opening access port due to canOpen(Block, Player) returning false --- .../machines/ReactorAccessPort.java | 58 ++++++++----------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index 34d2c8877..990728e14 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -25,7 +25,9 @@ public class ReactorAccessPort extends SlimefunItem { private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 21, 23}; private static final int[] border_1 = {9, 10, 11, 18, 20, 27, 29, 36, 38, 45, 46, 47}; private static final int[] border_2 = {15, 16, 17, 24, 26, 33, 35, 42, 44, 51, 52, 53}; - private static final int[] border_3 = {30, 31, 32, 39, 41, 48, 49, 50}; + private static final int[] border_3 = {30, 31, 32, 39, 41, 48, 50}; + + private static final int INFO_SLOT = 49; public ReactorAccessPort(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { super(category, item, name, recipeType, recipe); @@ -39,39 +41,29 @@ public class ReactorAccessPort extends SlimefunItem { @Override public boolean canOpen(Block b, Player p) { - if(p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES)) { - AReactor reactor = getReactor(b.getLocation()); - if (reactor != null) { - boolean empty = true; - BlockMenu bm = getReactorMenu(b.getLocation()); - - if (bm != null) { - for (int slot: reactor.getCoolantSlots()) { - if (bm.getItemInSlot(slot) != null) { - empty = false; - } - } - - for (int slot: reactor.getFuelSlots()) { - if (bm.getItemInSlot(slot) != null) { - empty = false; - } - } + return p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES); + } + + @Override + public void newInstance(final BlockMenu menu, final Block b) { + BlockMenu reactor = getReactorMenu(b.getLocation()); + if (reactor != null) { + menu.replaceExistingItem(INFO_SLOT, new CustomItem(new ItemStack(Material.GREEN_WOOL), "&7Reactor", "", "&6Detected", "", "&7> Click to view Reactor")); + menu.addMenuClickHandler(INFO_SLOT, (p, slot, item, action) -> { + reactor.open(p); + newInstance(menu, b); - if(!empty || !p.isSneaking()) { - //reactor is not empty, lets view it's inventory instead. - bm.open(p); - return false; - } - - } - - return true; - - } + return false; + }); + } + else { + menu.replaceExistingItem(INFO_SLOT, new CustomItem(new ItemStack(Material.RED_WOOL), "&7Reactor", "", "&cNot detected", "", "&7Reactor must be", "&7placed 3 blocks below", "&7a access port!")); + menu.addMenuClickHandler(INFO_SLOT, (p, slot, item, action) -> { + newInstance(menu, b); + menu.open(p); + return false; + }); } - - return false; } @Override @@ -171,7 +163,7 @@ public class ReactorAccessPort extends SlimefunItem { Location reactorL = new Location(l.getWorld(), l.getX(), l.getY() - 3, l.getZ()); SlimefunItem item = BlockStorage.check(reactorL.getBlock()); - if (item instanceof AReactor) return BlockStorage.getInventory(l); + if (item instanceof AReactor) return BlockStorage.getInventory(reactorL); return null; } From cade8df053c79c0bb822afd0d0473da7c74f9c96 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Thu, 31 Oct 2019 16:24:27 +0100 Subject: [PATCH 25/80] Fixes #1219 --- .../mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java index 4d10cc5f4..54f640524 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java @@ -141,7 +141,7 @@ public class RitualAnimation implements Runnable { if (running) { l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F); l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK); - l.getWorld().dropItemNaturally(l.add(0, 1, 0), output); + l.getWorld().dropItemNaturally(l.add(0, -0.5, 0), output); pedestals.forEach(b -> utilities.altarinuse.remove(b.getLocation())); From 5c860cbfa4a59d4031f94a8f8ea49a93da241937 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 3 Nov 2019 19:20:12 +0100 Subject: [PATCH 26/80] Fixes #1226 --- .../me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- .../Slimefun/Objects/SlimefunItem/machines/TrashCan.java | 9 ++++----- .../me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 4 ++-- src/main/resources/wiki.json | 3 ++- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index d5d34780b..f4c201bc3 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -814,7 +814,7 @@ public final class SlimefunItems { public static final ItemStack WITHER_ASSEMBLER = new SlimefunItemStack("WITHER_ASSEMBLER", Material.OBSIDIAN, "&5Wither Assembler", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Cooldown: &b30 Seconds", "&8\u21E8 &e\u26A1 &74096 J Buffer", "&8\u21E8 &e\u26A1 &74096 J/Wither"); - public static final ItemStack TRASH_CAN = new SlimefunItemStack("TRASH_CAN", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ==", "&3Trash Can", "", "&rWill destroy all Items put into it"); + public static final ItemStack TRASH_CAN = new SlimefunItemStack("TRASH_CAN_BLOCK", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ==", "&3Trash Can", "", "&rWill destroy all Items put into it"); public static final ItemStack ELYTRA = new ItemStack(Material.ELYTRA); public static final ItemStack ELYTRA_SCALE = new SlimefunItemStack("ELYTRA_SCALE", Material.FEATHER, "&bElytra Scale"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java index 25721f1f9..7960257cb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java @@ -12,6 +12,7 @@ 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -19,16 +20,14 @@ public class TrashCan extends SlimefunItem implements InventoryBlock { private static final int[] border = {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; - public TrashCan(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public TrashCan(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); createPreset(this, "&4Trash Can", this::constructMenu); } private void constructMenu(BlockMenuPreset preset) { for (int i : border) { - preset.addItem(i, new CustomItem(new ItemStack(Material.RED_STAINED_GLASS_PANE), " "), - (p, slot, item, action) -> false - ); + preset.addItem(i, new CustomItem(new ItemStack(Material.RED_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 32dca930e..156ecc141 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -3130,12 +3130,12 @@ public final class SlimefunSetup { new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); - new FluidPump(Categories.ELECTRICITY, SlimefunItems.FLUID_PUMP, "FLUID_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, + new FluidPump(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.FLUID_PUMP, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.MEDIUM_CAPACITOR, null, new ItemStack(Material.BUCKET), SlimefunItems.CARGO_MOTOR, new ItemStack(Material.BUCKET), null, SlimefunItems.OIL_PUMP, null}) .registerChargeableBlock(true, 512); - new TrashCan(Categories.CARGO, SlimefunItems.TRASH_CAN, "TRASH_CAN_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, + new TrashCan(Categories.CARGO, (SlimefunItemStack) SlimefunItems.TRASH_CAN, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.PORTABLE_DUSTBIN, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT}) .register(true); diff --git a/src/main/resources/wiki.json b/src/main/resources/wiki.json index 2bb504352..f637d4fde 100644 --- a/src/main/resources/wiki.json +++ b/src/main/resources/wiki.json @@ -1,4 +1,5 @@ { "GOLD_PAN": "Gold-Pan", - "SIFTED_ORE": "Sifted-Ore" + "SIFTED_ORE": "Sifted-Ore", + "SMELTERY": "Smeltery" } \ No newline at end of file From beebbda2dd94f1ca9863d7ed0e90f0464eb7d698 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 3 Nov 2019 19:20:22 +0100 Subject: [PATCH 27/80] Fixes #1224 --- .../machines/electric/FluidPump.java | 52 ++++++++----------- .../ancient_altar/AncientAltarListener.java | 13 +++-- .../Slimefun/api/energy/ItemEnergy.java | 6 +-- .../Slimefun/guides/ChestSlimefunGuide.java | 1 - 4 files changed, 34 insertions(+), 38 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java index 66f6e049a..f9da89eb2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java @@ -22,7 +22,9 @@ 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; +import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; public class FluidPump extends SlimefunItem implements InventoryBlock { @@ -33,8 +35,8 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { protected int energyConsumption = 32; - public FluidPump(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public FluidPump(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); createPreset(this, "&9Fluid Pump", this::constructMenu); } @@ -79,40 +81,32 @@ public class FluidPump extends SlimefunItem implements InventoryBlock { protected void tick(Block b) { Block fluid = b.getRelative(BlockFace.DOWN); + ItemStack output = null; + 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) < energyConsumption) return; - - ItemStack output = new ItemStack(Material.LAVA_BUCKET); - - if (!fits(b, output)) return; - - ChargableBlock.addCharge(b, -energyConsumption); - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); - pushItems(b, output); - - List list = Vein.find(fluid, 50, block -> block.isLiquid() && block.getType() == fluid.getType()); - list.get(list.size() - 1).setType(Material.AIR); - - return; - } - } + output = new ItemStack(Material.LAVA_BUCKET); } else if (fluid.getType() == Material.WATER) { + output = new ItemStack(Material.WATER_BUCKET); + } + + if (output != null && ChargableBlock.getCharge(b) >= energyConsumption) { + BlockMenu menu = BlockStorage.getInventory(b); for (int slot : getInputSlots()) { - if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) { - if (ChargableBlock.getCharge(b) < energyConsumption) return; - - ItemStack output = new ItemStack(Material.WATER_BUCKET); - - if (!fits(b, output)) return; + if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) { + if (!menu.fits(output, getOutputSlots())) return; ChargableBlock.addCharge(b, -energyConsumption); - BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); - pushItems(b, output); + menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1)); + menu.pushItem(output, getOutputSlots()); - fluid.setType(Material.AIR); + if (fluid.getType() == Material.WATER) { + fluid.setType(Material.AIR); + } + else { + List list = Vein.find(fluid, 50, block -> block.isLiquid() && block.getType() == fluid.getType()); + list.get(list.size() - 1).setType(Material.AIR); + } return; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java index 8dda4b296..b3735286b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java @@ -30,27 +30,30 @@ import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.utils.Utilities; public class AncientAltarListener implements Listener { private Utilities utilities; + private final List altars = new ArrayList<>(); + private final Set removedItems = new HashSet<>(); + public AncientAltarListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); utilities = SlimefunPlugin.getUtilities(); } - private List altars = new ArrayList<>(); - private Set removedItems = new HashSet<>(); - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block b = e.getClickedBlock(); String item = BlockStorage.checkID(b); + if (item != null) { if (item.equals("ANCIENT_PEDESTAL")) { if (utilities.altarinuse.contains(b.getLocation())) { @@ -81,7 +84,7 @@ public class AncientAltarListener implements Listener { } } else if (item.equals("ANCIENT_ALTAR")) { - if (utilities.altarinuse.contains(b.getLocation())) { + if (Slimefun.hasUnlocked(e.getPlayer(), SlimefunItems.ANCIENT_ALTAR, true) || utilities.altarinuse.contains(b.getLocation())) { e.setCancelled(true); return; } @@ -98,7 +101,7 @@ public class AncientAltarListener implements Listener { if (pedestals.size() == 8) { pedestals.forEach(block -> utilities.altarinuse.add(block.getLocation())); - if (catalyst != null && catalyst.getType() != Material.AIR) { + if (catalyst.getType() != Material.AIR) { List input = new ArrayList<>(); for (Block pedestal: pedestals) { Item stack = findItem(pedestal); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java b/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java index aae3480f7..bbcf9d2ec 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java @@ -16,7 +16,7 @@ public final class ItemEnergy { // "&c&o&8\u21E8 &e\u26A1 &70 / 50 J" public static float getStoredEnergy(ItemStack item) { - if (item == null || item.getType() == null || item.getType() == Material.AIR) return 0F; + if (item == null || item.getType() == Material.AIR || item.getAmount() < 1) return 0F; if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F; for (String line: item.getItemMeta().getLore()) { @@ -29,7 +29,7 @@ public final class ItemEnergy { } public static float getMaxEnergy(ItemStack item) { - if (item == null || item.getType() == null || item.getType() == Material.AIR) return 0F; + if (item == null || item.getType() == Material.AIR || item.getAmount() < 1) return 0F; if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F; for (String line: item.getItemMeta().getLore()) { @@ -42,7 +42,7 @@ public final class ItemEnergy { } public static float addStoredEnergy(ItemStack item, float energy) { - if (item == null || item.getType() == null || item.getType() == Material.AIR) return 0F; + if (item == null || item.getType() == Material.AIR || item.getAmount() < 1) return 0F; if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F; float rest = 0F; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java index e6a4cf26a..b7090db9c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java @@ -14,7 +14,6 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.CookingRecipe; -import org.bukkit.inventory.FurnaceRecipe; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; From d88291e21514f05298c5166709bb8e26efe96b40 Mon Sep 17 00:00:00 2001 From: Daniel Walsh Date: Sun, 3 Nov 2019 19:03:55 +0000 Subject: [PATCH 28/80] Bring across repair cost in the disenchanter --- .../machines/electric/AutoDisenchanter.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index c49620acd..745683c33 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -26,6 +26,8 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.utils.MachineHelper; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.Repairable; public class AutoDisenchanter extends AContainer { @@ -51,7 +53,7 @@ public class AutoDisenchanter extends AContainer { @Override protected void tick(Block b) { BlockMenu menu = BlockStorage.getInventory(b); - + if (isProcessing(b)) { int timeleft = progress.get(b); if (timeleft > 0) { @@ -76,14 +78,14 @@ public class AutoDisenchanter extends AContainer { MachineRecipe recipe = null; Map enchantments = new HashMap<>(); Set enchantments2 = new HashSet<>(); - + for (int slot: getInputSlots()) { ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]); ItemStack item = menu.getItemInSlot(slot); - + // Check if disenchantable SlimefunItem sfItem = null; - + // stops endless checks of getByItem for empty book stacks. if ((item != null) && (item.getType() != Material.BOOK)) { sfItem = SlimefunItem.getByItem(item); @@ -91,7 +93,7 @@ public class AutoDisenchanter extends AContainer { if (sfItem != null && !sfItem.isDisenchantable()) { return; } - + // Disenchanting if (item != null && target != null && target.getType() == Material.BOOK) { int amount = 0; @@ -112,8 +114,16 @@ public class AutoDisenchanter extends AContainer { ItemStack book = target.clone(); book.setAmount(1); book.setType(Material.ENCHANTED_BOOK); + + ItemMeta itemMeta = newItem.getItemMeta(); + ItemMeta bookMeta = book.getItemMeta(); + ((Repairable) itemMeta).setRepairCost(0); + ((Repairable) bookMeta).setRepairCost(((Repairable) itemMeta).getRepairCost()); + newItem.setItemMeta(itemMeta); + book.setItemMeta(bookMeta); + EnchantmentStorageMeta meta = (EnchantmentStorageMeta) book.getItemMeta(); - + for (Map.Entry e: enchantments.entrySet()) { newItem.removeEnchantment(e.getKey()); meta.addStoredEnchant(e.getKey(), e.getValue(), true); @@ -124,7 +134,7 @@ public class AutoDisenchanter extends AContainer { EmeraldEnchants.getInstance().getRegistry().applyEnchantment(book, e.getEnchantment(), e.getLevel()); EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), 0); } - + recipe = new MachineRecipe(100 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, book}); break; } @@ -133,11 +143,11 @@ public class AutoDisenchanter extends AContainer { if (recipe != null) { if (!fits(b, recipe.getOutput())) return; - + for (int slot: getInputSlots()) { menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1)); } - + processing.put(b, recipe); progress.put(b, recipe.getTicks()); } From 2febbe4d1ca369b68539c720c24ae581ff19d27e Mon Sep 17 00:00:00 2001 From: Daniel Walsh Date: Sun, 3 Nov 2019 19:05:32 +0000 Subject: [PATCH 29/80] order --- .../SlimefunItem/machines/electric/AutoDisenchanter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index 745683c33..0bd27e613 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -117,8 +117,8 @@ public class AutoDisenchanter extends AContainer { ItemMeta itemMeta = newItem.getItemMeta(); ItemMeta bookMeta = book.getItemMeta(); - ((Repairable) itemMeta).setRepairCost(0); ((Repairable) bookMeta).setRepairCost(((Repairable) itemMeta).getRepairCost()); + ((Repairable) itemMeta).setRepairCost(0); newItem.setItemMeta(itemMeta); book.setItemMeta(bookMeta); From 6a1b6ffd9251dae49a7a5151c0bd21e01144a28b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 3 Nov 2019 20:28:25 +0100 Subject: [PATCH 30/80] Added support for ALL Vanilla Recipes (+ Faster Guide Responses) --- pom.xml | 2 +- .../Slimefun/Lists/RecipeType.java | 22 +++--- .../Slimefun/guides/ChestSlimefunGuide.java | 73 ++++++++----------- 3 files changed, 44 insertions(+), 53 deletions(-) diff --git a/pom.xml b/pom.xml index e06119d77..8c1022172 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.7 + 0.7.2 compile diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index f316c10ef..de38cb6c9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -3,15 +3,16 @@ package me.mrCookieSlime.Slimefun.Lists; import java.util.ArrayList; import java.util.List; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; import me.mrCookieSlime.Slimefun.api.SlimefunRecipes; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - public class RecipeType { public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); @@ -34,21 +35,24 @@ public class RecipeType { public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", "", "&a&oJust a standard Recipe in the Workbench...")); public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", "", "&a&oJust a standard Recipe in the Workbench...")); public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", "", "&a&oJust smelt it in a regular Furnace")); - public static final RecipeType NULL = new RecipeType(null); + public static final RecipeType NULL = new RecipeType((ItemStack) null); private ItemStack item; private String machine; - public RecipeType(ItemStack item) { - this.item = item; - this.machine = ""; - } - public RecipeType(ItemStack item, String machine) { this.item = item; this.machine = machine; } + public RecipeType(ItemStack item) { + this(item, ""); + } + + public RecipeType(MinecraftRecipe recipe) { + this(new ItemStack(recipe.getMachine())); + } + public RecipeType(String machine, int seconds, ItemStack[] input, ItemStack[] output) { this.machine = machine; this.item = getMachine().getItem(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java index b7090db9c..035675054 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java @@ -1,26 +1,25 @@ package me.mrCookieSlime.Slimefun.guides; import java.util.ArrayList; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Optional; +import java.util.Set; import java.util.logging.Level; import java.util.stream.Collectors; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; -import org.bukkit.inventory.CookingRecipe; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; -import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.ShapelessRecipe; +import org.bukkit.inventory.RecipeChoice; import io.github.thebusybiscuit.cscorelib2.chat.ChatInput; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; @@ -35,7 +34,6 @@ import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.MultiBlockMachine; -import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.GuideHandler; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -354,47 +352,36 @@ public class ChestSlimefunGuide implements ISlimefunGuide { return; } - Recipe r = null; - Iterator iterator = Bukkit.recipeIterator(); - while (iterator.hasNext()) { - Recipe current = iterator.next(); - if (SlimefunManager.isItemSimiliar(new CustomItem(current.getResult(), 1), item, true)) { - r = current; - break; - } - } - - if (r == null) { - return; - } + Set recipes = SlimefunPlugin.getMinecraftRecipes().getRecipesFor(item.getType()); ItemStack[] recipe = new ItemStack[9]; RecipeType recipeType = null; ItemStack result = null; - - if (r instanceof ShapedRecipe) { - String[] shape = ((ShapedRecipe) r).getShape(); - for (int i = 0; i < shape.length; i++) { - for (int j = 0; j < shape[i].length(); j++) { - recipe[i * 3 + j] = ((ShapedRecipe) r).getIngredientMap().get(shape[i].charAt(j)); - } - } - recipeType = RecipeType.SHAPED_RECIPE; - result = r.getResult(); - } - else if (r instanceof ShapelessRecipe) { - List ingredients = ((ShapelessRecipe) r).getIngredientList(); - for (int i = 0; i < ingredients.size(); i++) { - recipe[i] = ingredients.get(i); - } - recipeType = RecipeType.SHAPELESS_RECIPE; - result = r.getResult(); - } - else if (r instanceof CookingRecipe) { - recipe[4] = ((CookingRecipe) r).getInput(); - - recipeType = RecipeType.FURNACE; - result = r.getResult(); + + for (Recipe r : recipes) { + Optional> optional = MinecraftRecipe.of(r); + + if (optional.isPresent()) { + MinecraftRecipe mcRecipe = optional.get(); + + RecipeChoice[] choices = SlimefunPlugin.getMinecraftRecipes().getRecipeInput(r); + + if (choices.length == 1) { + recipe[4] = choices[0].getItemStack(); + } + else { + for (int i = 0; i < choices.length; i++) { + if (choices[i] != null) { + recipe[i] = choices[i].getItemStack(); + } + } + } + + recipeType = new RecipeType(mcRecipe); + result = r.getResult(); + + break; + } } if (recipeType == null) { From a1e47d5ce02f499b3c657f749c7fa3f097c73ec9 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 3 Nov 2019 20:36:46 +0100 Subject: [PATCH 31/80] Many bug fixes, many guide improvements --- .../Slimefun/guides/ChestSlimefunGuide.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java index 035675054..724250924 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java @@ -19,9 +19,9 @@ import org.bukkit.inventory.RecipeChoice; import io.github.thebusybiscuit.cscorelib2.chat.ChatInput; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunGuide; @@ -377,7 +377,16 @@ public class ChestSlimefunGuide implements ISlimefunGuide { } } - recipeType = new RecipeType(mcRecipe); + if (mcRecipe == MinecraftRecipe.SHAPED_CRAFTING) { + recipeType = new RecipeType(new CustomItem(mcRecipe.getMachine(), null, "&7Shaped Recipe")); + } + else if (mcRecipe == MinecraftRecipe.SHAPELESS_CRAFTING) { + recipeType = new RecipeType(new CustomItem(mcRecipe.getMachine(), null, "&7Shapeless Recipe")); + } + else { + recipeType = new RecipeType(mcRecipe); + } + result = r.getResult(); break; From 57da6db9be89b5e871b77d8b6979c34b55d32787 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 3 Nov 2019 21:32:44 +0100 Subject: [PATCH 32/80] Reduced technical debt and improved talisman performance --- .../Objects/SlimefunItem/SlimefunItem.java | 4 ++ .../Objects/SlimefunItem/Talisman.java | 31 ++++++++------ .../SlimefunItem/abstractItems/AReactor.java | 9 +++-- .../SlimefunItem/cargo/CargoManagerBlock.java | 5 ++- .../electric/AnimalGrowthAccelerator.java | 7 ++-- .../electric/CropGrowthAccelerator.java | 7 ++-- .../machines/electric/FoodComposter.java | 5 ++- .../machines/electric/FoodFabricator.java | 5 ++- .../machines/electric/Freezer.java | 5 ++- .../machines/electric/XPCollector.java | 12 +++--- .../Slimefun/Setup/SlimefunSetup.java | 40 +++++++++---------- .../Slimefun/listeners/FurnaceListener.java | 15 +++++-- .../Slimefun/listeners/ItemListener.java | 4 +- .../Slimefun/listeners/TalismanListener.java | 38 ++++++++++-------- 14 files changed, 110 insertions(+), 77 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index d6213cda9..d9bc6698e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -279,6 +279,10 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; + + if (item instanceof SlimefunItemStack) { + return getByID(((SlimefunItemStack) item).getItemID()); + } if (item.hasItemMeta()) { String id = PersistentDataAPI.getString(item.getItemMeta(), SlimefunPlugin.getItemDataKey()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java index 49717abe5..5750f7f15 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java @@ -2,7 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; import java.util.ArrayList; import java.util.List; -import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -112,13 +112,18 @@ public class Talisman extends SlimefunItem { return !("").equalsIgnoreCase(talisman.getSuffix()); } + public static boolean checkFor(Event e, SlimefunItemStack stack) { + SlimefunItem item = SlimefunItem.getByItem(stack); + return checkFor(e, item); + } + public static boolean checkFor(Event e, SlimefunItem item) { - if (!(item instanceof Talisman)) { + if (!(item instanceof Talisman)) { return false; } Talisman talisman = (Talisman) item; - if (new Random().nextInt(100) < talisman.getChance()) { + if (ThreadLocalRandom.current().nextInt(100) < talisman.getChance()) { return false; } @@ -144,11 +149,11 @@ public class Talisman extends SlimefunItem { else return false; } - private static void executeTalismanAttributes(Event e, Player p, Talisman talisman){ - consumeItem(p,talisman); - applyTalismanEffects(p,talisman); - cancelEvent(e,talisman); - sendMessage(p,talisman); + private static void executeTalismanAttributes(Event e, Player p, Talisman talisman) { + consumeItem(p, talisman); + applyTalismanEffects(p, talisman); + cancelEvent(e, talisman); + sendMessage(p, talisman); } private static void applyTalismanEffects(Player p, Talisman talisman){ @@ -158,13 +163,15 @@ public class Talisman extends SlimefunItem { } private static void cancelEvent(Event e, Talisman talisman){ - if (e instanceof Cancellable && talisman.isEventCancelled()) - ((Cancellable) e).setCancelled(true); + if (e instanceof Cancellable && talisman.isEventCancelled()) { + ((Cancellable) e).setCancelled(true); + } } private static void sendMessage(Player p, Talisman talisman){ - if (isTalismanMessage(talisman)) - SlimefunPlugin.getLocal().sendMessage(p, "messages.talisman." + talisman.getSuffix(), true); + if (isTalismanMessage(talisman)) { + SlimefunPlugin.getLocal().sendMessage(p, "messages.talisman." + talisman.getSuffix(), true); + } } private static void consumeItem(Player p, Talisman talisman){ diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index 2f1526880..c3c646b38 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -35,6 +35,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; @@ -71,10 +72,10 @@ public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem private static final int[] border_4 = {25, 34, 43}; private static final int INFO_SLOT = 49; - public AReactor(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public AReactor(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); - new BlockMenuPreset(id, getInventoryTitle()) { + new BlockMenuPreset(getID(), getInventoryTitle()) { @Override public void init() { @@ -141,7 +142,7 @@ public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem } }; - registerBlockHandler(id, (p, b, tool, reason) -> { + registerBlockHandler(getID(), (p, b, tool, reason) -> { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getFuelSlots()) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java index a8af6fcc6..fb20de335 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java @@ -13,13 +13,14 @@ 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.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; import me.mrCookieSlime.Slimefun.holograms.SimpleHologram; public class CargoManagerBlock extends SlimefunItem { - public CargoManagerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public CargoManagerBlock(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); registerBlockHandler(getID(), (p, b, tool, reason) -> { SimpleHologram.remove(b); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java index e7b999483..5342e0e46 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java @@ -22,6 +22,7 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -32,11 +33,11 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl protected int energyConsumption = 14; - public AnimalGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public AnimalGrowthAccelerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); createPreset(this, "&bGrowth Accelerator", this::constructMenu); - registerBlockHandler(name, (p, b, tool, reason) -> { + registerBlockHandler(getID(), (p, b, tool, reason) -> { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot : getInputSlots()) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java index 493b2805b..0e70eb6f1 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java @@ -22,6 +22,7 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -41,11 +42,11 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve crops.put(Material.SWEET_BERRY_BUSH, 3); } - public CropGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public CropGrowthAccelerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); createPreset(this, "&bGrowth Accelerator", this::constructMenu); - registerBlockHandler(name, (p, b, tool, reason) -> { + registerBlockHandler(getID(), (p, b, tool, reason) -> { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getInputSlots()) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java index 962d9738b..60022ecf5 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java @@ -8,11 +8,12 @@ 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.interfaces.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class FoodComposter extends AContainer implements RecipeDisplayItem { - public FoodComposter(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public FoodComposter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java index bdd210f5f..74885a89c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java @@ -7,11 +7,12 @@ 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.api.SlimefunItemStack; public abstract class FoodFabricator extends AContainer { - public FoodFabricator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public FoodFabricator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java index d0fc50fba..d856e1e25 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java @@ -6,6 +6,7 @@ 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.Objects.SlimefunItem.interfaces.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import java.util.ArrayList; import java.util.List; @@ -15,8 +16,8 @@ import org.bukkit.inventory.ItemStack; public abstract class Freezer extends AContainer implements RecipeDisplayItem { - public Freezer(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public Freezer(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java index 5019d44b4..2f7a62312 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java @@ -21,6 +21,7 @@ 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; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; @@ -31,11 +32,11 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { protected int energyConsumption = 10; - public XPCollector(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, name, recipeType, recipe); + public XPCollector(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); createPreset(this, "&aEXP Collector", this::constructMenu); - registerBlockHandler(name, new SlimefunBlockHandler() { + registerBlockHandler(getID(), new SlimefunBlockHandler() { @Override public void onPlace(Player p, Block b, SlimefunItem item) { @@ -110,10 +111,11 @@ public class XPCollector extends SlimefunItem implements InventoryBlock { n.remove(); int withdrawn = 0; + BlockMenu menu = BlockStorage.getInventory(b); for (int level = 0; level < getEXP(b); level = level + 10) { - if (fits(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"))) { + if (menu.fits(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), getOutputSlots())) { withdrawn = withdrawn + 10; - pushItems(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge")); + menu.pushItem(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), getOutputSlots()); } } BlockStorage.addBlockInfo(b, "stored-exp", String.valueOf(xp - withdrawn)); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 156ecc141..55ffef195 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2760,7 +2760,7 @@ public final class SlimefunSetup { new CustomItem(SlimefunItems.ELEVATOR, 2)) .register(true); - new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR, "FOOD_FABRICATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new FoodFabricator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2775,7 +2775,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR_2, "FOOD_FABRICATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new FoodFabricator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2826,15 +2826,15 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.GOLD_18K, SlimefunItems.CAN, SlimefunItems.GOLD_18K, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.HAY_BLOCK), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.LEAD_INGOT}) .registerChargeableBlock(true, 1024); - new AnimalGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, "ANIMAL_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new AnimalGrowthAccelerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.AUTO_BREEDER, SlimefunItems.REINFORCED_ALLOY_INGOT}) .registerChargeableBlock(true, 1024); - new XPCollector(Categories.ELECTRICITY, SlimefunItems.XP_COLLECTOR, "XP_COLLECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new XPCollector(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.XP_COLLECTOR, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRONZE_INGOT}) .registerChargeableBlock(true, 1024); - new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER, "FOOD_COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new FoodComposter(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2849,7 +2849,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER_2, "FOOD_COMPOSTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new FoodComposter(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2896,7 +2896,7 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD, null, null, null, null, null, null, null, null}) .register(true); - new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR, "CROP_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new CropGrowthAccelerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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}) { @Override @@ -2916,7 +2916,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 CropGrowthAccelerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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}) { @Override @@ -2936,7 +2936,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER, "FREEZER", RecipeType.ENHANCED_CRAFTING_TABLE, + new Freezer(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2951,7 +2951,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER_2, "FREEZER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new Freezer(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.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 @@ -2966,33 +2966,33 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.REACTOR_COOLANT_CELL, "REACTOR_COOLANT_CELL", new RecipeType(SlimefunItems.FREEZER), + new SlimefunItem(Categories.TECH_MISC, (SlimefunItemStack) SlimefunItems.REACTOR_COOLANT_CELL, new RecipeType(SlimefunItems.FREEZER), 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), + new SlimefunItem(Categories.TECH_MISC, (SlimefunItemStack) SlimefunItems.NETHER_ICE_COOLANT_CELL, new RecipeType(SlimefunItems.HEATED_PRESSURE_CHAMBER), new ItemStack[]{SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}) .register(true); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.NEPTUNIUM, "NEPTUNIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.NEPTUNIUM, new RecipeType(SlimefunItems.NUCLEAR_REACTOR), new ItemStack[] {SlimefunItems.URANIUM, null, null, null, null, null, null, null, null}) .register(true); SlimefunItem.setRadioactive(SlimefunItems.NEPTUNIUM); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.PLUTONIUM, "PLUTONIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.PLUTONIUM, new RecipeType(SlimefunItems.NUCLEAR_REACTOR), new ItemStack[] {SlimefunItems.NEPTUNIUM, null, null, null, null, null, null, null, null}) .register(true); SlimefunItem.setRadioactive(SlimefunItems.PLUTONIUM); - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BOOSTED_URANIUM, "BOOSTED_URANIUM", RecipeType.HEATED_PRESSURE_CHAMBER, + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BOOSTED_URANIUM, RecipeType.HEATED_PRESSURE_CHAMBER, new ItemStack[] {SlimefunItems.PLUTONIUM, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) .register(true); SlimefunItem.setRadioactive(SlimefunItems.BOOSTED_URANIUM); - new AReactor(Categories.ELECTRICITY, SlimefunItems.NUCLEAR_REACTOR, "NUCLEAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new AReactor(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.NUCLEAR_REACTOR, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.REINFORCED_PLATE, SlimefunItems.COOLING_UNIT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT}){ @Override @@ -3035,7 +3035,7 @@ public final class SlimefunSetup { } .registerChargeableBlock(true, 16384); - new AReactor(Categories.ELECTRICITY, SlimefunItems.NETHERSTAR_REACTOR, "NETHERSTAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new AReactor(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.NETHERSTAR_REACTOR, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[]{SlimefunItems.BOOSTED_URANIUM, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BOOSTED_URANIUM, SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.NETHER_STAR), SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT}){ @Override @@ -3076,15 +3076,15 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 32768); - new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MOTOR, "CARGO_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.CARGO, (SlimefunItemStack) SlimefunItems.CARGO_MOTOR, RecipeType.ENHANCED_CRAFTING_TABLE, 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 CargoManagerBlock(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE, + new CargoManagerBlock(Categories.CARGO, (SlimefunItemStack) SlimefunItems.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 SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_NODE, "CARGO_NODE", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.CARGO, (SlimefunItemStack) SlimefunItems.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)) .register(true, new ItemInteractionHandler() { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java index fcfdff55a..e2473fb3c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/FurnaceListener.java @@ -1,5 +1,7 @@ package me.mrCookieSlime.Slimefun.listeners; +import java.util.Optional; + import org.bukkit.block.Furnace; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -8,8 +10,8 @@ import org.bukkit.event.inventory.FurnaceBurnEvent; import org.bukkit.event.inventory.FurnaceSmeltEvent; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.EnhancedFurnace; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; @@ -37,10 +39,15 @@ public class FurnaceListener implements Listener { if (furnace instanceof EnhancedFurnace) { Furnace f = (Furnace) e.getBlock().getState(); int amount = f.getInventory().getSmelting().getType().toString().endsWith("_ORE") ? ((EnhancedFurnace) furnace).getOutput() : 1; - ItemStack result = f.getInventory().getResult() == null ? RecipeCalculator.getSmeltedOutput(f.getInventory().getSmelting().getType()) : f.getInventory().getResult().clone(); + Optional result = Optional.ofNullable(f.getInventory().getResult()); + + if (!result.isPresent()) { + result = SlimefunPlugin.getMinecraftRecipes().getRecipeOutput(MinecraftRecipe.FURNACE, f.getInventory().getSmelting()); + } - if (result != null) { - f.getInventory().setResult(new CustomItem(result, Math.min(result.getAmount() + amount, result.getMaxStackSize()))); + if (result.isPresent()) { + ItemStack item = result.get(); + f.getInventory().setResult(new CustomItem(item, Math.min(item.getAmount() + amount, item.getMaxStackSize()))); } } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index f2e879c79..490f97a15 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -212,11 +212,11 @@ public class ItemListener implements Listener { if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { if (p.isSneaking()) SlimefunGuide.openSettings(p, item); - else SlimefunGuide.openGuide(p, true); + else SlimefunGuide.openGuide(p, SlimefunGuideLayout.BOOK); } else if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true)) { if (p.isSneaking()) SlimefunGuide.openSettings(p, item); - else SlimefunGuide.openGuide(p, false); + else SlimefunGuide.openGuide(p, SlimefunGuideLayout.CHEST); } else if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { if (p.isSneaking()) SlimefunGuide.openSettings(p, item); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java index b871739f1..f532e2fa0 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java @@ -32,10 +32,11 @@ import org.bukkit.util.Vector; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class TalismanListener implements Listener { @@ -48,19 +49,19 @@ public class TalismanListener implements Listener { @EventHandler(priority=EventPriority.MONITOR) public void onDamageGet(EntityDamageEvent e) { if (!e.isCancelled()) { - if (e instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) e).getDamager() instanceof Player && random.nextInt(100) < 45 && SlimefunManager.isItemSimiliar(((Player) ((EntityDamageByEntityEvent) e).getDamager()).getInventory().getItemInMainHand(), SlimefunItem.getItem("BLADE_OF_VAMPIRES"), true)) { + if (e instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) e).getDamager() instanceof Player && random.nextInt(100) < 45 && SlimefunManager.isItemSimiliar(((Player) ((EntityDamageByEntityEvent) e).getDamager()).getInventory().getItemInMainHand(), SlimefunItems.BLADE_OF_VAMPIRES, true)) { ((Player) ((EntityDamageByEntityEvent) e).getDamager()).playSound(((EntityDamageByEntityEvent) e).getDamager().getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 0.7F, 0.7F); ((Player) ((EntityDamageByEntityEvent) e).getDamager()).addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 1)); } if (e.getEntity() instanceof Player) { - if (e.getCause() == DamageCause.LAVA) Talisman.checkFor(e, SlimefunItem.getByID("LAVA_TALISMAN")); - if (e.getCause() == DamageCause.DROWNING) Talisman.checkFor(e, SlimefunItem.getByID("WATER_TALISMAN")); - if (e.getCause() == DamageCause.FALL) Talisman.checkFor(e, SlimefunItem.getByID("ANGEL_TALISMAN")); - if (e.getCause() == DamageCause.FIRE) Talisman.checkFor(e, SlimefunItem.getByID("FIRE_TALISMAN")); - if (e.getCause() == DamageCause.ENTITY_ATTACK) Talisman.checkFor(e, SlimefunItem.getByID("WARRIOR_TALISMAN")); - if (e.getCause() == DamageCause.ENTITY_ATTACK) Talisman.checkFor(e, SlimefunItem.getByID("KNIGHT_TALISMAN")); - if (e.getCause() == DamageCause.PROJECTILE && Talisman.checkFor(e, SlimefunItem.getByID("WHIRLWIND_TALISMAN")) && ((EntityDamageByEntityEvent) e).getDamager() instanceof Projectile) { + if (e.getCause() == DamageCause.LAVA) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_LAVA); + if (e.getCause() == DamageCause.DROWNING) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_WATER); + if (e.getCause() == DamageCause.FALL) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_ANGEL); + if (e.getCause() == DamageCause.FIRE) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_FIRE); + if (e.getCause() == DamageCause.ENTITY_ATTACK) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_WARRIOR); + if (e.getCause() == DamageCause.ENTITY_ATTACK) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_KNIGHT); + if (e.getCause() == DamageCause.PROJECTILE && Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_WHIRLWIND) && ((EntityDamageByEntityEvent) e).getDamager() instanceof Projectile) { Vector direction = ((Player) e.getEntity()).getEyeLocation().getDirection().multiply(2.0); Projectile projectile = (Projectile) e.getEntity().getWorld().spawnEntity(((LivingEntity) e.getEntity()).getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), ((EntityDamageByEntityEvent) e).getDamager().getType()); projectile.setVelocity(direction); @@ -74,7 +75,7 @@ public class TalismanListener implements Listener { @EventHandler public void onItemBreak(PlayerItemBreakEvent e) { - if (Talisman.checkFor(e, SlimefunItem.getByID("ANVIL_TALISMAN"))) { + if (Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_ANVIL)) { PlayerInventory inv = e.getPlayer().getInventory(); int slot = inv.getHeldItemSlot(); @@ -104,12 +105,12 @@ public class TalismanListener implements Listener { @EventHandler public void onSprint(PlayerToggleSprintEvent e) { - if (e.isSprinting()) Talisman.checkFor(e, SlimefunItem.getByID("TRAVELLER_TALISMAN")); + if (e.isSprinting()) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_TRAVELLER); } @EventHandler public void onEnchant(EnchantItemEvent e) { - if (Talisman.checkFor(e, SlimefunItem.getByID("MAGICIAN_TALISMAN"))) { + if (Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_MAGICIAN)) { List enchantments = new ArrayList<>(); for (Enchantment en : Enchantment.values()) { for (int i = 1; i <= en.getMaxLevel(); i++) { @@ -121,7 +122,7 @@ public class TalismanListener implements Listener { String enchant = enchantments.get(random.nextInt(enchantments.size())); e.getEnchantsToAdd().put(Enchantment.getByKey(NamespacedKey.minecraft(enchant.split("-")[0])), Integer.parseInt(enchant.split("-")[1])); } - if (!e.getEnchantsToAdd().containsKey(Enchantment.SILK_TOUCH) && Enchantment.LOOT_BONUS_BLOCKS.canEnchantItem(e.getItem()) && Talisman.checkFor(e, SlimefunItem.getByID("WIZARD_TALISMAN"))) { + if (!e.getEnchantsToAdd().containsKey(Enchantment.SILK_TOUCH) && Enchantment.LOOT_BONUS_BLOCKS.canEnchantItem(e.getItem()) && Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_WIZARD)) { if (e.getEnchantsToAdd().containsKey(Enchantment.LOOT_BONUS_BLOCKS)) e.getEnchantsToAdd().remove(Enchantment.LOOT_BONUS_BLOCKS); Set enchantments = e.getEnchantsToAdd().keySet(); for (Enchantment en : enchantments) { @@ -149,10 +150,15 @@ public class TalismanListener implements Listener { fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + random.nextInt(5) : 1) * (fortune + 1); } - if (!item.getEnchantments().containsKey(Enchantment.SILK_TOUCH) && e.getBlock().getType().toString().endsWith("_ORE") && Talisman.checkFor(e, SlimefunItem.getByID("MINER_TALISMAN"))) { - if (drops.isEmpty()) drops = (List) e.getBlock().getDrops(); + if (!item.getEnchantments().containsKey(Enchantment.SILK_TOUCH) && e.getBlock().getType().toString().endsWith("_ORE") && Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_MINER)) { + if (drops.isEmpty()) { + drops = (List) e.getBlock().getDrops(); + } + for (ItemStack drop : new ArrayList<>(drops)) { - if (!drop.getType().isBlock()) drops.add(new CustomItem(drop, fortune * 2)); + if (!drop.getType().isBlock()) { + drops.add(new CustomItem(drop, fortune * 2)); + } } } } From 8895beb83a99160506bbeb30222078f1820679b0 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 3 Nov 2019 23:43:11 +0100 Subject: [PATCH 33/80] [CI skip] Minor refactoring --- .../Slimefun/Objects/LockedCategory.java | 12 +++++------- .../me/mrCookieSlime/Slimefun/Setup/MiscSetup.java | 5 +++-- .../commands/subcommands/OpenGuideCommand.java | 4 +++- .../Slimefun/hooks/PlaceholderAPIHook.java | 1 + 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java index de7505f19..53c72e2ba 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java @@ -3,14 +3,13 @@ package me.mrCookieSlime.Slimefun.Objects; import java.util.Arrays; import java.util.List; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - /** * Represents a {@link Category} that cannot be opened until the parent category/categories * are fully unlocked. @@ -112,10 +111,9 @@ public class LockedCategory extends Category { * * @since 4.0 */ + @SuppressWarnings("deprecation") public boolean hasUnlocked(Player p) { - PlayerProfile profile = PlayerProfile.get(p); - - return hasUnlocked(p, profile); + return hasUnlocked(p, PlayerProfile.get(p)); } public boolean hasUnlocked(Player p, PlayerProfile profile) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java index 1a28345d6..2e581ae3f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java @@ -34,8 +34,9 @@ public final class MiscSetup { private MiscSetup() {} public static void setupMisc() { - if (SlimefunItem.getByID("COMMON_TALISMAN") != null && (Boolean) Slimefun.getItemValue("COMMON_TALISMAN", "recipe-requires-nether-stars")) { - SlimefunItem.getByID("COMMON_TALISMAN").setRecipe(new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.NETHER_STAR), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}); + SlimefunItem talisman = SlimefunItem.getByID("COMMON_TALISMAN"); + if (talisman != null && (boolean) Slimefun.getItemValue(talisman.getID(), "recipe-requires-nether-stars")) { + talisman.setRecipe(new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.NETHER_STAR), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}); } SlimefunItem.setRadioactive(SlimefunItems.URANIUM); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/OpenGuideCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/OpenGuideCommand.java index 3cfd44683..ba06eeedd 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/OpenGuideCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/OpenGuideCommand.java @@ -7,6 +7,7 @@ import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.commands.SubCommand; +import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; public class OpenGuideCommand extends SubCommand { @@ -23,7 +24,8 @@ public class OpenGuideCommand extends SubCommand { public void onExecute(CommandSender sender, String[] args) { if (sender instanceof Player) { if (sender.hasPermission("slimefun.command.open_guide")) { - SlimefunGuide.openGuide((Player) sender, SlimefunPlugin.getCfg().getBoolean("guide.default-view-book")); + boolean book = SlimefunPlugin.getCfg().getBoolean("guide.default-view-book"); + SlimefunGuide.openGuide((Player) sender, book ? SlimefunGuideLayout.BOOK: SlimefunGuideLayout.CHEST); } else { SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/PlaceholderAPIHook.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/PlaceholderAPIHook.java index 7688f200a..507e86d0d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/PlaceholderAPIHook.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/PlaceholderAPIHook.java @@ -38,6 +38,7 @@ public class PlaceholderAPIHook extends PlaceholderExpansion { return true; } + @SuppressWarnings("deprecation") @Override public String onRequest(OfflinePlayer p, String params) { if (params.equals("researches_total_xp_levels_spent")) { From 09c02b7848d3966fdc463355097298abca5d24bb Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 4 Nov 2019 16:28:12 +0200 Subject: [PATCH 34/80] Fixed transmitter locations --- .../Slimefun/GPS/GPSNetwork.java | 23 ++++++++++++++----- .../machines/electric/gps/GPSTransmitter.java | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index 6187a3571..0056e5093 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -7,6 +7,9 @@ import java.util.Set; import java.util.UUID; import java.util.logging.Level; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter; +import me.mrCookieSlime.Slimefun.api.BlockStorage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -52,7 +55,9 @@ public class GPSNetwork { if (!transmitters.containsKey(uuid)) return 0; int level = 0; for (Location l : transmitters.get(uuid)) { - level = level + l.getBlockY(); + SlimefunItem sfi = BlockStorage.check(l); + if (sfi instanceof GPSTransmitter) + level += (int) ((GPSTransmitter) sfi).getMultiplier(l.getBlockY()); } return level; } @@ -76,8 +81,9 @@ public class GPSNetwork { menu.addMenuClickHandler(2, (pl, slot, item, action) -> false ); - - menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId()))); + + int complexity = getNetworkComplexity(p.getUniqueId()); + menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (complexity > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + complexity)); menu.addMenuClickHandler(4, (pl, slot, item, action) -> false ); @@ -91,9 +97,13 @@ public class GPSNetwork { int index = 0; for (Location l : getTransmitters(p.getUniqueId())) { if (index >= inventory.length) break; + + SlimefunItem sfi = BlockStorage.check(l); + if (!(sfi instanceof GPSTransmitter)) continue; + int slot = inventory[index]; - menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&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 &7Signal Strength: &r" + l.getBlockY(), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms")); + menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&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 &7Signal Strength: &r" + (int) ((GPSTransmitter) sfi).getMultiplier(l.getBlockY()), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms")); menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> false); index++; @@ -135,8 +145,9 @@ public class GPSNetwork { openTransmitterControlPanel(pl); return false; }); - - menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId()))); + + int complexity = getNetworkComplexity(p.getUniqueId()); + menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (complexity > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + complexity)); menu.addMenuClickHandler(4, (pl, slot, item, action) -> false); menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)")); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java index 4809316f9..36cb99419 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java @@ -50,7 +50,7 @@ public abstract class GPSTransmitter extends SimpleSlimefunItem { public void tick(Block b, SlimefunItem item, Config data) { int charge = ChargableBlock.getCharge(b); if (charge >= getEnergyConsumption()) { - Slimefun.getGPSNetwork().updateTransmitter(b.getLocation().add(0.0, getMultiplier(b.getY()), 0.0), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.ONLINE); + Slimefun.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.ONLINE); ChargableBlock.setCharge(b.getLocation(), charge - getEnergyConsumption()); } else { From 0302810c9c7da376da2d65e1345af52953634b5b Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 4 Nov 2019 16:33:40 +0200 Subject: [PATCH 35/80] Replaced double with int --- .../me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java | 4 ++-- .../machines/electric/gps/GPSTransmitter.java | 2 +- .../Slimefun/Setup/SlimefunSetup.java | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index 0056e5093..724300665 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -57,7 +57,7 @@ public class GPSNetwork { for (Location l : transmitters.get(uuid)) { SlimefunItem sfi = BlockStorage.check(l); if (sfi instanceof GPSTransmitter) - level += (int) ((GPSTransmitter) sfi).getMultiplier(l.getBlockY()); + level += ((GPSTransmitter) sfi).getMultiplier(l.getBlockY()); } return level; } @@ -103,7 +103,7 @@ public class GPSNetwork { int slot = inventory[index]; - menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&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 &7Signal Strength: &r" + (int) ((GPSTransmitter) sfi).getMultiplier(l.getBlockY()), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms")); + menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&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 &7Signal Strength: &r" + ((GPSTransmitter) sfi).getMultiplier(l.getBlockY()), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms")); menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> false); index++; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java index 36cb99419..4230a2fa8 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java @@ -39,7 +39,7 @@ public abstract class GPSTransmitter extends SimpleSlimefunItem { }); } - public abstract double getMultiplier(int y); + public abstract int getMultiplier(int y); public abstract int getEnergyConsumption(); @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 55ffef195..302de24a4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2106,7 +2106,7 @@ public final class SlimefunSetup { new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT}) { @Override - public double getMultiplier(int y) { + public int getMultiplier(int y) { return y; } @@ -2122,8 +2122,8 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.CARBON, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER}) { @Override - public double getMultiplier(int y) { - return y * 4.0 + 100; + public int getMultiplier(int y) { + return y * 4 + 100; } @Override @@ -2137,8 +2137,8 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CARBONADO, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2}) { @Override - public double getMultiplier(int y) { - return y * 16.0 + 500; + public int getMultiplier(int y) { + return y * 16 + 500; } @Override @@ -2152,8 +2152,8 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.NICKEL_INGOT, SlimefunItems.CARBONADO, SlimefunItems.NICKEL_INGOT, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3}) { @Override - public double getMultiplier(int y) { - return y * 64.0 + 600; + public int getMultiplier(int y) { + return y * 64 + 600; } @Override From 2fb92c5083e60138518e6977c1f3aca1ecaa648c Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 4 Nov 2019 16:36:10 +0200 Subject: [PATCH 36/80] Update GPSNetwork.java --- src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index 724300665..b5598fcea 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -7,9 +7,6 @@ import java.util.Set; import java.util.UUID; import java.util.logging.Level; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter; -import me.mrCookieSlime.Slimefun.api.BlockStorage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -27,7 +24,10 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter; public class GPSNetwork { From e4efed0640516429fe8d3ab1bf1d8f4565304f3e Mon Sep 17 00:00:00 2001 From: AlexLander123 <13492360+AlexLander123@users.noreply.github.com> Date: Wed, 6 Nov 2019 00:08:25 +0800 Subject: [PATCH 37/80] Made requested changes - Added null check - Changed "a access port" to "the access port" - Removed extra menu.open(p) --- .../Objects/SlimefunItem/machines/ReactorAccessPort.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index 990728e14..a58158613 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -50,17 +50,18 @@ public class ReactorAccessPort extends SlimefunItem { if (reactor != null) { menu.replaceExistingItem(INFO_SLOT, new CustomItem(new ItemStack(Material.GREEN_WOOL), "&7Reactor", "", "&6Detected", "", "&7> Click to view Reactor")); menu.addMenuClickHandler(INFO_SLOT, (p, slot, item, action) -> { - reactor.open(p); + if(reactor != null) { + reactor.open(p); + } newInstance(menu, b); return false; }); } else { - menu.replaceExistingItem(INFO_SLOT, new CustomItem(new ItemStack(Material.RED_WOOL), "&7Reactor", "", "&cNot detected", "", "&7Reactor must be", "&7placed 3 blocks below", "&7a access port!")); + menu.replaceExistingItem(INFO_SLOT, new CustomItem(new ItemStack(Material.RED_WOOL), "&7Reactor", "", "&cNot detected", "", "&7Reactor must be", "&7placed 3 blocks below", "&7the access port!")); menu.addMenuClickHandler(INFO_SLOT, (p, slot, item, action) -> { newInstance(menu, b); - menu.open(p); return false; }); } From 9442fa65ca929aed619df6368f32eb80757f916f Mon Sep 17 00:00:00 2001 From: AlexLander123 <13492360+AlexLander123@users.noreply.github.com> Date: Wed, 6 Nov 2019 00:56:03 +0800 Subject: [PATCH 38/80] Fixed ancient alter logic --- .../Slimefun/ancient_altar/AncientAltarListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java index b3735286b..5e9f7119c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java @@ -84,7 +84,7 @@ public class AncientAltarListener implements Listener { } } else if (item.equals("ANCIENT_ALTAR")) { - if (Slimefun.hasUnlocked(e.getPlayer(), SlimefunItems.ANCIENT_ALTAR, true) || utilities.altarinuse.contains(b.getLocation())) { + if (!Slimefun.hasUnlocked(e.getPlayer(), SlimefunItems.ANCIENT_ALTAR, true) || utilities.altarinuse.contains(b.getLocation())) { e.setCancelled(true); return; } From c13ec9903cb2a177bf6d44167e948342c3bf4f21 Mon Sep 17 00:00:00 2001 From: AlexLander123 <13492360+AlexLander123@users.noreply.github.com> Date: Wed, 6 Nov 2019 02:17:52 +0800 Subject: [PATCH 39/80] Ancient altar no longer able to craft items that are not unlocked --- .../ancient_altar/AncientAltarListener.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java index 5e9f7119c..26608c493 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java @@ -110,14 +110,24 @@ public class AncientAltarListener implements Listener { ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { - List consumed = new ArrayList<>(); - consumed.add(catalyst); + if (Slimefun.hasUnlocked(e.getPlayer(), result, true)) { + List consumed = new ArrayList<>(); + consumed.add(catalyst); - if (e.getPlayer().getGameMode() != GameMode.CREATIVE) { - ItemUtils.consumeItem(e.getPlayer().getInventory().getItemInMainHand(), false); + if (e.getPlayer().getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getPlayer().getInventory().getItemInMainHand(), false); + } + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); + } + else { + altars.remove(e.getClickedBlock()); + + pedestals.forEach(block -> utilities.altarinuse.remove(block.getLocation())); + + // Item not unlocked, no longer in use. + utilities.altarinuse.remove(b.getLocation()); } - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); } else { altars.remove(e.getClickedBlock()); From fc67fac34ce45a7dfeaa51ac56fe903b35f2487b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 13:01:07 +0100 Subject: [PATCH 40/80] [CI skip] Changed default version string --- pom.xml | 2 +- .../me/mrCookieSlime/Slimefun/SlimefunPlugin.java | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 8c1022172..9ce59fd1b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 me.mrCookieSlime Slimefun - 4.2 + UNOFFICIAL 1.8 diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index e30ae07f5..df9675253 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -168,7 +168,13 @@ public final class SlimefunPlugin extends JavaPlugin { // Setting up the Auto-Updater Updater updater; - + + if (getDescription().getVersion().equals("UNOFFICIAL")) { + // This Server is using a modified build that is not a public release. + getLogger().log(Level.WARNING, "It looks like you are using an unofficially modified build of Slimefun!"); + getLogger().log(Level.WARNING, "Auto-Updates have been disabled, this build is not considered safe."); + getLogger().log(Level.WARNING, "Do not report bugs encountered in this Version of Slimefun."); + } if (getDescription().getVersion().startsWith("DEV - ")) { // If we are using a development build, we want to switch to our custom updater = new GitHubBuildsUpdater(this, getFile(), "TheBusyBiscuit/Slimefun4/master"); @@ -182,7 +188,9 @@ public final class SlimefunPlugin extends JavaPlugin { updater = new BukkitUpdater(this, getFile(), 53485); } - if (config.getBoolean("options.auto-update")) updater.start(); + if (updater != null && config.getBoolean("options.auto-update")) { + updater.start(); + } // Creating all necessary Folders String[] storage = {"blocks", "stored-blocks", "stored-inventories", "stored-chunks", "universal-inventories", "waypoints", "block-backups"}; From 2c7e155aa13708c460416c9af4d18df330f91261 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 13:51:56 +0100 Subject: [PATCH 41/80] Added different kinds of Jerky to the Auto-Drier --- .../machines/electric/AutoDrier.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java index c9d9e637d..69e790a43 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java @@ -39,9 +39,6 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { recipeList.add(new ItemStack(Material.KELP)); recipeList.add(new ItemStack(Material.DRIED_KELP)); - recipeList.add(new ItemStack(Material.COOKED_BEEF)); - recipeList.add(SlimefunItems.BEEF_JERKY); - recipeList.add(new ItemStack(Material.POTION)); recipeList.add(new ItemStack(Material.GLASS_BOTTLE)); @@ -53,6 +50,24 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { recipeList.add(new ItemStack(Material.WATER_BUCKET)); recipeList.add(new ItemStack(Material.BUCKET)); + + recipeList.add(new ItemStack(Material.COOKED_BEEF)); + recipeList.add(SlimefunItems.BEEF_JERKY); + + recipeList.add(new ItemStack(Material.COOKED_PORKCHOP)); + recipeList.add(SlimefunItems.PORK_JERKY); + + recipeList.add(new ItemStack(Material.COOKED_CHICKEN)); + recipeList.add(SlimefunItems.CHICKEN_JERKY); + + recipeList.add(new ItemStack(Material.COOKED_MUTTON)); + recipeList.add(SlimefunItems.MUTTON_JERKY); + + recipeList.add(new ItemStack(Material.COOKED_RABBIT)); + recipeList.add(SlimefunItems.RABBIT_JERKY); + + recipeList.add(new ItemStack(Material.COOKED_COD)); + recipeList.add(SlimefunItems.FISH_JERKY); } @Override From 2459469c9d87bb7cf6c3a88a5bb3b188c69920a4 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 17:46:18 +0100 Subject: [PATCH 42/80] Added support for custom item models --- .../Objects/SlimefunItem/SlimefunItem.java | 38 +++++++++++----- .../Slimefun/Setup/SlimefunSetup.java | 4 +- .../Slimefun/Setup/WikiSetup.java | 5 ++- .../Slimefun/SlimefunPlugin.java | 20 ++++++--- .../Slimefun/api/SlimefunItemStack.java | 10 +++-- .../services/CustomItemDataService.java | 38 ++++++++++++++++ .../services/CustomTextureService.java | 44 +++++++++++++++++++ 7 files changed, 133 insertions(+), 26 deletions(-) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index d9bc6698e..f00c1cdbb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Consumer; import java.util.logging.Level; @@ -13,9 +14,7 @@ import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; @@ -164,7 +163,11 @@ public class SlimefunItem { 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}; + + if (this.recipe.length < 9) { + this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null}; + } + SlimefunPlugin.getUtilities().allItems.add(this); SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".enabled", true); @@ -192,7 +195,10 @@ public class SlimefunItem { } if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) { - if (!Category.list().contains(category)) category.register(); + + if (!Category.list().contains(category)) { + category.register(); + } this.state = ItemState.ENABLED; @@ -202,8 +208,13 @@ public class SlimefunItem { this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting"); this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission"); this.noPermissionTooltip = SlimefunPlugin.getItemCfg().getStringList(this.id + ".no-permission-tooltip"); + SlimefunPlugin.getUtilities().enabledItems.add(this); - if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++; + + if (slimefun) { + SlimefunPlugin.getUtilities().vanillaItems++; + } + SlimefunPlugin.getUtilities().itemIDs.put(this.id, this); create(); @@ -285,17 +296,18 @@ public class SlimefunItem { } if (item.hasItemMeta()) { - String id = PersistentDataAPI.getString(item.getItemMeta(), SlimefunPlugin.getItemDataKey()); - if (id != null) return getByID(id); + Optional itemID = SlimefunPlugin.getItemDataService().getItemData(item); + + if (itemID.isPresent()) { + return getByID(itemID.get()); + } } for (SlimefunItem sfi: SlimefunPlugin.getUtilities().enabledItems) { if (sfi.isItem(item)) { // If we have to loop all items for the given item, then at least // set the id via PersistenDataAPI for future performance boosts - ItemMeta im = item.getItemMeta(); - PersistentDataAPI.setString(im, SlimefunPlugin.getItemDataKey(), sfi.getID()); - item.setItemMeta(im); + SlimefunPlugin.getItemDataService().setItemData(item, sfi.getID()); return sfi; } @@ -309,8 +321,10 @@ public class SlimefunItem { if (item == null) return false; if (item.hasItemMeta()) { - String comparingId = PersistentDataAPI.getString(item.getItemMeta(), SlimefunPlugin.getItemDataKey()); - if (comparingId != null) return getID().equals(comparingId); + Optional itemID = SlimefunPlugin.getItemDataService().getItemData(item); + if (itemID.isPresent()) { + return getID().equals(itemID.get()); + } } if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 55ffef195..828bbcd41 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -178,12 +178,12 @@ import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; import me.mrCookieSlime.Slimefun.holograms.ReactorHologram; public final class SlimefunSetup { + + private static final Random random = new Random(); private SlimefunSetup() {} public static void setupItems() { - Random random = new Random(); - new SlimefunItem(Categories.WEAPONS, (SlimefunItemStack) SlimefunItems.GRANDMAS_WALKING_STICK, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.OAK_LOG), null, null, new ItemStack(Material.OAK_LOG), null, null, new ItemStack(Material.OAK_LOG), null}) .register(true); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java index 414df7e81..b69574139 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java @@ -11,6 +11,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -18,11 +19,11 @@ public final class WikiSetup { private WikiSetup() {} - public static void addWikiPages(Class c) { + public static void addWikiPages(SlimefunPlugin plugin) { JsonParser parser = new JsonParser(); Slimefun.getLogger().log(Level.INFO, "Loading Wiki pages..."); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(c.getResourceAsStream("/wiki.json")))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream("/wiki.json")))) { JsonElement element = parser.parse(reader.lines().collect(Collectors.joining(""))); JsonObject json = element.getAsJsonObject(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index df9675253..b49f914f1 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -4,7 +4,6 @@ import java.io.File; import java.util.logging.Level; import org.bukkit.Bukkit; -import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -71,6 +70,8 @@ import me.mrCookieSlime.Slimefun.listeners.TalismanListener; import me.mrCookieSlime.Slimefun.listeners.TeleporterListener; import me.mrCookieSlime.Slimefun.listeners.ToolListener; import me.mrCookieSlime.Slimefun.listeners.WorldListener; +import me.mrCookieSlime.Slimefun.services.CustomItemDataService; +import me.mrCookieSlime.Slimefun.services.CustomTextureService; import me.mrCookieSlime.Slimefun.utils.Settings; import me.mrCookieSlime.Slimefun.utils.Utilities; @@ -79,7 +80,9 @@ public final class SlimefunPlugin extends JavaPlugin { public static SlimefunPlugin instance; private RecipeSnapshot recipeSnapshot; - private final NamespacedKey itemDataKey = new NamespacedKey(this, "slimefun_item"); + + private final CustomItemDataService itemDataService = new CustomItemDataService(this, "slimefun_item"); + private final CustomTextureService textureService = new CustomTextureService(this); private TickerTask ticker; private SlimefunLocalization local; @@ -210,13 +213,14 @@ public final class SlimefunPlugin extends JavaPlugin { MiscSetup.loadDescriptions(); settings.researchesEnabled = getResearchCfg().getBoolean("enable-researching"); - settings.smelteryFireBreakChance = (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"); + settings.smelteryFireBreakChance = (int) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"); getLogger().log(Level.INFO, "Loading Researches..."); ResearchSetup.setupResearches(); MiscSetup.setupMisc(); - WikiSetup.addWikiPages(getClass()); + WikiSetup.addWikiPages(this); + textureService.setup(utilities.allItems); getLogger().log(Level.INFO, "Loading World Generators..."); @@ -441,8 +445,12 @@ public final class SlimefunPlugin extends JavaPlugin { return instance.recipeSnapshot; } - public static NamespacedKey getItemDataKey() { - return instance.itemDataKey; + public static CustomItemDataService getItemDataService() { + return instance.itemDataService; + } + + public static CustomTextureService getItemTextureService() { + return instance.textureService; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java index 3fba771de..4dc7d856f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java @@ -8,7 +8,6 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; @@ -56,9 +55,12 @@ public class SlimefunItemStack extends CustomItem { private void setID(String id) { this.id = id; - ItemMeta im = getItemMeta(); - PersistentDataAPI.setString(im, SlimefunPlugin.getItemDataKey(), id); - setItemMeta(im); + ItemMeta meta = getItemMeta(); + + SlimefunPlugin.getItemDataService().setItemData(meta, id); + SlimefunPlugin.getItemTextureService().setTexture(meta, id); + + setItemMeta(meta); } private static ItemStack getSkull(String texture) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java new file mode 100644 index 000000000..9d75560ee --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomItemDataService.java @@ -0,0 +1,38 @@ +package me.mrCookieSlime.Slimefun.services; + +import java.util.Optional; + +import org.bukkit.NamespacedKey; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.Plugin; + +import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI; + +public class CustomItemDataService { + + private final NamespacedKey namespacedKey; + + public CustomItemDataService(Plugin plugin, String key) { + namespacedKey = new NamespacedKey(plugin, key); + } + + public void setItemData(ItemStack item, String id) { + ItemMeta im = item.getItemMeta(); + setItemData(im, id); + item.setItemMeta(im); + } + + public void setItemData(ItemMeta im, String id) { + PersistentDataAPI.setString(im, namespacedKey, id); + } + + public Optional getItemData(ItemStack item) { + return getItemData(item.getItemMeta()); + } + + public Optional getItemData(ItemMeta meta) { + return PersistentDataAPI.getOptionalString(meta, namespacedKey); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java new file mode 100644 index 000000000..03aaf6e03 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java @@ -0,0 +1,44 @@ +package me.mrCookieSlime.Slimefun.services; + +import java.util.Collection; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.Plugin; + +import io.github.thebusybiscuit.cscorelib2.config.Config; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; + +public class CustomTextureService { + + private final Config config; + + public CustomTextureService(Plugin plugin) { + this.config = new Config(plugin, "item-models.yml"); + } + + public void setup(Collection items) { + for (SlimefunItem item : items) { + if (item != null && item.getID() != null) { + config.setDefaultValue(item.getID(), 0); + } + } + + config.save(); + } + + public int getModelData(String id) { + return config.getInt(id); + } + + public void setTexture(ItemStack item, String id) { + ItemMeta im = item.getItemMeta(); + setTexture(im, id); + item.setItemMeta(im); + } + + public void setTexture(ItemMeta im, String id) { + im.setCustomModelData(getModelData(id)); + } + +} From 3e30ce8d1464b5a5b7451dc231bf98d03b330de1 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 18:43:37 +0100 Subject: [PATCH 43/80] Reduced technical debt --- .../Slimefun/GPS/GPSNetwork.java | 56 ++++++++++++------- .../Slimefun/Setup/SlimefunSetup.java | 3 +- .../Slimefun/SlimefunPlugin.java | 4 +- .../Slimefun/autosave/PlayerAutoSaver.java | 2 +- .../subcommands/TeleporterCommand.java | 4 +- .../MetricsService.java} | 6 +- 6 files changed, 44 insertions(+), 31 deletions(-) rename src/main/java/me/mrCookieSlime/Slimefun/{Setup/SlimefunMetrics.java => services/MetricsService.java} (79%) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index 6187a3571..10cbe4076 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -28,19 +28,22 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; public class GPSNetwork { - private Map> transmitters = new HashMap<>(); - private static final int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; - private static final int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + private static final String DIRECTORY = "data-storage/Slimefun/waypoints/"; + private final Map> transmitters = new HashMap<>(); - private static final int[] teleporter_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; - private static final int[] teleporter_inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + private final int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; + private final int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + + private final int[] teleporterBorder = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; + private final int[] teleporterInventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; public void updateTransmitter(Location l, UUID uuid, NetworkStatus status) { Set set = transmitters.getOrDefault(uuid, new HashSet<>()); if (status == NetworkStatus.ONLINE) { - if (set.add(l)) + if (set.add(l)) { transmitters.put(uuid, set); + } } else { set.remove(l); @@ -49,11 +52,15 @@ public class GPSNetwork { } public int getNetworkComplexity(UUID uuid) { - if (!transmitters.containsKey(uuid)) return 0; + if (!transmitters.containsKey(uuid)) { + return 0; + } + int level = 0; for (Location l : transmitters.get(uuid)) { - level = level + l.getBlockY(); + level += l.getBlockY(); } + return level; } @@ -153,7 +160,7 @@ 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(' ', '_'); - Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml"); + Config cfg = new Config(DIRECTORY + pl.getUniqueId().toString() + ".yml"); cfg.setValue(id, null); cfg.save(); pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); @@ -174,12 +181,14 @@ public class GPSNetwork { public Map getWaypoints(UUID uuid) { Map map = new HashMap<>(); - Config cfg = new Config("data-storage/Slimefun/waypoints/" + uuid.toString() + ".yml"); - for (String key: cfg.getKeys()) { + Config cfg = new Config(DIRECTORY + uuid.toString() + ".yml"); + + for (String key : cfg.getKeys()) { if (cfg.contains(key + ".world") && Bukkit.getWorld(cfg.getString(key + ".world")) != null) { map.put(cfg.getString(key + ".name"), cfg.getLocation(key)); } } + return map; } @@ -188,6 +197,7 @@ public class GPSNetwork { SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.max", true); return; } + SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.new", true); p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 0.5F, 1F); @@ -201,12 +211,14 @@ public class GPSNetwork { SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.max", true); return; } - Config cfg = new Config("data-storage/Slimefun/waypoints/" + p.getUniqueId().toString() + ".yml"); - String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase() - .replace(' ', '_'); + + Config cfg = new Config(DIRECTORY + p.getUniqueId().toString() + ".yml"); + String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase().replace(' ', '_'); + cfg.setValue(id, l); cfg.setValue(id + ".name", name); cfg.save(); + p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1F, 1F); SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.added", true); } @@ -215,17 +227,18 @@ public class GPSNetwork { return transmitters.getOrDefault(uuid, new HashSet<>()); } - public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) { - if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) return; + public void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) { + if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) { + return; + } p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); SlimefunPlugin.getUtilities().teleporterUsers.add(p.getUniqueId()); ChestMenu menu = new ChestMenu("&3Teleporter"); - menu.addMenuCloseHandler(pl -> SlimefunPlugin.getUtilities().teleporterUsers.remove(pl.getUniqueId())); - for (int slot : teleporter_border) { + for (int slot : teleporterBorder) { menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (pl, slotn, item, action) -> false ); @@ -237,9 +250,10 @@ public class GPSNetwork { final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D); int index = 0; - for (final Map.Entry entry: Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) { - if (index >= teleporter_inventory.length) break; - int slot = teleporter_inventory[index]; + + for (final Map.Entry entry : Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) { + if (index >= teleporterInventory.length) break; + int slot = teleporterInventory[index]; final Location l = entry.getValue(); ItemStack globe = getPlanet(entry); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 828bbcd41..093e27f1a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -40,7 +40,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; @@ -2708,7 +2707,7 @@ public final class SlimefunSetup { @Override public void onInteract(final Player p, final Block b) { - GPSNetwork.openTeleporterGUI(p, UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), b, Slimefun.getGPSNetwork().getNetworkComplexity(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")))); + Slimefun.getGPSNetwork().openTeleporterGUI(p, UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), b, Slimefun.getGPSNetwork().getNetworkComplexity(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")))); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index b49f914f1..8965a0327 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -34,7 +34,6 @@ import me.mrCookieSlime.Slimefun.Setup.Files; import me.mrCookieSlime.Slimefun.Setup.MiscSetup; import me.mrCookieSlime.Slimefun.Setup.ResearchSetup; import me.mrCookieSlime.Slimefun.Setup.SlimefunLocalization; -import me.mrCookieSlime.Slimefun.Setup.SlimefunMetrics; import me.mrCookieSlime.Slimefun.Setup.SlimefunSetup; import me.mrCookieSlime.Slimefun.Setup.WikiSetup; import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener; @@ -72,6 +71,7 @@ import me.mrCookieSlime.Slimefun.listeners.ToolListener; import me.mrCookieSlime.Slimefun.listeners.WorldListener; import me.mrCookieSlime.Slimefun.services.CustomItemDataService; import me.mrCookieSlime.Slimefun.services.CustomTextureService; +import me.mrCookieSlime.Slimefun.services.MetricsService; import me.mrCookieSlime.Slimefun.utils.Settings; import me.mrCookieSlime.Slimefun.utils.Utilities; @@ -167,7 +167,7 @@ public final class SlimefunPlugin extends JavaPlugin { gps = new GPSNetwork(); // Setting up bStats - new SlimefunMetrics(this); + new MetricsService(this); // Setting up the Auto-Updater Updater updater; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java b/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java index bd359328b..7094ff413 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java @@ -25,7 +25,7 @@ public class PlayerAutoSaver implements Runnable { } if (players > 0) { - Slimefun.getLogger().log(Level.INFO, "Auto-Saved Player Data for " + players + " Player(s)!"); + Slimefun.getLogger().log(Level.INFO, "Auto-Saved Player Data for {0} Player(s)!", players); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java index a7243ea88..5fdc9e42b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/subcommands/TeleporterCommand.java @@ -7,7 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.commands.SubCommand; @@ -29,7 +29,7 @@ public class TeleporterCommand extends SubCommand { if (sender.hasPermission("slimefun.command.teleporter") && sender instanceof Player) { OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]); if (player.getName() != null) { - GPSNetwork.openTeleporterGUI((Player) sender, player.getUniqueId(), ((Player) sender).getLocation().getBlock().getRelative(BlockFace.DOWN), 999999999); + Slimefun.getGPSNetwork().openTeleporterGUI((Player) sender, player.getUniqueId(), ((Player) sender).getLocation().getBlock().getRelative(BlockFace.DOWN), 999999999); } else sender.sendMessage("&4Unknown Player: &c" + args[1]); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunMetrics.java b/src/main/java/me/mrCookieSlime/Slimefun/services/MetricsService.java similarity index 79% rename from src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunMetrics.java rename to src/main/java/me/mrCookieSlime/Slimefun/services/MetricsService.java index 5adec35de..5702a3791 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunMetrics.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/MetricsService.java @@ -1,12 +1,12 @@ -package me.mrCookieSlime.Slimefun.Setup; +package me.mrCookieSlime.Slimefun.services; import org.bstats.bukkit.Metrics; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -public class SlimefunMetrics extends Metrics { +public class MetricsService extends Metrics { - public SlimefunMetrics(SlimefunPlugin plugin) { + public MetricsService(SlimefunPlugin plugin) { super(plugin); addCustomChart(new SimplePie("auto_updates", () -> SlimefunPlugin.getCfg().getBoolean("options.auto-update") ? "enabled": "disabled")); From 97d8ce15469701761f6ac00596224df66dabe82c Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 18:52:18 +0100 Subject: [PATCH 44/80] Moved CoreProtect integration to CS-CoreLib2 --- pom.xml | 12 +------- .../SlimefunItem/items/ExplosivePickaxe.java | 10 ++++--- .../SlimefunItem/items/ExplosiveShovel.java | 30 ++++++++----------- .../Slimefun/hooks/SlimefunHooks.java | 12 -------- 4 files changed, 20 insertions(+), 44 deletions(-) diff --git a/pom.xml b/pom.xml index 9ce59fd1b..b3116f0f2 100644 --- a/pom.xml +++ b/pom.xml @@ -28,10 +28,6 @@ worldedit-worldguard-repo https://maven.sk89q.com/repo/ - - coreprotect-repo - https://maven.playpro.com/ - CodeMC https://repo.codemc.org/repository/maven-public @@ -114,7 +110,7 @@ com.github.thebusybiscuit CS-CoreLib2 - 0.7.2 + 0.7.3 compile @@ -142,12 +138,6 @@ system ${project.basedir}/lib/Clearlag.jar - - net.coreprotect - coreprotect - 2.16.3 - provided - me.mrCookieSlime EmeraldEnchants diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java index 83bb15a80..91a40afac 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java @@ -43,18 +43,20 @@ public class ExplosivePickaxe extends SimpleSlimefunItem impl public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { if (isItem(item)) { - e.setCancelled(true); e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); + for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { for (int z = -1; z <= 1; z++) { + if (x == 0 && y == 0 && z == 0) { + continue; + } + Block b = e.getBlock().getRelative(x, y, z); if (b.getType() != Material.AIR && !b.isLiquid() && !StringUtils.equals(b.getType().toString(), blacklist) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { - if (SlimefunPlugin.getHooks().isCoreProtectInstalled()) { - SlimefunPlugin.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData()); - } + SlimefunPlugin.getProtectionManager().logAction(e.getPlayer(), b, ProtectableAction.BREAK_BLOCK); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); SlimefunItem sfItem = BlockStorage.check(b); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java index a2a5cad0b..df9135640 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java @@ -35,34 +35,30 @@ public class ExplosiveShovel extends SimpleSlimefunItem imple public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { if (isItem(item)) { - e.setCancelled(true); e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { for (int z = -1; z <= 1; z++) { - Block b = e.getBlock().getRelative(x, y, z); - boolean correctType = false; - - for (Material mat : MaterialTools.getBreakableByShovel().getAsArray()) { - if (b.getType() == mat) { - correctType = true; - break; - } + if (x == 0 && y == 0 && z == 0) { + continue; } - if (correctType && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { - if (SlimefunPlugin.getHooks().isCoreProtectInstalled()) { - SlimefunPlugin.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData()); - } + Block b = e.getBlock().getRelative(x, y, z); + + if (MaterialTools.getBreakableByShovel().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { + SlimefunPlugin.getProtectionManager().logAction(e.getPlayer(), b, ProtectableAction.BREAK_BLOCK); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); - for (ItemStack drop: b.getDrops()) { - b.getWorld().dropItemNaturally(b.getLocation(), drop); - } - b.setType(Material.AIR); + for (ItemStack drop: b.getDrops()) { + if (drop != null) { + b.getWorld().dropItemNaturally(b.getLocation(), drop); + } + } + + b.setType(Material.AIR); damageItem(e.getPlayer(), item); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/SlimefunHooks.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/SlimefunHooks.java index 0f074b8ba..f0c9f4504 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/SlimefunHooks.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/SlimefunHooks.java @@ -4,8 +4,6 @@ import java.util.logging.Level; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.api.Slimefun; -import net.coreprotect.CoreProtect; -import net.coreprotect.CoreProtectAPI; public final class SlimefunHooks { @@ -18,8 +16,6 @@ public final class SlimefunHooks { private boolean worldEdit = false; private boolean placeHolderAPI = false; - private CoreProtectAPI coreProtectAPI; - public SlimefunHooks(SlimefunPlugin plugin) { this.plugin = plugin; @@ -41,10 +37,6 @@ public final class SlimefunHooks { exoticGarden = isPluginInstalled("ExoticGarden"); emeraldEnchants = isPluginInstalled("EmeraldEnchants"); - - if (isPluginInstalled("CoreProtect")) { - coreProtectAPI = ((CoreProtect) plugin.getServer().getPluginManager().getPlugin("CoreProtect")).getAPI(); - } // WorldEdit Hook to clear Slimefun Data upon //set 0 //cut or any other equivalent if (isPluginInstalled("WorldEdit")) { @@ -94,8 +86,4 @@ public final class SlimefunHooks { return placeHolderAPI; } - public CoreProtectAPI getCoreProtectAPI() { - return coreProtectAPI; - } - } From a10fe1e514f48ed3f67b3f4c5e73c24091e2ef5e Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 18:54:53 +0100 Subject: [PATCH 45/80] Fixed custom model data --- .../mrCookieSlime/Slimefun/services/CustomTextureService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java index 03aaf6e03..d7375dd56 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java @@ -38,7 +38,8 @@ public class CustomTextureService { } public void setTexture(ItemMeta im, String id) { - im.setCustomModelData(getModelData(id)); + int data = getModelData(id); + im.setCustomModelData(data == 0 ? null: data); } } From 7890edd29594c46fb31cfe06e5dd659da41cc13b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 19:44:53 +0100 Subject: [PATCH 46/80] Added Output Chest Support to the Automated Panning Machine --- .../multiblocks/AutomatedPanningMachine.java | 72 ++++++++++++------- .../multiblocks/MultiBlockMachine.java | 28 +++++--- 2 files changed, 65 insertions(+), 35 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java index a05a793bb..82d6ab2a8 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java @@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks; import java.util.Random; -import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Material; @@ -10,12 +9,15 @@ import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import io.github.thebusybiscuit.cscorelib2.scheduling.TaskQueue; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; public class AutomatedPanningMachine extends MultiBlockMachine { @@ -45,44 +47,64 @@ public class AutomatedPanningMachine extends MultiBlockMachine { public void postRegister() { super.postRegister(); - chanceSiftedOre = (int) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"); - chanceClay = (int) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"); - chanceFlint = (int) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"); + String goldPan = "GOLD_PAN"; + + chanceSiftedOre = (int) Slimefun.getItemValue(goldPan, "chance.SIFTED_ORE"); + chanceClay = (int) Slimefun.getItemValue(goldPan, "chance.CLAY"); + chanceFlint = (int) Slimefun.getItemValue(goldPan, "chance.FLINT"); } @Override public void onInteract(Player p, Block b) { final ItemStack input = p.getInventory().getItemInMainHand(); - ItemStack output = null; - if (random.nextInt(100) < chanceSiftedOre) output = SlimefunItems.SIFTED_ORE; - else if (random.nextInt(100) < chanceClay) output = new ItemStack(Material.CLAY_BALL); - else if (random.nextInt(100) < chanceFlint) output = new ItemStack(Material.FLINT); - - final ItemStack drop = output; - - if (input != null && input.getType() == Material.GRAVEL && (!input.hasItemMeta() || (input.hasItemMeta() && !input.getItemMeta().hasDisplayName()))) { + if (SlimefunManager.isItemSimiliar(input, new ItemStack(Material.GRAVEL), true)) { if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(input, false); - 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); + ItemStack output = getRandomDrop(); + TaskQueue queue = new TaskQueue(); + + queue.thenRepeatEvery(20, 5, () -> + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL) + ); + + queue.thenRun(20, () -> { + if (output != null) { + Inventory outputChest = findOutputChest(b.getRelative(BlockFace.DOWN), output); - if (j == 6) { - if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + if (outputChest != null) { + outputChest.addItem(output); + } + else { + b.getWorld().dropItemNaturally(b.getLocation(), output); } - }, i * 30L); - - } + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + } + else { + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARMOR_STAND_BREAK, 1F, 1F); + } + }); - return; + queue.execute(SlimefunPlugin.instance); + } + else { + SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); + } + } + + private ItemStack getRandomDrop() { + if (random.nextInt(100) < chanceSiftedOre) { + return SlimefunItems.SIFTED_ORE; + } + else if (random.nextInt(100) < chanceClay) { + return new ItemStack(Material.CLAY_BALL); + } + else if (random.nextInt(100) < chanceFlint) { + return new ItemStack(Material.FLINT); } - SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); + return null; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java index f177e030b..a62a90f9b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MultiBlockMachine.java @@ -8,8 +8,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils; import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; @@ -73,25 +73,33 @@ public abstract class MultiBlockMachine extends SlimefunMachine { } protected Inventory findOutputInventory(ItemStack product, Block dispBlock, Inventory dispInv, Inventory placeCheckerInv) { - Inventory outputInv = null; + Inventory outputInv = findOutputChest(dispBlock, product); + // This if-clause will trigger if no suitable output chest was found. It's functionally the same as the old fit check for the dispenser, only refactored. + if (outputInv == null && InvUtils.fits(placeCheckerInv, product)) { + return dispInv; + } + else { + return outputInv; + } + } + + protected Inventory findOutputChest(Block b, ItemStack output) { for (BlockFace face : outputFaces) { - Block potentialOutput = dispBlock.getRelative(face); + Block potentialOutput = b.getRelative(face); String id = BlockStorage.checkID(potentialOutput); + if (id != null && id.equals("OUTPUT_CHEST")) { // Found the output chest! Now, let's check if we can fit the product in it. Inventory inv = ((Container) potentialOutput.getState()).getInventory(); - if (InvUtils.fits(inv, product)) { - // It fits! Let's set the inventory to that now. - outputInv = inv; - break; + + if (InvUtils.fits(inv, output)) { + return inv; } } } - // This if-clause will trigger if no suitable output chest was found. It's functionally the same as the old fit check for the dispenser, only refactored. - if (outputInv == null && InvUtils.fits(placeCheckerInv, product)) outputInv = dispInv; - return outputInv; + return null; } } From 09ab124e364fb594f2fedd5bc0286d978e61437b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 10 Nov 2019 20:18:06 +0100 Subject: [PATCH 47/80] Added Output Chest support to the Table Saw --- .../Slimefun/Objects/MultiBlock.java | 4 ++++ .../SlimefunItem/multiblocks/TableSaw.java | 23 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java index b39617cf9..8bc06d65d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java @@ -86,6 +86,10 @@ public class MultiBlock { return Tag.WOODEN_SLABS.isTagged(a); } + if (Tag.WOODEN_TRAPDOORS.isTagged(b)) { + return Tag.WOODEN_TRAPDOORS.isTagged(a); + } + if (b != a) { return false; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java index dce6ab5a3..6240228b2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java @@ -5,13 +5,16 @@ import java.util.List; import java.util.Optional; import org.bukkit.Effect; +import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.cscorelib2.materials.MaterialConverter; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; @@ -52,13 +55,21 @@ public class TableSaw extends MultiBlockMachine { Optional planks = MaterialConverter.getPlanksFromLog(log.getType()); if (planks.isPresent()) { - b.getWorld().dropItemNaturally(b.getLocation(), new ItemStack(planks.get(), 8)); - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, log.getType()); - log.setAmount(log.getAmount() -1); - - if(log.getAmount() <= 0) { - p.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(log, true); } + + ItemStack output = new ItemStack(planks.get(), 8); + Inventory outputChest = findOutputChest(b, output); + + if (outputChest != null) { + outputChest.addItem(output); + } + else { + b.getWorld().dropItemNaturally(b.getLocation(), output); + } + + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, log.getType()); } } From f0c0919bce7df8f9f6c654ce47698a717e79302d Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 14:08:38 +0100 Subject: [PATCH 48/80] Add DisenchanterEvent --- .../Slimefun/Events/DisenchanterEvent.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java new file mode 100644 index 000000000..308e4adca --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java @@ -0,0 +1,46 @@ +package me.mrCookieSlime.Slimefun.Events; + +import me.mrCookieSlime.Slimefun.Objects.MultiBlock; + +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class DisenchanterEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + + private SlimefunItem sfItem; + private boolean cancelled; + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public DisenchanterEvent(SlimefunItem sfItem) { + this.sfItem = sfItem; + } + + public SlimefunItem getSfItem() { + return this.sfItem; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + +} From c6428c0e4bd44c5ecbf80c85f51fe27778d3869b Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 14:09:09 +0100 Subject: [PATCH 49/80] Update AutoDisenchanter.java --- .../SlimefunItem/machines/electric/AutoDisenchanter.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index 0bd27e613..9f6ec916e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -5,9 +5,12 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import me.mrCookieSlime.Slimefun.Events.DisenchanterEvent; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.enchantments.Enchantment; +import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.EnchantmentStorageMeta; @@ -94,6 +97,12 @@ public class AutoDisenchanter extends AContainer { return; } + final Object ev = new DisenchanterEvent(sfItem); + Bukkit.getPluginManager().callEvent((Event)ev); + if (((DisenchanterEvent)ev).isCancelled()) { + return; + } + // Disenchanting if (item != null && target != null && target.getType() == Material.BOOK) { int amount = 0; From 6f3bf2db13f9d6ac889a5151c8e522e7ac899194 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 15:49:06 +0100 Subject: [PATCH 50/80] Update DisenchanterEvent.java --- .../Slimefun/Events/DisenchanterEvent.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java index 308e4adca..5709974d5 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java @@ -1,20 +1,15 @@ package me.mrCookieSlime.Slimefun.Events; -import me.mrCookieSlime.Slimefun.Objects.MultiBlock; - -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; public class DisenchanterEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); - - private SlimefunItem sfItem; + private ItemStack sfItem; private boolean cancelled; public HandlerList getHandlers() { @@ -25,11 +20,12 @@ public class DisenchanterEvent extends Event implements Cancellable { return handlers; } - public DisenchanterEvent(SlimefunItem sfItem) { - this.sfItem = sfItem; + public DisenchanterEvent(ItemStack sfitem){ + super(true); + this.sfItem = sfitem; } - public SlimefunItem getSfItem() { + public ItemStack getSfItem() { return this.sfItem; } From fa57e6144790f0630c778879d1b138e84f8e6014 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 15:50:52 +0100 Subject: [PATCH 51/80] Update AutoDisenchanter.java --- .../SlimefunItem/machines/electric/AutoDisenchanter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index 9f6ec916e..b5da035bd 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -97,9 +97,9 @@ public class AutoDisenchanter extends AContainer { return; } - final Object ev = new DisenchanterEvent(sfItem); - Bukkit.getPluginManager().callEvent((Event)ev); - if (((DisenchanterEvent)ev).isCancelled()) { + DisenchanterEvent event = new DisenchanterEvent(item); + Bukkit.getPluginManager().callEvent(event); + if ((event).isCancelled()) { return; } From d18adecb9a2bf703f97e846aa05ec4c09cdfab00 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:26:28 +0100 Subject: [PATCH 52/80] Update DisenchanterEvent.java --- .../me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java index 5709974d5..212577391 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java @@ -9,7 +9,7 @@ public class DisenchanterEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); - private ItemStack sfItem; + private final ItemStack sfItem; private boolean cancelled; public HandlerList getHandlers() { From 537fc57f48de0bac9e0ff80039ae93607aa79375 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:27:15 +0100 Subject: [PATCH 53/80] Update AutoDisenchanter.java --- .../SlimefunItem/machines/electric/AutoDisenchanter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index b5da035bd..c21140793 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -99,7 +99,7 @@ public class AutoDisenchanter extends AContainer { DisenchanterEvent event = new DisenchanterEvent(item); Bukkit.getPluginManager().callEvent(event); - if ((event).isCancelled()) { + if event.isCancelled()) { return; } From 201159f3bfcb3899ca2434a2a7b931e36e201e1b Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:29:59 +0100 Subject: [PATCH 54/80] Update AutoDisenchanter.java --- .../SlimefunItem/machines/electric/AutoDisenchanter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index c21140793..73f154cfb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -99,7 +99,7 @@ public class AutoDisenchanter extends AContainer { DisenchanterEvent event = new DisenchanterEvent(item); Bukkit.getPluginManager().callEvent(event); - if event.isCancelled()) { + if (event.isCancelled()) { return; } From 72a7f4598fee0dd9d9cc2811f313e66841cbda88 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:34:14 +0100 Subject: [PATCH 55/80] Update and rename DisenchanterEvent.java to AutoDisenchantEvent.java --- .../{DisenchanterEvent.java => AutoDisenchantEvent.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/me/mrCookieSlime/Slimefun/Events/{DisenchanterEvent.java => AutoDisenchantEvent.java} (85%) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java similarity index 85% rename from src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java rename to src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java index 212577391..10f1d7fc9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Events/DisenchanterEvent.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java @@ -5,7 +5,7 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; -public class DisenchanterEvent extends Event implements Cancellable { +public class AutoDisenchantEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); @@ -20,7 +20,7 @@ public class DisenchanterEvent extends Event implements Cancellable { return handlers; } - public DisenchanterEvent(ItemStack sfitem){ + public AutoDisenchantEvent(ItemStack sfitem){ super(true); this.sfItem = sfitem; } From 212b7cffd34fc826ae7c9a87e5816e254dd108f7 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:35:22 +0100 Subject: [PATCH 56/80] Update AutoDisenchantEvent.java --- .../Slimefun/Events/AutoDisenchantEvent.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java index 10f1d7fc9..235a0a675 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java @@ -9,7 +9,7 @@ public class AutoDisenchantEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); - private final ItemStack sfItem; + private final ItemStack item; private boolean cancelled; public HandlerList getHandlers() { @@ -20,13 +20,13 @@ public class AutoDisenchantEvent extends Event implements Cancellable { return handlers; } - public AutoDisenchantEvent(ItemStack sfitem){ + public AutoDisenchantEvent(ItemStack item){ super(true); - this.sfItem = sfitem; + this.item = item; } - public ItemStack getSfItem() { - return this.sfItem; + public ItemStack getItem() { + return this.item; } @Override From 918d9c350624169c4c3d2335c9246e883c246b73 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:36:45 +0100 Subject: [PATCH 57/80] Update AutoDisenchanter.java --- .../SlimefunItem/machines/electric/AutoDisenchanter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java index 73f154cfb..d51b88385 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java @@ -5,7 +5,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import me.mrCookieSlime.Slimefun.Events.DisenchanterEvent; +import me.mrCookieSlime.Slimefun.Events.AutoDisenchantEvent; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; @@ -97,7 +97,7 @@ public class AutoDisenchanter extends AContainer { return; } - DisenchanterEvent event = new DisenchanterEvent(item); + AutoDisenchantEvent event = new AutoDisenchantEvent(item); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { return; From da0fe57ab71df18bd6ff7d2573678e29382fffe5 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 16:58:27 +0100 Subject: [PATCH 58/80] Update AutoDisenchantEvent.java --- .../Slimefun/Events/AutoDisenchantEvent.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java index 235a0a675..bb866cde7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java @@ -12,18 +12,19 @@ public class AutoDisenchantEvent extends Event implements Cancellable { private final ItemStack item; private boolean cancelled; - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - public AutoDisenchantEvent(ItemStack item){ super(true); this.item = item; } + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + public ItemStack getItem() { return this.item; From 87caf6ee45f4baeed36960a87ff4baaad589b379 Mon Sep 17 00:00:00 2001 From: Poma123 Date: Sat, 16 Nov 2019 17:03:56 +0100 Subject: [PATCH 59/80] Update AutoDisenchantEvent.java --- .../me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java index bb866cde7..a4643aa63 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Events/AutoDisenchantEvent.java @@ -12,7 +12,7 @@ public class AutoDisenchantEvent extends Event implements Cancellable { private final ItemStack item; private boolean cancelled; - public AutoDisenchantEvent(ItemStack item){ + public AutoDisenchantEvent(ItemStack item) { super(true); this.item = item; } From 4a83ecca077d5c2681b5cfa3a415a2586711d59b Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sat, 16 Nov 2019 20:08:46 +0100 Subject: [PATCH 60/80] added jerkys to research --- .../me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 9b77a8528..fdb250412 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -1,5 +1,6 @@ package me.mrCookieSlime.Slimefun.Setup; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -188,14 +189,14 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(189, "Top Tier Transmitter", 44), SlimefunItems.GPS_TRANSMITTER_4); Slimefun.registerResearch(new Research(190, "Energy Networks 101", 6), SlimefunItems.ENERGY_REGULATOR); Slimefun.registerResearch(new Research(191, "Butcher Androids", 32), SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER); - Slimefun.registerResearch(new Research(192, "Organic Food", 25), SlimefunItems.FOOD_FABRICATOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.CARROT_ORGANIC_FOOD, SlimefunItems.POTATO_ORGANIC_FOOD, SlimefunItems.SEEDS_ORGANIC_FOOD, SlimefunItems.BEETROOT_ORGANIC_FOOD, SlimefunItems.MELON_ORGANIC_FOOD, SlimefunItems.APPLE_ORGANIC_FOOD); + Slimefun.registerResearch(new Research(192, "Organic Food", 25), SlimefunItems.FOOD_FABRICATOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.CARROT_ORGANIC_FOOD, SlimefunItems.POTATO_ORGANIC_FOOD, SlimefunItems.SEEDS_ORGANIC_FOOD, SlimefunItems.BEETROOT_ORGANIC_FOOD, SlimefunItems.MELON_ORGANIC_FOOD, SlimefunItems.APPLE_ORGANIC_FOOD, SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD); Slimefun.registerResearch(new Research(193, "Automated Feeding", 25), SlimefunItems.AUTO_BREEDER); Slimefun.registerResearch(new Research(194, "Advanced Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_2); Slimefun.registerResearch(new Research(195, "Advanced Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER); Slimefun.registerResearch(new Research(196, "Advanced Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN); Slimefun.registerResearch(new Research(197, "Animal Growth Manipulation", 32), SlimefunItems.ANIMAL_GROWTH_ACCELERATOR); Slimefun.registerResearch(new Research(198, "Exp Collector", 36), SlimefunItems.XP_COLLECTOR); - Slimefun.registerResearch(new Research(199, "Organic Fertilizer", 36), SlimefunItems.FOOD_COMPOSTER, SlimefunItems.WHEAT_FERTILIZER, SlimefunItems.CARROT_FERTILIZER, SlimefunItems.POTATO_FERTILIZER, SlimefunItems.SEEDS_FERTILIZER, SlimefunItems.BEETROOT_FERTILIZER, SlimefunItems.MELON_FERTILIZER, SlimefunItems.APPLE_FERTILIZER); + Slimefun.registerResearch(new Research(199, "Organic Fertilizer", 36), SlimefunItems.FOOD_COMPOSTER, SlimefunItems.WHEAT_FERTILIZER, SlimefunItems.CARROT_FERTILIZER, SlimefunItems.POTATO_FERTILIZER, SlimefunItems.SEEDS_FERTILIZER, SlimefunItems.BEETROOT_FERTILIZER, SlimefunItems.MELON_FERTILIZER, SlimefunItems.APPLE_FERTILIZER, SlimefunItems.SWEET_BERRIES_FERTILIZER); Slimefun.registerResearch(new Research(200, "Crop Growth Acceleration", 40), SlimefunItems.CROP_GROWTH_ACCELERATOR); Slimefun.registerResearch(new Research(201, "Upgraded Crop Growth Accelerator", 44), SlimefunItems.CROP_GROWTH_ACCELERATOR_2); Slimefun.registerResearch(new Research(202, "Reactor Essentials", 36), SlimefunItems.REACTOR_COOLANT_CELL, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM); @@ -246,5 +247,10 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); + Slimefun.registerResearch(new Research(250, "Pork Jerky", 2), SlimefunItems.PORK_JERKY); + Slimefun.registerResearch(new Research(251, "Chicken Jerky", 2), SlimefunItems.CHICKEN_JERKY); + Slimefun.registerResearch(new Research(252, "Mutton Jerky", 2), SlimefunItems.MUTTON_JERKY); + Slimefun.registerResearch(new Research(253, "Rabbit Jerky", 2), SlimefunItems.RABBIT_JERKY); + Slimefun.registerResearch(new Research(254, "Fish Jerky", 2), SlimefunItems.FISH_JERKY); } } From 1569f7e05e503191dfc579a4a8c638f5fe127d14 Mon Sep 17 00:00:00 2001 From: Daniel Walsh Date: Sat, 16 Nov 2019 22:06:26 +0000 Subject: [PATCH 61/80] Fix #1229 --- .../mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java index 5750f7f15..0869d07fe 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java @@ -123,7 +123,7 @@ public class Talisman extends SlimefunItem { } Talisman talisman = (Talisman) item; - if (ThreadLocalRandom.current().nextInt(100) < talisman.getChance()) { + if (ThreadLocalRandom.current().nextInt(100) > talisman.getChance()) { return false; } From 29543f4a2a11628fef9463c944b34d36ac5e8183 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sat, 16 Nov 2019 23:48:30 +0100 Subject: [PATCH 62/80] changes --- .../me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index fdb250412..d8f4cdc30 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -11,13 +11,13 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; public final class ResearchSetup { private ResearchSetup() {} - + public static void setupResearches() { Slimefun.registerResearch(new Research(0, "Walking Sticks", 1), SlimefunItems.GRANDMAS_WALKING_STICK, SlimefunItems.GRANDPAS_WALKING_STICK); Slimefun.registerResearch(new Research(1, "Portable Crafter", 1), SlimefunItems.PORTABLE_CRAFTER); Slimefun.registerResearch(new Research(2, "Fortune Cookie", 1), SlimefunItems.FORTUNE_COOKIE); Slimefun.registerResearch(new Research(4, "Portable Dustbin", 2), SlimefunItems.PORTABLE_DUSTBIN); - Slimefun.registerResearch(new Research(5, "Beef Jerky", 2), SlimefunItems.BEEF_JERKY); + Slimefun.registerResearch(new Research(5, "Beef Jerky", 2), SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); Slimefun.registerResearch(new Research(6, "Armor Crafting", 2), SlimefunItems.ARMOR_FORGE); Slimefun.registerResearch(new Research(8, "Lumps and Magic", 3), SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3); Slimefun.registerResearch(new Research(9, "Ender Backpack", 4), SlimefunItems.ENDER_BACKPACK); @@ -247,10 +247,5 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Pork Jerky", 2), SlimefunItems.PORK_JERKY); - Slimefun.registerResearch(new Research(251, "Chicken Jerky", 2), SlimefunItems.CHICKEN_JERKY); - Slimefun.registerResearch(new Research(252, "Mutton Jerky", 2), SlimefunItems.MUTTON_JERKY); - Slimefun.registerResearch(new Research(253, "Rabbit Jerky", 2), SlimefunItems.RABBIT_JERKY); - Slimefun.registerResearch(new Research(254, "Fish Jerky", 2), SlimefunItems.FISH_JERKY); } } From 152dcac0c70d85c7568599c3954d80da48cedec8 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 17 Nov 2019 11:19:37 +0100 Subject: [PATCH 63/80] fixed the changes SoSeDiK suggested/requested --- .../java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index d8f4cdc30..5c2696ccb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -214,7 +214,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(214, "Upgraded Freezer", 29), SlimefunItems.FREEZER_2); Slimefun.registerResearch(new Research(215, "Never-Ending Circle", 30), SlimefunItems.BOOSTED_URANIUM); Slimefun.registerResearch(new Research(216, "Trash", 8), SlimefunItems.TRASH_CAN); - Slimefun.registerResearch(new Research(216, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); Slimefun.registerResearch(new Research(217, "Advanced Output Node", 24), SlimefunItems.CARGO_OUTPUT_ADVANCED); Slimefun.registerResearch(new Research(218, "Carbon Press", 28), SlimefunItems.CARBON_PRESS); Slimefun.registerResearch(new Research(219, "Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY); @@ -247,5 +246,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); + Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); } } From 4b044cba165e1080bf4bbc8acc42c194280d28c3 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 17 Nov 2019 18:26:54 +0100 Subject: [PATCH 64/80] fixed suggested changes --- .../java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 5c2696ccb..77068951a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -1,6 +1,5 @@ package me.mrCookieSlime.Slimefun.Setup; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -246,6 +245,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); } } From a6129e65e912501ecd40f22ac432e8cd6cb64bb7 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 17 Nov 2019 18:45:50 +0100 Subject: [PATCH 65/80] fixed the tabs and changed jerky to jerky's crossing fingers for correct use of ' --- .../java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 77068951a..0add8672d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -16,7 +16,7 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(1, "Portable Crafter", 1), SlimefunItems.PORTABLE_CRAFTER); Slimefun.registerResearch(new Research(2, "Fortune Cookie", 1), SlimefunItems.FORTUNE_COOKIE); Slimefun.registerResearch(new Research(4, "Portable Dustbin", 2), SlimefunItems.PORTABLE_DUSTBIN); - Slimefun.registerResearch(new Research(5, "Beef Jerky", 2), SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); + Slimefun.registerResearch(new Research(5, "Jerky's", 2), SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); Slimefun.registerResearch(new Research(6, "Armor Crafting", 2), SlimefunItems.ARMOR_FORGE); Slimefun.registerResearch(new Research(8, "Lumps and Magic", 3), SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3); Slimefun.registerResearch(new Research(9, "Ender Backpack", 4), SlimefunItems.ENDER_BACKPACK); @@ -245,6 +245,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); } } From 8cb7108c273847f8ca56c7815f7a9a40daa312de Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 17 Nov 2019 18:49:06 +0100 Subject: [PATCH 66/80] reeeeeeeee sowwe --- .../java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 0add8672d..3f1e06756 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -16,7 +16,7 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(1, "Portable Crafter", 1), SlimefunItems.PORTABLE_CRAFTER); Slimefun.registerResearch(new Research(2, "Fortune Cookie", 1), SlimefunItems.FORTUNE_COOKIE); Slimefun.registerResearch(new Research(4, "Portable Dustbin", 2), SlimefunItems.PORTABLE_DUSTBIN); - Slimefun.registerResearch(new Research(5, "Jerky's", 2), SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); + Slimefun.registerResearch(new Research(5, "Jerkys", 2), SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); Slimefun.registerResearch(new Research(6, "Armor Crafting", 2), SlimefunItems.ARMOR_FORGE); Slimefun.registerResearch(new Research(8, "Lumps and Magic", 3), SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3); Slimefun.registerResearch(new Research(9, "Ender Backpack", 4), SlimefunItems.ENDER_BACKPACK); From f33218c10edb96a2d12856b914f4ae4fb2a4fe79 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 17 Nov 2019 21:29:59 +0100 Subject: [PATCH 67/80] Update ResearchSetup.java --- .../java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 3f1e06756..9a23ae67b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -245,6 +245,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); } } From b1950447d68c08d16cfefd839a0decb8fe0d8b4f Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 17 Nov 2019 21:30:39 +0100 Subject: [PATCH 68/80] Added more wiki pages to the guide --- src/main/resources/wiki.json | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/resources/wiki.json b/src/main/resources/wiki.json index f637d4fde..4f834c1c6 100644 --- a/src/main/resources/wiki.json +++ b/src/main/resources/wiki.json @@ -1,5 +1,24 @@ { "GOLD_PAN": "Gold-Pan", "SIFTED_ORE": "Sifted-Ore", - "SMELTERY": "Smeltery" -} \ No newline at end of file + "SMELTERY": "Smeltery", + "DIET_COOKIE": "Diet-Cookie", + "ENHANCED_CRAFTING_TABLE": "Enhanced-Crafting-Table", + "FORTUNE_COOKIE": "Fortune-Cookie", + "TABLE_SAW": "Table-Saw", + "APPLE_JUICE": "Juices", + "GOLDEN_APPLE_JUICE": "Juices", + "CARROT_JUICE": "Juices", + "MELON_JUICE": "Juices", + "PUMPKIN_JUICE": "Juices", + "SWEET_BERRY_JUICE": "Juices", + "MAGIC_SUGAR": "Magic-Sugar", + "MONSTER_JERKY": "Monster-Jerky", + "OUTPUT_CHEST": "Output-Chest", + "BEEF_JERKY": "Meat-Jerky", + "PORK_JERKY": "Meat-Jerky", + "CHICKEN_JERKY": "Meat-Jerky", + "MUTTON_JERKY": "Meat-Jerky", + "RABBIT_JERKY": "Meat-Jerky", + "FISH_JERKY": "Meat-Jerky" +} From 1ac713cb584e5f0261f480cac0bb56b9e7281f33 Mon Sep 17 00:00:00 2001 From: J3fftw1 <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 17 Nov 2019 21:31:10 +0100 Subject: [PATCH 69/80] Update ResearchSetup.java --- .../java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 9a23ae67b..1dc13f80e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -245,6 +245,6 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); } } From db865b85dee5428075979c6d610f7bcbfb072ac8 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 18 Nov 2019 23:46:16 +0100 Subject: [PATCH 70/80] [CI skip] Testing something --- .github/workflows/issues.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/issues.yml diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml new file mode 100644 index 000000000..ba7256fca --- /dev/null +++ b/.github/workflows/issues.yml @@ -0,0 +1,14 @@ +name: Respost - Write comment to new Issue event +on: + issues: [closed] + +jobs: + comment: + runs-on: ubuntu-latest + steps: + - uses: rytswd/respost@v0.1.0 + with: + title: Your issue has been closed! + body: "Hi, this is a test message.
Hello world..." + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From ff8275797ada0a90fe44b2e290ac41e37e4b6891 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 18 Nov 2019 23:47:19 +0100 Subject: [PATCH 71/80] [Ci skip] Another test --- .github/workflows/issues.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index ba7256fca..a2c76d1cd 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -1,6 +1,7 @@ name: Respost - Write comment to new Issue event on: - issues: [closed] + issues: + types: [closed] jobs: comment: From 3266e4c65e00e3bc10363909eb0765e5bc180e4c Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 19 Nov 2019 00:01:21 +0100 Subject: [PATCH 72/80] [CI skip] Added automated Issues responses --- .github/workflows/issues.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index a2c76d1cd..a7aa70370 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -1,4 +1,4 @@ -name: Respost - Write comment to new Issue event +name: Issue Response on: issues: types: [closed] @@ -10,6 +10,6 @@ jobs: - uses: rytswd/respost@v0.1.0 with: title: Your issue has been closed! - body: "Hi, this is a test message.
Hello world..." + body: "If your issue was closed **and not resolved** by one of our developers it may fall under one or more of these categories:

1. You did not follow our template. Please follow the Issue template to help us identify your issue more quickly.
2. You did not provide any information about your versions (We absolutely need your exact versions, \"latest\" is not helpful)
3. Your issue was already reported, it is a duplicate. Check the other open issues first before posting!
4. Your issue has already been fixed in a later version of Slimefun or CS-CoreLib, you should update.
5. You are using an outdated version of Slimefun / CS-CoreLib, again, you should update.
6. You are using an unsupported version of Minecraft. We only provide support for the latest version of Minecraft, old versions are not supported anymore.
7. You are using a \"stable\" version of Slimefun (prefixed with \"RC - \"), your issue may have been fixed in a development build, so we only accept bug reports from those.
8. You are on the wrong issue tracker. We would like to remind you that this Issue Tracker is **only for Slimefun**, to report bugs on any addons, head to the corresponding issue tracker." env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From a00cdbcfc2738841e0c2433933c4b4c52ed685b2 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 19 Nov 2019 00:05:56 +0100 Subject: [PATCH 73/80] [CI skip] Another test --- .github/workflows/issues.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index a7aa70370..81ea00030 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -10,6 +10,16 @@ jobs: - uses: rytswd/respost@v0.1.0 with: title: Your issue has been closed! - body: "If your issue was closed **and not resolved** by one of our developers it may fall under one or more of these categories:

1. You did not follow our template. Please follow the Issue template to help us identify your issue more quickly.
2. You did not provide any information about your versions (We absolutely need your exact versions, \"latest\" is not helpful)
3. Your issue was already reported, it is a duplicate. Check the other open issues first before posting!
4. Your issue has already been fixed in a later version of Slimefun or CS-CoreLib, you should update.
5. You are using an outdated version of Slimefun / CS-CoreLib, again, you should update.
6. You are using an unsupported version of Minecraft. We only provide support for the latest version of Minecraft, old versions are not supported anymore.
7. You are using a \"stable\" version of Slimefun (prefixed with \"RC - \"), your issue may have been fixed in a development build, so we only accept bug reports from those.
8. You are on the wrong issue tracker. We would like to remind you that this Issue Tracker is **only for Slimefun**, to report bugs on any addons, head to the corresponding issue tracker." + body: |- + If your issue was closed **and not resolved** by one of our developers it may fall under one or more of these categories: + + * You did not follow our template. Please follow the Issue template to help us identify your issue more quickly. + * You did not provide any information about your versions (We absolutely need your exact versions, \"latest\" is not helpful) + * Your issue was already reported, it is a duplicate. Check the other open issues first before posting! + * Your issue has already been fixed in a later version of Slimefun or CS-CoreLib, you should update. + * You are using an outdated version of Slimefun / CS-CoreLib, again, you should update. + * You are using an unsupported version of Minecraft. We only provide support for the latest version of Minecraft, old versions are not supported anymore. + * You are using a \"stable\" version of Slimefun (prefixed with \"RC - \"), your issue may have been fixed in a development build, so we only accept bug reports from those. + * You are on the wrong issue tracker. We would like to remind you that this Issue Tracker is **only for Slimefun**, to report bugs on any addons, head to the corresponding issue tracker. env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 62e67609f990c680980e22af6ad8cdb8cef730f9 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 19 Nov 2019 22:35:29 +0100 Subject: [PATCH 74/80] [Ci skip] Updated issues script --- .github/workflows/issues.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index 81ea00030..994f6048d 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -21,5 +21,7 @@ jobs: * You are using an unsupported version of Minecraft. We only provide support for the latest version of Minecraft, old versions are not supported anymore. * You are using a \"stable\" version of Slimefun (prefixed with \"RC - \"), your issue may have been fixed in a development build, so we only accept bug reports from those. * You are on the wrong issue tracker. We would like to remind you that this Issue Tracker is **only for Slimefun**, to report bugs on any addons, head to the corresponding issue tracker. + + Make sure to check out our article on [How to report bugs](https://github.com/TheBusyBiscuit/Slimefun4/wiki/How-to-report-bugs) for even more information. env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} From 8a605404c1995753cae29e38062a122f1d78b02f Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Thu, 21 Nov 2019 20:36:50 +0100 Subject: [PATCH 75/80] Added "Flint to Cobblestone" Recipe to the Compressor --- README.md | 5 +++-- .../Objects/SlimefunItem/multiblocks/Compressor.java | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7cec24502..242448579 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,9 @@ Slimefun 4 is licensed under [GNU GPLv3](https://github.com/TheBusyBiscuit/Slimefun4/blob/master/LICENSE) ## Download Slimefun 4 -Use the stable builds, if your Server is heavily reliant on Slimefun. -But please also consider using development build. If plenty of people use the development builds, then we can quickly work together on solutions for issues that arise. +Use the stable builds, if your Server is heavily reliant on Slimefun not breaking. +But please also consider using development builds. If plenty of people use the development builds, then we can quickly work together on solutions for issues that arise. +**We will NOT accept bug reports from "stable" versions, as they are basically just old development builds** [Stable Builds](https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/)
[Development Builds](https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/master/) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Compressor.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Compressor.java index 2b9bf5b78..f2359207e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Compressor.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Compressor.java @@ -28,7 +28,10 @@ public class Compressor extends MultiBlockMachine { SlimefunItems.COMPRESSOR, "COMPRESSOR", new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_BRICK_FENCE), null, new ItemStack(Material.PISTON), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)"), new ItemStack(Material.PISTON)}, - new ItemStack[] {new CustomItem(SlimefunItems.STONE_CHUNK, 4), new ItemStack(Material.COBBLESTONE)}, + new ItemStack[] { + new CustomItem(SlimefunItems.STONE_CHUNK, 4), new ItemStack(Material.COBBLESTONE), + new ItemStack(Material.FLINT, 8), new ItemStack(Material.COBBLESTONE) + }, BlockFace.SELF ); } From 7ad4d92a14e776f71e81b13b5f42b5cb0edb96c0 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 22 Nov 2019 14:57:04 +0100 Subject: [PATCH 76/80] [CI skip] Added Slimefun Guide and Recipe Types to custom item model service --- .../Slimefun/Lists/RecipeType.java | 39 +++++++++++-------- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 26 +++++++++++-- .../services/CustomTextureService.java | 2 + 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index de38cb6c9..20e2cbeff 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -6,45 +6,50 @@ import java.util.List; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.SlimefunRecipes; public class RecipeType { public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); - public static final RecipeType ARMOR_FORGE = new RecipeType(new CustomItem(Material.ANVIL, "&bArmor Forge", "", "&a&oCraft it in an Armor Forge"), "ARMOR_FORGE"); - public static final RecipeType GRIND_STONE = new RecipeType(new CustomItem(Material.DISPENSER, "&bGrind Stone", "", "&a&oGrind it using the Grind Stone"), "GRIND_STONE"); + public static final RecipeType ARMOR_FORGE = new RecipeType((SlimefunItemStack) SlimefunItems.ARMOR_FORGE, "", "&a&oCraft it in an Armor Forge"); + public static final RecipeType GRIND_STONE = new RecipeType((SlimefunItemStack) SlimefunItems.GRIND_STONE, "", "&a&oGrind it using the Grind Stone"); public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", "", "&a&oKill the specified Mob to obtain this Item")); - public static final RecipeType SMELTERY = new RecipeType(new CustomItem(Material.FURNACE, "&6Smeltery", "", "&a&oSmelt it using a Smeltery"), "SMELTERY"); - public static final RecipeType ORE_CRUSHER = new RecipeType(new CustomItem(Material.DISPENSER, "&bOre Crusher", "", "&a&oCrush it using the Ore Crusher"), "ORE_CRUSHER"); - public static final RecipeType GOLD_PAN = new RecipeType(new CustomItem(Material.BOWL, "&bGold Pan", "", "&a&oUse a Gold Pan on Gravel to obtain this Item")); - public static final RecipeType COMPRESSOR = new RecipeType(new CustomItem(Material.PISTON, "&bCompressor", "", "&a&oCompress it using the Compressor"), "COMPRESSOR"); - public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.GLASS, "&bPressure Chamber", "", "&a&oCompress it using the Pressure Chamber"), "PRESSURE_CHAMBER"); - public static final RecipeType OVEN = new RecipeType(new CustomItem(Material.FURNACE, "&bOven", "", "&a&oSmelt it in an Oven"), "OVEN"); - public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new CustomItem(Material.BOOKSHELF, "&6Magic Workbench", "", "&a&oCraft it in a Magic Workbench"), "MAGIC_WORKBENCH"); - public static final RecipeType ORE_WASHER = new RecipeType(new CustomItem(Material.CAULDRON, "&6Ore Washer", "", "&a&oWash it in an Ore Washer"), "ORE_WASHER"); - public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."), "ENHANCED_CRAFTING_TABLE"); - public static final RecipeType JUICER = new RecipeType(new CustomItem(Material.GLASS_BOTTLE, "&eJuicer", "", "&a&oUsed for Juice Creation"), "JUICER"); - public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTING_TABLE, "&4Ancient Altar", "", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual")); - public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS), "&cHeated Pressure Chamber", "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"), "HEATED_PRESSURE_CHAMBER"); + public static final RecipeType SMELTERY = new RecipeType((SlimefunItemStack) SlimefunItems.SMELTERY, "", "&a&oSmelt it using a Smeltery"); + public static final RecipeType ORE_CRUSHER = new RecipeType((SlimefunItemStack) SlimefunItems.ORE_CRUSHER, "", "&a&oCrush it using the Ore Crusher"); + public static final RecipeType GOLD_PAN = new RecipeType((SlimefunItemStack) SlimefunItems.GOLD_PAN, "", "&a&oUse a Gold Pan on Gravel to obtain this Item"); + public static final RecipeType COMPRESSOR = new RecipeType((SlimefunItemStack) SlimefunItems.COMPRESSOR, "", "&a&oCompress it using the Compressor"); + public static final RecipeType PRESSURE_CHAMBER = new RecipeType((SlimefunItemStack) SlimefunItems.PRESSURE_CHAMBER, "", "&a&oCompress it using the Pressure Chamber"); + public static final RecipeType MAGIC_WORKBENCH = new RecipeType((SlimefunItemStack) SlimefunItems.MAGIC_WORKBENCH, "", "&a&oCraft it in a Magic Workbench"); + public static final RecipeType ORE_WASHER = new RecipeType((SlimefunItemStack) SlimefunItems.ORE_WASHER, "", "&a&oWash it in an Ore Washer"); + public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType((SlimefunItemStack) SlimefunItems.ENHANCED_CRAFTING_TABLE, "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."); + public static final RecipeType JUICER = new RecipeType((SlimefunItemStack) SlimefunItems.JUICER, "", "&a&oUsed for Juice Creation"); + public static final RecipeType ANCIENT_ALTAR = new RecipeType((SlimefunItemStack) SlimefunItems.ANCIENT_ALTAR, "", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"); + public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType((SlimefunItemStack) SlimefunItems.HEATED_PRESSURE_CHAMBER, "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"); public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", "", "&a&oJust a standard Recipe in the Workbench...")); public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", "", "&a&oJust a standard Recipe in the Workbench...")); public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", "", "&a&oJust smelt it in a regular Furnace")); public static final RecipeType NULL = new RecipeType((ItemStack) null); - private ItemStack item; - private String machine; + private final ItemStack item; + private final String machine; public RecipeType(ItemStack item, String machine) { this.item = item; this.machine = machine; } + public RecipeType(SlimefunItemStack slimefunItem, String... lore) { + this.item = new CustomItem(slimefunItem, null, lore); + this.machine = slimefunItem.getItemID(); + } + public RecipeType(ItemStack item) { this(item, ""); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 05a506952..670ec32e2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -1,6 +1,8 @@ package me.mrCookieSlime.Slimefun; import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.logging.Level; @@ -10,6 +12,7 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; @@ -46,18 +49,33 @@ public final class SlimefunGuide { public static ItemStack getItem() { return getItem(SlimefunGuideLayout.CHEST); } - + public static ItemStack getItem(SlimefunGuideLayout design) { + ItemStack item = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta meta = item.getItemMeta(); + List lore = new LinkedList<>(); + lore.addAll(Arrays.asList("&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits")); + switch (design) { case BOOK: - return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&aSlimefun Guide &7(Book GUI)", "", "&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits"); + meta.setDisplayName("&aSlimefun Guide &7(Book GUI)"); + break; case CHEAT_SHEET: - return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&cSlimefun Guide &4(Cheat Sheet)", "", "&4&lOnly openable by Admins", "", "&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits"); + meta.setDisplayName("&cSlimefun Guide &4(Cheat Sheet)"); + lore.add(0, "&4&lOnly openable by Admins"); + lore.add(0, ""); + break; case CHEST: - return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&aSlimefun Guide &7(Chest GUI)", "", "&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits"); + meta.setDisplayName("&aSlimefun Guide &7(Chest GUI)"); + break; default: return null; } + + meta.setLore(lore); + SlimefunPlugin.getItemTextureService().setTexture(meta, "SLIMEFUN_GUIDE"); + item.setItemMeta(meta); + return item; } @Deprecated diff --git a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java index d7375dd56..57b4b6a64 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/services/CustomTextureService.java @@ -18,6 +18,8 @@ public class CustomTextureService { } public void setup(Collection items) { + config.setDefaultValue("SLIMEFUN_GUIDE", 0); + for (SlimefunItem item : items) { if (item != null && item.getID() != null) { config.setDefaultValue(item.getID(), 0); From 0a44fa567134481dd6e830f99b99b31f552d82c4 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 24 Nov 2019 13:23:16 +0100 Subject: [PATCH 77/80] Revamped Guide Settings Menu --- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 189 ++------------ .../Slimefun/SlimefunPlugin.java | 32 ++- .../Slimefun/guides/ChestSlimefunGuide.java | 6 +- .../Slimefun/guides/GuideSettings.java | 233 ++++++++++++++++++ .../hooks/github/ContributionsConnector.java | 66 +++++ .../Slimefun/hooks/github/Contributor.java | 81 +++--- .../hooks/github/GitHubConnector.java | 5 +- .../Slimefun/hooks/github/GitHubSetup.java | 100 +------- .../Slimefun/listeners/ItemListener.java | 7 +- .../Slimefun/utils/ChatUtils.java | 18 ++ .../Slimefun/utils/Utilities.java | 5 +- 11 files changed, 428 insertions(+), 314 deletions(-) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/hooks/github/ContributionsConnector.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/utils/ChatUtils.java diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 670ec32e2..95bd81c31 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -5,20 +5,14 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.logging.Level; -import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; -import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; +import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; 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.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; @@ -28,8 +22,6 @@ import me.mrCookieSlime.Slimefun.guides.BookSlimefunGuide; import me.mrCookieSlime.Slimefun.guides.ChestSlimefunGuide; import me.mrCookieSlime.Slimefun.guides.ISlimefunGuide; import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; -import me.mrCookieSlime.Slimefun.hooks.github.Contributor; -import me.mrCookieSlime.Slimefun.hooks.github.IntegerFormat; public final class SlimefunGuide { @@ -42,9 +34,7 @@ public final class SlimefunGuide { layouts.put(SlimefunGuideLayout.CHEAT_SHEET, chestGuide); layouts.put(SlimefunGuideLayout.BOOK, new BookSlimefunGuide()); } - - 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); @@ -54,19 +44,19 @@ public final class SlimefunGuide { ItemStack item = new ItemStack(Material.ENCHANTED_BOOK); ItemMeta meta = item.getItemMeta(); List lore = new LinkedList<>(); - lore.addAll(Arrays.asList("&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits")); + lore.addAll(Arrays.asList("", ChatColors.color("&eRight Click &8\u21E8 &7Browse Items"), ChatColors.color("&eShift + Right Click &8\u21E8 &7Open Settings / Credits"))); switch (design) { case BOOK: - meta.setDisplayName("&aSlimefun Guide &7(Book GUI)"); + meta.setDisplayName(ChatColors.color("&aSlimefun Guide &7(Book GUI)")); break; case CHEAT_SHEET: - meta.setDisplayName("&cSlimefun Guide &4(Cheat Sheet)"); - lore.add(0, "&4&lOnly openable by Admins"); + meta.setDisplayName(ChatColors.color("&cSlimefun Guide &4(Cheat Sheet)")); + lore.add(0, ChatColors.color("&4&lOnly openable by Admins")); lore.add(0, ""); break; case CHEST: - meta.setDisplayName("&aSlimefun Guide &7(Chest GUI)"); + meta.setDisplayName(ChatColors.color("&aSlimefun Guide &7(Chest GUI)")); break; default: return null; @@ -88,159 +78,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"); } - public static void openSettings(Player p, final ItemStack guide) { - final ChestMenu menu = new ChestMenu("Settings / Info"); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler( - pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F) - ); - - for (int i: SLOTS) { - menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); - } - - - if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEST), true)) { - if (p.hasPermission("slimefun.cheat.items")) { - menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "&7Cheat Sheet", "", "&e Click &8\u21E8 &7Change Layout")); - menu.addMenuClickHandler(19, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - else { - menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "", "&e Click &8\u21E8 &7Change Layout")); - menu.addMenuClickHandler(19, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - } - else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.BOOK), true)) { - if (p.hasPermission("slimefun.cheat.items")) { - menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "&7Cheat Sheet", "", "&e Click &8\u21E8 &7Change Layout")); - menu.addMenuClickHandler(19, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEAT_SHEET)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - else { - menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "", "&e Click &8\u21E8 &7Change Layout")); - menu.addMenuClickHandler(19, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - } - else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { - menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eCheat Sheet", "", "&7Chest GUI", "&7Book GUI", "&aCheat Sheet", "", "&e Click &8\u21E8 &7Change Layout")); - menu.addMenuClickHandler(19, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - - menu.addItem(1, new CustomItem(new ItemStack(Material.WRITABLE_BOOK), "&aCredits", "", "&7Version: &a" + Slimefun.getVersion(), "&7Installed Addons: &b" + Slimefun.getInstalledAddons().size(), "&7Contributors: &e" + SlimefunPlugin.getUtilities().contributors.size(), "", "&7\u21E8 Click to see the people behind this Plugin")); - menu.addMenuClickHandler(1, (pl, slot, item, action) -> { - openCredits(pl, guide); - return false; - }); - - try { - menu.addItem(4, new CustomItem(new ItemStack(Material.COMPARATOR), "&eSource Code", "", "&7Bytes of Code: &6" + IntegerFormat.formatBigNumber(SlimefunPlugin.getUtilities().codeBytes), "&7Last Update: &a" + IntegerFormat.timeDelta(SlimefunPlugin.getUtilities().lastUpdate) + " ago", "&7Forks: &e" + SlimefunPlugin.getUtilities().forks, "&7Stars: &e" + SlimefunPlugin.getUtilities().stars, "", "&7&oSlimefun 4 is a community project,", "&7&othe source code is available on GitHub", "&7&oand if you want to keep this Plugin alive,", "&7&othen please consider contributing to it", "", "&7\u21E8 Click to go to GitHub")); - menu.addMenuClickHandler(4, (pl, slot, item, action) -> { - pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&ohttps://github.com/TheBusyBiscuit/Slimefun4")); - pl.sendMessage(""); - return false; - }); - } catch (Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Info-Panel for Slimefun " + Slimefun.getVersion(), x); - } - - menu.addItem(7, new CustomItem(new ItemStack(Material.REDSTONE), "&4Bug Tracker", "", "&7Open Issues: &a" + SlimefunPlugin.getUtilities().issues, "&7Pending Pull Requests: &a" + SlimefunPlugin.getUtilities().prs, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker")); - menu.addMenuClickHandler(7, (pl, slot, item, action) -> { - pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&ohttps://github.com/TheBusyBiscuit/Slimefun4/issues")); - pl.sendMessage(""); - return false; - }); - - menu.open(p); - } - - private static void openCredits(Player p, final ItemStack guide) { - 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)); - - 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); - } - else { - menu.addItem(4, new CustomItem(new ItemStack(Material.EMERALD), "&7\u21E6 Back to Settings")); - menu.addMenuClickHandler(4, (pl, slot, item, action) -> { - openSettings(pl, guide); - return false; - }); - } - } - - int index = 9; - 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); - - try { - String texture = contributor.getTexture(); - if (texture != null) skull = CustomSkull.getItem(texture); - } catch (Exception x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while fetching a Contributor Head for Slimefun " + Slimefun.getVersion(), x); - } - - SkullMeta meta = (SkullMeta) skull.getItemMeta(); - meta.setDisplayName(ChatColor.GOLD + contributor.getName()); - - if (contributor.getCommits() > 0) { - double percentage = DoubleHandler.fixDouble((contributor.getCommits() * 100.0) / total, 2); - meta.setLore(Arrays.asList("", ChatColor.translateAlternateColorCodes('&', "&7Role: &r" + contributor.getJob()), ChatColor.translateAlternateColorCodes('&', "&7Contributions: &r" + contributor.getCommits() + " commits &7(&r" + percentage + "%&7)"), "", ChatColor.translateAlternateColorCodes('&', "&7\u21E8 Click to view my GitHub profile"))); - } - else { - meta.setLore(Arrays.asList("", ChatColor.translateAlternateColorCodes('&', "&7Role: &r" + contributor.getJob()))); - } - - skull.setItemMeta(meta); - - menu.addItem(index, skull); - menu.addMenuClickHandler(index, (pl, slot, item, action) -> { - if (contributor.getCommits() > 0) { - pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + contributor.getProfile())); - pl.sendMessage(""); - } - return false; - }); - - index++; - } - - menu.open(p); - } - public static void openCheatMenu(Player p) { openMainMenuAsync(p, false, SlimefunGuideLayout.CHEAT_SHEET, 1); } @@ -250,6 +87,18 @@ public final class SlimefunGuide { openGuide(p, book ? SlimefunGuideLayout.BOOK: SlimefunGuideLayout.CHEST); } + public static void openGuide(Player p, ItemStack guide) { + if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEST), true)) { + openGuide(p, SlimefunGuideLayout.CHEST); + } + else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.BOOK), true)) { + openGuide(p, SlimefunGuideLayout.BOOK); + } + else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { + openGuide(p, SlimefunGuideLayout.CHEAT_SHEET); + } + } + public static void openGuide(Player p, SlimefunGuideLayout layout) { if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return; if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 8965a0327..770617a73 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -1,6 +1,8 @@ package me.mrCookieSlime.Slimefun; import java.io.File; +import java.util.Optional; +import java.util.UUID; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -9,6 +11,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import io.github.thebusybiscuit.cscorelib2.players.MinecraftAccount; +import io.github.thebusybiscuit.cscorelib2.players.MinecraftAccount.TooManyRequestsException; import io.github.thebusybiscuit.cscorelib2.protection.ProtectionManager; import io.github.thebusybiscuit.cscorelib2.recipes.RecipeSnapshot; import io.github.thebusybiscuit.cscorelib2.reflection.ReflectionUtils; @@ -48,6 +52,7 @@ import me.mrCookieSlime.Slimefun.autosave.PlayerAutoSaver; import me.mrCookieSlime.Slimefun.commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.commands.SlimefunTabCompleter; import me.mrCookieSlime.Slimefun.hooks.SlimefunHooks; +import me.mrCookieSlime.Slimefun.hooks.github.Contributor; import me.mrCookieSlime.Slimefun.hooks.github.GitHubConnector; import me.mrCookieSlime.Slimefun.hooks.github.GitHubSetup; import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener; @@ -295,13 +300,36 @@ public final class SlimefunPlugin extends JavaPlugin { try { ticker.run(); } - catch(Throwable x) { + catch(Exception x) { getLogger().log(Level.SEVERE, "An Exception was caught while ticking the Block Tickers Task for Slimefun v" + Slimefun.getVersion(), x); ticker.abortTick(); } }, 100L, config.getInt("URID.custom-ticker-delay")); - getServer().getScheduler().runTaskTimerAsynchronously(this, () -> utilities.connectors.forEach(GitHubConnector::pullFile), 80L, 60 * 60 * 20L); + getServer().getScheduler().runTaskTimerAsynchronously(this, () -> { + utilities.connectors.forEach(GitHubConnector::pullFile); + + for (Contributor contributor: utilities.contributors.values()) { + if (!contributor.hasTexture()) { + String name = contributor.getName(); + + try { + Optional uuid = MinecraftAccount.getUUID(name); + + if (uuid.isPresent()) { + Optional skin = MinecraftAccount.getSkin(uuid.get()); + contributor.setTexture(skin); + } + else { + contributor.setTexture(Optional.empty()); + } + } + catch(TooManyRequestsException x) { + break; + } + } + } + }, 80L, 60 * 60 * 20L); // Hooray! getLogger().log(Level.INFO, "Finished!"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java index 724250924..6e7ee9e5b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/ChestSlimefunGuide.java @@ -529,14 +529,14 @@ public class ChestSlimefunGuide implements ISlimefunGuide { menu.addMenuClickHandler(i, (pl, s, itemstack, action) -> false); } - /* // Settings Panel - menu.addItem(1, new CustomItem(Material.ENCHANTED_BOOK, "&eSettings / Info", "", "&7\u21E8 Click to see more")); + menu.addItem(1, new CustomItem(SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), "&eSettings / Info", "", "&7\u21E8 Click to see more")); menu.addMenuClickHandler(1, (player, i, itemStack, clickAction) -> { - SlimefunGuide.openSettings(player, getItem()); + GuideSettings.openSettings(player, player.getInventory().getItemInMainHand()); return false; }); + /* // Stats menu.addItem(4, new CustomItem(SkullItem.fromPlayer(p), "&7Player Stats: &e" + p.getName(), "", "&7Progress: &a" + Math.round(((profile.getResearches().size() * 100.0F) / Research.list().size()) * 100.0F) / 100.0F + "% &e(" + profile.getResearches().size() + " / " + Research.list().size() + ")", "", "&7\u21E8 Click for a full summary")); menu.addMenuClickHandler(4, (player, i, itemStack, clickAction) -> { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java new file mode 100644 index 000000000..e11fe5849 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java @@ -0,0 +1,233 @@ +package me.mrCookieSlime.Slimefun.guides; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; +import me.mrCookieSlime.Slimefun.SlimefunGuide; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.hooks.github.Contributor; +import me.mrCookieSlime.Slimefun.hooks.github.IntegerFormat; +import me.mrCookieSlime.Slimefun.utils.ChatUtils; + +public final class GuideSettings { + + private static final int[] SLOTS = new int[] {0, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35}; + + private GuideSettings() {} + + public static void openSettings(Player p, final ItemStack guide) { + final ChestMenu menu = new ChestMenu("Settings / Info"); + + menu.setEmptySlotsClickable(false); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); + + menu.addItem(1, new CustomItem(getItem(SlimefunGuideLayout.CHEST), "&e\u21E6 Back", "", "&7Go back to your Slimefun Guide")); + menu.addMenuClickHandler(1, (pl, slot, item, action) -> { + SlimefunGuide.openGuide(pl, guide); + return false; + }); + + for (int i: SLOTS) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); + } + + if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEST), true)) { + if (p.hasPermission("slimefun.cheat.items")) { + menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "&7Cheat Sheet", "", "&e Click &8\u21E8 &7Change Layout")); + menu.addMenuClickHandler(19, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + else { + menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "", "&e Click &8\u21E8 &7Change Layout")); + menu.addMenuClickHandler(19, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + } + else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.BOOK), true)) { + if (p.hasPermission("slimefun.cheat.items")) { + menu.addItem(19, new CustomItem(new ItemStack(Material.BOOK), "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "&7Cheat Sheet", "", "&e Click &8\u21E8 &7Change Layout")); + menu.addMenuClickHandler(19, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEAT_SHEET)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + else { + menu.addItem(19, new CustomItem(new ItemStack(Material.BOOK), "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "", "&e Click &8\u21E8 &7Change Layout")); + menu.addMenuClickHandler(19, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + } + else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { + menu.addItem(19, new CustomItem(new ItemStack(Material.COMMAND_BLOCK), "&7Guide Layout: &eCheat Sheet", "", "&7Chest GUI", "&7Book GUI", "&aCheat Sheet", "", "&e Click &8\u21E8 &7Change Layout")); + menu.addMenuClickHandler(19, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + + menu.addItem(3, new CustomItem(new ItemStack(Material.WRITABLE_BOOK), "&aCredits", "", "&7Version: &a" + Slimefun.getVersion(), "&7Installed Addons: &b" + Slimefun.getInstalledAddons().size(), "&7Contributors: &e" + SlimefunPlugin.getUtilities().contributors.size(), "", "&7\u21E8 Click to see the people behind this Plugin")); + menu.addMenuClickHandler(3, (pl, slot, item, action) -> { + openCredits(pl, 0); + return false; + }); + + try { + menu.addItem(5, new CustomItem(new ItemStack(Material.COMPARATOR), "&eSource Code", "", "&7Bytes of Code: &6" + IntegerFormat.formatBigNumber(SlimefunPlugin.getUtilities().codeBytes), "&7Last Update: &a" + IntegerFormat.timeDelta(SlimefunPlugin.getUtilities().lastUpdate) + " ago", "&7Forks: &e" + SlimefunPlugin.getUtilities().forks, "&7Stars: &e" + SlimefunPlugin.getUtilities().stars, "", "&7&oSlimefun 4 is a community project,", "&7&othe source code is available on GitHub", "&7&oand if you want to keep this Plugin alive,", "&7&othen please consider contributing to it", "", "&7\u21E8 Click to go to GitHub")); + menu.addMenuClickHandler(5, (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4"); + return false; + }); + } catch (Exception x) { + Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Info-Panel for Slimefun " + Slimefun.getVersion(), x); + } + + menu.addItem(7, new CustomItem(new ItemStack(Material.KNOWLEDGE_BOOK), "&3Slimefun Wiki", "", "&7Do you need help with an Item or machine?", "&7You cannot figure out what to do?", "&7Check out our community-maintained Wiki", "&7and become one of our Editors!", "", "&7\u21E8 Click to go to the official Slimefun Wiki")); + menu.addMenuClickHandler(7, (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki"); + return false; + }); + + menu.addItem(20, new CustomItem(new ItemStack(Material.REDSTONE), "&4Report a bug", "", "&7Open Issues: &a" + SlimefunPlugin.getUtilities().issues, "&7Pending Pull Requests: &a" + SlimefunPlugin.getUtilities().prs, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker")); + menu.addMenuClickHandler(20, (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/issues"); + return false; + }); + + // TODO: Resourcepack Install Button + + menu.open(p); + } + + private static void openCredits(Player p, int page) { + 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)); + + for (int i = 0; i < 9; i++) { + if (i != 1) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); + } + else { + menu.addItem(1, new CustomItem(getItem(SlimefunGuideLayout.CHEST), "&e\u21E6 Back", "", "&7Go back to the Settings Panel")); + menu.addMenuClickHandler(1, (pl, slot, item, action) -> { + openSettings(pl, p.getInventory().getItemInMainHand()); + return false; + }); + } + } + + for (int i = 45; i < 54; i++) { + if (i != 46 && i != 52) { + menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " ")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> false); + } + } + + List contributors = new ArrayList<>(SlimefunPlugin.getUtilities().contributors.values()); + contributors.sort(Comparator.comparingInt(Contributor::index)); + + boolean hasPrevious = page > 0; + boolean hasNext = false; + + for (int i = page * 36; i < contributors.size(); i++) { + if (i >= (page + 1) * 36) { + hasNext = true; + break; + } + + Contributor contributor = contributors.get(i); + ItemStack skull = new ItemStack(Material.PLAYER_HEAD); + + try { + skull = CustomSkull.getItem(contributor.getTexture()); + } catch (Exception e) { + Slimefun.getLogger().log(Level.SEVERE, "An Error occured while inserting a Contributors head.", e); + } + + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setDisplayName(ChatColor.GRAY + contributor.getName()); + + List lore = new LinkedList<>(); + lore.add(""); + + for (Map.Entry entry: contributor.getContributions().entrySet()) { + lore.add(ChatColors.color(entry.getKey() + " &7(" + entry.getValue() + " Commit" + (entry.getValue() > 1 ? "s": "") + ")")); + } + + meta.setLore(lore); + skull.setItemMeta(meta); + + menu.addItem(i + 9, skull); + menu.addMenuClickHandler(i + 9, (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, contributor.getProfile()); + return false; + }); + } + + if (hasPrevious) { + menu.addItem(46, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&e<- Previous")); + menu.addMenuClickHandler(46, (pl, slot, item, action) -> { + openCredits(pl, page - 1); + return false; + }); + } + else { + menu.addItem(46, new CustomItem(Material.BLACK_STAINED_GLASS_PANE, " ")); + menu.addMenuClickHandler(46, (pl, slot, item, action) -> false); + } + + if (hasNext) { + menu.addItem(52, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&e<- Previous")); + menu.addMenuClickHandler(52, (pl, slot, item, action) -> { + openCredits(pl, page + 1); + return false; + }); + } + else { + menu.addItem(52, new CustomItem(Material.BLACK_STAINED_GLASS_PANE, " ")); + menu.addMenuClickHandler(52, (pl, slot, item, action) -> false); + } + + menu.open(p); + } + + private static ItemStack getItem(SlimefunGuideLayout layout) { + return SlimefunGuide.getItem(layout); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/ContributionsConnector.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/ContributionsConnector.java new file mode 100644 index 000000000..89631716d --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/ContributionsConnector.java @@ -0,0 +1,66 @@ +package me.mrCookieSlime.Slimefun.hooks.github; + +import java.util.Arrays; +import java.util.List; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; + +public class ContributionsConnector extends GitHubConnector { + + // GitHub Bots that do not count as Contributors + // (includes "invalid-email-address" because it is an invalid contributor) + private static final List blacklist = Arrays.asList( + "invalid-email-address", + "renovate-bot", + "ImgBotApp" + ); + + private final String prefix; + private final String repository; + private final String role; + + public ContributionsConnector(String prefix, String repository, String role) { + this.prefix = prefix; + this.repository = repository; + this.role = role; + } + + @Override + public void onSuccess(JsonElement element) { + computeContributors(element.getAsJsonArray()); + } + + @Override + public String getRepository() { + return repository; + } + + @Override + public String getFileName() { + return prefix + "_contributors"; + } + + @Override + public String getURLSuffix() { + return "/contributors"; + } + + private void computeContributors(JsonArray array) { + for (int i = 0; i < array.size(); i++) { + JsonObject object = array.get(i).getAsJsonObject(); + + String name = object.get("login").getAsString(); + int commits = object.get("contributions").getAsInt(); + String profile = object.get("html_url").getAsString(); + + if (!blacklist.contains(name)) { + Contributor contributor = SlimefunPlugin.getUtilities().contributors.computeIfAbsent(name, key -> new Contributor(name, profile)); + contributor.setContribution(role, commits); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/Contributor.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/Contributor.java index c165ce4eb..b32a9cd4f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/Contributor.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/Contributor.java @@ -1,6 +1,9 @@ package me.mrCookieSlime.Slimefun.hooks.github; -import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; /** * Represents a contributor on Slimefun4's GitHub repository. @@ -9,15 +12,20 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; */ public class Contributor { + private static final String PLACEHOLDER_HEAD = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDZiYTYzMzQ0ZjQ5ZGQxYzRmNTQ4OGU5MjZiZjNkOWUyYjI5OTE2YTZjNTBkNjEwYmI0MGE1MjczZGM4YzgyIn19fQ=="; + private String name; - private String job; private String profile; - private int commits; + private Optional headTexture; + private final ConcurrentMap contributions = new ConcurrentHashMap<>(); - public Contributor(String name, String job, int commits) { + public Contributor(String name, String profile) { this.name = name; - this.job = job; - this.commits = commits; + this.profile = profile; + } + + public void setContribution(String role, int commits) { + contributions.put(role, commits); } /** @@ -26,16 +34,9 @@ public class Contributor { * @return the name of this contributor * @since 4.1.13 */ - public String getName() { return this.name; } - - /** - * Returns the job of this contributor. - * It can be {@code Author} or {@code Head Artist}. - * - * @return the job of this contributor - * @since 4.1.13 - */ - public String getJob() { return this.job; } + public String getName() { + return this.name; + } /** * Returns the link to the GitHub profile of this contributor. @@ -43,25 +44,12 @@ public class Contributor { * @return the GitHub profile of this contributor. * @since 4.1.13 */ - public String getProfile() { return this.profile; } - - /** - * Returns the number of commits to the Slimefun4's repository of this contributor. - * - * @return the number of commits of this contributor. - * @since 4.1.13 - */ - public int getCommits() { return this.commits; } - - /** - * Sets the link to the GitHub profile of this contributor. - * - * @param profile the link to the GitHub profile of this contributor - * - * @since 4.1.13 - */ - protected void setProfile(String profile) { - this.profile = profile; + public String getProfile() { + return this.profile; + } + + public Map getContributions() { + return contributions; } /** @@ -69,6 +57,27 @@ public class Contributor { * @return A Base64-Head Texture */ public String getTexture() { - return SlimefunPlugin.getUtilities().contributorHeads.get(name); + if (headTexture == null || !headTexture.isPresent()) { + return PLACEHOLDER_HEAD; + } + else { + return headTexture.get(); + } + } + + public boolean hasTexture() { + return headTexture != null; + } + + public void setTexture(Optional skin) { + headTexture = skin; + } + + public int getTotalContributions() { + return contributions.values().stream().mapToInt(Integer::intValue).sum(); + } + + public int index() { + return -getTotalContributions(); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubConnector.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubConnector.java index ea760b4f6..21b25d33a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubConnector.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubConnector.java @@ -30,7 +30,10 @@ public abstract class GitHubConnector { public abstract String getRepository(); public abstract String getURLSuffix(); public abstract void onSuccess(JsonElement element); - public abstract void onFailure(); + + public void onFailure() { + // Don't do anything by default + } public void pullFile() { if (SlimefunPlugin.getCfg().getBoolean("options.print-out-github-data-retrieving")) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java index c8c59125d..39a479778 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/github/GitHubSetup.java @@ -1,13 +1,8 @@ package me.mrCookieSlime.Slimefun.hooks.github; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; - import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import me.mrCookieSlime.Slimefun.SlimefunPlugin; @@ -15,85 +10,12 @@ public final class GitHubSetup { private static final String REPOSITORY = "TheBusyBiscuit/Slimefun4"; - private static final String ROLE_AUTHOR = "&cAuthor"; - private GitHubSetup() {} public static void setup() { - new GitHubConnector() { - - @Override - public void onSuccess(JsonElement element) { - SlimefunPlugin.getUtilities().contributors.clear(); - JsonArray array = element.getAsJsonArray(); - - for (int i = 0; i < array.size(); i++) { - JsonObject object = array.get(i).getAsJsonObject(); - - String name = object.get("login").getAsString(); - int commits = object.get("contributions").getAsInt(); - String profile = object.get("html_url").getAsString(); - - if (!name.equals("invalid-email-address")) { - Contributor contributor = new Contributor(name, ROLE_AUTHOR, commits); - contributor.setProfile(profile); - SlimefunPlugin.getUtilities().contributors.add(contributor); - } - } - SlimefunPlugin.getUtilities().contributors.add(new Contributor("AquaLazuryt", "&6Lead Head Artist", 0)); - - SlimefunPlugin.instance.getServer().getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> { - for (JsonElement e: array) { - String name = e.getAsJsonObject().get("login").getAsString(); - - if (SlimefunPlugin.getUtilities().contributorHeads.containsKey(name)) { - continue; - } - - try (InputStreamReader profileReader = new InputStreamReader(new URL("https://api.mojang.com/users/profiles/minecraft/" + name).openStream())) { - String uuid = new JsonParser().parse(profileReader).getAsJsonObject().get("id").getAsString(); - - try (InputStreamReader sessionReader = new InputStreamReader(new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false").openStream())) { - JsonArray properties = new JsonParser().parse(sessionReader).getAsJsonObject().get("properties").getAsJsonArray(); - - for (JsonElement el: properties) { - if (el.isJsonObject() && el.getAsJsonObject().get("name").getAsString().equals("textures")) { - SlimefunPlugin.getUtilities().contributorHeads.put(name, el.getAsJsonObject().get("value").getAsString()); - break; - } - } - } - } catch (IOException | IllegalStateException x) { - if (SlimefunPlugin.isActive()) { - SlimefunPlugin.getUtilities().contributorHeads.put(name, null); - } - } - } - }); - } - - @Override - public void onFailure() { - SlimefunPlugin.getUtilities().contributors.clear(); - SlimefunPlugin.getUtilities().contributors.add(new Contributor("TheBusyBiscuit", ROLE_AUTHOR, 1)); - SlimefunPlugin.getUtilities().contributors.add(new Contributor("AquaLazuryt", "&6Lead Head Artist", 0)); - } - - @Override - public String getRepository() { - return REPOSITORY; - } - - @Override - public String getFileName() { - return "contributors"; - } - - @Override - public String getURLSuffix() { - return "/contributors"; - } - }; + new ContributionsConnector("code", REPOSITORY, "&6Developer"); + new ContributionsConnector("wiki", "TheBusyBiscuit/Slimefun4-wiki", "&3Wiki Editor"); + new ContributionsConnector("resourcepack", "TheBusyBiscuit/Slimefun4-Resourcepack", "&cResourcepack Artist"); new GitHubConnector() { @@ -105,11 +27,6 @@ public final class GitHubSetup { SlimefunPlugin.getUtilities().lastUpdate = IntegerFormat.parseGitHubDate(object.get("pushed_at").getAsString()); } - @Override - public void onFailure() { - // We don't have to do anything on failure - } - @Override public String getRepository() { return REPOSITORY; @@ -145,11 +62,6 @@ public final class GitHubSetup { SlimefunPlugin.getUtilities().prs = prs; } - @Override - public void onFailure() { - // We don't have to do anything on failure - } - @Override public String getRepository() { return REPOSITORY; @@ -174,11 +86,6 @@ public final class GitHubSetup { SlimefunPlugin.getUtilities().codeBytes = object.get("Java").getAsInt(); } - @Override - public void onFailure() { - // We don't have to do anything on failure - } - @Override public String getRepository() { return REPOSITORY; @@ -195,5 +102,4 @@ public final class GitHubSetup { } }; } - } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 490f97a15..85fd8eba8 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -58,6 +58,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; +import me.mrCookieSlime.Slimefun.guides.GuideSettings; import me.mrCookieSlime.Slimefun.guides.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.utils.Utilities; @@ -211,15 +212,15 @@ public class ItemListener implements Listener { ItemStack item = e.getItem(); if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { - if (p.isSneaking()) SlimefunGuide.openSettings(p, item); + if (p.isSneaking()) GuideSettings.openSettings(p, item); else SlimefunGuide.openGuide(p, SlimefunGuideLayout.BOOK); } else if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true)) { - if (p.isSneaking()) SlimefunGuide.openSettings(p, item); + if (p.isSneaking()) GuideSettings.openSettings(p, item); else SlimefunGuide.openGuide(p, SlimefunGuideLayout.CHEST); } else if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { - if (p.isSneaking()) SlimefunGuide.openSettings(p, item); + if (p.isSneaking()) GuideSettings.openSettings(p, item); else p.chat("/sf cheat"); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/utils/ChatUtils.java b/src/main/java/me/mrCookieSlime/Slimefun/utils/ChatUtils.java new file mode 100644 index 000000000..c766f7530 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/utils/ChatUtils.java @@ -0,0 +1,18 @@ +package me.mrCookieSlime.Slimefun.utils; + +import org.bukkit.entity.Player; + +import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; + +public final class ChatUtils { + + private ChatUtils() {} + + public static void sendURL(Player p, String url) { + p.sendMessage(""); + p.sendMessage(ChatColors.color("&7&oClick here:")); + p.sendMessage(ChatColors.color("&7&o" + url)); + p.sendMessage(""); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java index d30b710bf..bdb3b3c25 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -10,6 +10,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -127,8 +129,7 @@ public final class Utilities { public final Map resource_configs = new HashMap<>(); public final Set connectors = new HashSet<>(); - public final Map contributorHeads = new HashMap<>(); - public final List contributors = new ArrayList<>(); + public final ConcurrentMap contributors = new ConcurrentHashMap<>(); public final List cargoTransportEvents = new ArrayList<>(); From 1f9cbc0b1322a1432ce2611b69bfd71481a98a38 Mon Sep 17 00:00:00 2001 From: Niek Wilting Date: Sun, 24 Nov 2019 14:11:34 +0100 Subject: [PATCH 78/80] Fixed the getTitle method. --- .../java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java b/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java index 36ba9cee6..c6cbe11b7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/PlayerProfile.java @@ -185,9 +185,10 @@ public final class PlayerProfile { public String getTitle() { List titles = SlimefunPlugin.getSettings().researchesTitles; - - int index = Math.round(Float.valueOf(String.valueOf(Math.round(((researches.size() * 100.0F) / Research.list().size()) * 100.0F) / 100.0F)) / 100.0F) * titles.size(); - if (index > 0) index--; + + float fraction = (float) researches.size() / Research.list().size(); + int index = (int) (fraction * (titles.size() -1)); + return titles.get(index); } From c9bd5840e0d8343b84578a52de45ddd2cd69dd16 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 26 Nov 2019 00:39:54 +0100 Subject: [PATCH 79/80] Added Nether Gold Pan --- .../Slimefun/Lists/SlimefunItems.java | 3 +- .../Objects/SlimefunItem/items/GoldPan.java | 10 +- .../SlimefunItem/items/NetherGoldPan.java | 94 +++++++++++++++++++ .../multiblocks/AutomatedPanningMachine.java | 67 ++++++++++--- .../Slimefun/Setup/ResearchSetup.java | 3 +- .../Slimefun/Setup/SlimefunSetup.java | 8 +- 6 files changed, 162 insertions(+), 23 deletions(-) create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index f4c201bc3..d6f614db2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -43,6 +43,7 @@ public final class SlimefunItems { /* Gadgets */ public static final ItemStack GOLD_PAN = new SlimefunItemStack("GOLD_PAN", Material.BOWL, "&6Gold Pan", "&a&oCan get you all kinds of Goodies...", "", "&7&eRight Click&7 to pan various Stuff out of Gravel"); + public static final ItemStack NETHER_GOLD_PAN = new SlimefunItemStack("NETHER_GOLD_PAN", Material.BOWL, "&4Nether Gold Pan", "", "&7&eRight Click&7 to pan various stuff out of Soul Sand"); public static final ItemStack PARACHUTE = new SlimefunItemStack("PARACHUTE", Material.LEATHER_CHESTPLATE, Color.WHITE, "&r&lParachute", "", "&7Hold &eShift&7 to use"); public static final ItemStack GRAPPLING_HOOK = new SlimefunItemStack("GRAPPLING_HOOK", Material.LEAD, "&6Grappling Hook", "", "&7&eRight Click&7 to use"); public static final ItemStack SOLAR_HELMET = new SlimefunItemStack("SOLAR_HELMET", Material.IRON_HELMET, "&bSolar Helmet", "", "&a&oCharges held Items and Armor"); @@ -514,7 +515,7 @@ public final class SlimefunItems { @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 SlimefunItemStack("AUTOMATED_PANNING_MACHINE", Material.BOWL, "&aAutomated Panning Machine", "", "&aA MultiBlock Version of the Gold Pan"); + public static final ItemStack AUTOMATED_PANNING_MACHINE = new SlimefunItemStack("AUTOMATED_PANNING_MACHINE", Material.BOWL, "&eAutomated Panning Machine", "", "&rA MultiBlock Version of the Gold Pan", "&rand Nether Gold Pan combined in one machine."); public static final ItemStack OUTPUT_CHEST = new SlimefunItemStack("OUTPUT_CHEST", 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 SlimefunItemStack("HOLOGRAM_PROJECTOR", Material.QUARTZ_SLAB, "&bHologram Projector", "", "&rProjects an Editable Hologram"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java index c050d2fb9..2aab6334b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.Effect; import org.bukkit.Material; @@ -17,21 +18,19 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; -import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class GoldPan extends SimpleSlimefunItem implements RecipeDisplayItem { - private final Random random = new Random(); private final List recipes; private int chanceSiftedOre; private int chanceFlint; private int chanceClay; - public GoldPan(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) { - super(category, item, recipeType, recipe, keys, values); + public GoldPan(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe, new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {40, 25, 35}); recipes = Arrays.asList( new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), @@ -50,9 +49,10 @@ public class GoldPan extends SimpleSlimefunItem implemen @Override public ItemInteractionHandler getItemHandler() { return (e, p, item) -> { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GOLD_PAN, true)) { + if (isItem(item)) { if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.GRAVEL && SlimefunPlugin.getProtectionManager().hasPermission(p, e.getClickedBlock().getLocation(), ProtectableAction.BREAK_BLOCK)) { List drops = new ArrayList<>(); + Random random = ThreadLocalRandom.current(); if (random.nextInt(100) < chanceSiftedOre) drops.add(SlimefunItems.SIFTED_ORE); else if (random.nextInt(100) < chanceClay) drops.add(new ItemStack(Material.CLAY_BALL)); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java new file mode 100644 index 000000000..85a4ce3cb --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java @@ -0,0 +1,94 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; +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.RecipeDisplayItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class NetherGoldPan extends SimpleSlimefunItem implements RecipeDisplayItem { + + private final List recipes; + + private int chanceQuartz; + private int chanceGoldNuggets; + private int chanceNetherWart; + private int chanceBlazePowder; + private int chanceGlowstoneDust; + private int chanceGhastTear; + + public NetherGoldPan(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe, + new String[] {"chance.QUARTZ", "chance.GOLD_NUGGET", "chance.NETHER_WART", "chance.BLAZE_POWDER", "chance.GLOWSTONE_DUST", "chance.GHAST_TEAR"}, + new Integer[] {50, 25, 10, 8, 5, 2} + ); + + recipes = Arrays.asList( + new ItemStack(Material.SOUL_SAND), new ItemStack(Material.QUARTZ), + new ItemStack(Material.SOUL_SAND), new ItemStack(Material.GOLD_NUGGET), + new ItemStack(Material.SOUL_SAND), new ItemStack(Material.NETHER_WART), + new ItemStack(Material.SOUL_SAND), new ItemStack(Material.BLAZE_POWDER), + new ItemStack(Material.SOUL_SAND), new ItemStack(Material.GLOWSTONE_DUST), + new ItemStack(Material.SOUL_SAND), new ItemStack(Material.GHAST_TEAR) + ); + } + + @Override + public void postRegister() { + chanceQuartz = (int) Slimefun.getItemValue(getID(), "chance.QUARTZ"); + chanceGoldNuggets = (int) Slimefun.getItemValue(getID(), "chance.GOLD_NUGGET"); + chanceNetherWart = (int) Slimefun.getItemValue(getID(), "chance.NETHER_WART"); + chanceBlazePowder = (int) Slimefun.getItemValue(getID(), "chance.BLAZE_POWDER"); + chanceGlowstoneDust = (int) Slimefun.getItemValue(getID(), "chance.GLOWSTONE_DUST"); + chanceGhastTear = (int) Slimefun.getItemValue(getID(), "chance.GHAST_TEAR"); + } + + @Override + public ItemInteractionHandler getItemHandler() { + return (e, p, item) -> { + if (isItem(item)) { + if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.SOUL_SAND && SlimefunPlugin.getProtectionManager().hasPermission(p, e.getClickedBlock().getLocation(), ProtectableAction.BREAK_BLOCK)) { + List drops = new ArrayList<>(); + Random random = ThreadLocalRandom.current(); + + if (random.nextInt(100) < chanceQuartz) drops.add(new ItemStack(Material.QUARTZ)); + else if (random.nextInt(100) < chanceGoldNuggets) drops.add(new ItemStack(Material.GOLD_NUGGET)); + else if (random.nextInt(100) < chanceNetherWart) drops.add(new ItemStack(Material.NETHER_WART)); + else if (random.nextInt(100) < chanceBlazePowder) drops.add(new ItemStack(Material.BLAZE_POWDER)); + else if (random.nextInt(100) < chanceGlowstoneDust) drops.add(new ItemStack(Material.GLOWSTONE_DUST)); + else if (random.nextInt(100) < chanceGhastTear) drops.add(new ItemStack(Material.GHAST_TEAR)); + + e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, e.getClickedBlock().getType()); + e.getClickedBlock().setType(Material.AIR); + + for (ItemStack drop: drops) { + e.getClickedBlock().getWorld().dropItemNaturally(e.getClickedBlock().getLocation(), drop); + } + } + e.setCancelled(true); + return true; + } + else return false; + }; + } + + @Override + public List getDisplayRecipes() { + return recipes; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java index 82d6ab2a8..2448744b2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java @@ -1,6 +1,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.Effect; import org.bukkit.GameMode; @@ -21,12 +22,19 @@ import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; public class AutomatedPanningMachine extends MultiBlockMachine { - - private final Random random = new Random(); + // Gold Pan private int chanceSiftedOre; private int chanceFlint; private int chanceClay; + + // Nether Gold Pan + private int chanceQuartz; + private int chanceGoldNuggets; + private int chanceNetherWart; + private int chanceBlazePowder; + private int chanceGlowstoneDust; + private int chanceGhastTear; public AutomatedPanningMachine() { super( @@ -48,24 +56,34 @@ public class AutomatedPanningMachine extends MultiBlockMachine { super.postRegister(); String goldPan = "GOLD_PAN"; + String netherGoldPan = "NETHER_GOLD_PAN"; chanceSiftedOre = (int) Slimefun.getItemValue(goldPan, "chance.SIFTED_ORE"); chanceClay = (int) Slimefun.getItemValue(goldPan, "chance.CLAY"); chanceFlint = (int) Slimefun.getItemValue(goldPan, "chance.FLINT"); + + chanceQuartz = (int) Slimefun.getItemValue(netherGoldPan, "chance.QUARTZ"); + chanceGoldNuggets = (int) Slimefun.getItemValue(netherGoldPan, "chance.GOLD_NUGGET"); + chanceNetherWart = (int) Slimefun.getItemValue(netherGoldPan, "chance.NETHER_WART"); + chanceBlazePowder = (int) Slimefun.getItemValue(netherGoldPan, "chance.BLAZE_POWDER"); + chanceGlowstoneDust = (int) Slimefun.getItemValue(netherGoldPan, "chance.GLOWSTONE_DUST"); + chanceGhastTear = (int) Slimefun.getItemValue(netherGoldPan, "chance.GHAST_TEAR"); } @Override public void onInteract(Player p, Block b) { final ItemStack input = p.getInventory().getItemInMainHand(); - if (SlimefunManager.isItemSimiliar(input, new ItemStack(Material.GRAVEL), true)) { + if (SlimefunManager.isItemSimiliar(input, new ItemStack(Material.GRAVEL), true) || SlimefunManager.isItemSimiliar(input, new ItemStack(Material.SOUL_SAND), true)) { + final Material block = input.getType(); + if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(input, false); - ItemStack output = getRandomDrop(); + ItemStack output = getRandomDrop(ThreadLocalRandom.current(), block); TaskQueue queue = new TaskQueue(); queue.thenRepeatEvery(20, 5, () -> - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL) + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, block) ); queue.thenRun(20, () -> { @@ -93,17 +111,38 @@ public class AutomatedPanningMachine extends MultiBlockMachine { } } - private ItemStack getRandomDrop() { - if (random.nextInt(100) < chanceSiftedOre) { - return SlimefunItems.SIFTED_ORE; + private ItemStack getRandomDrop(Random random, Material input) { + if (input == Material.GRAVEL) { + if (random.nextInt(100) < chanceSiftedOre) { + return SlimefunItems.SIFTED_ORE; + } + else if (random.nextInt(100) < chanceClay) { + return new ItemStack(Material.CLAY_BALL); + } + else if (random.nextInt(100) < chanceFlint) { + return new ItemStack(Material.FLINT); + } } - else if (random.nextInt(100) < chanceClay) { - return new ItemStack(Material.CLAY_BALL); + else if (input == Material.SOUL_SAND) { + if (random.nextInt(100) < chanceQuartz) { + return new ItemStack(Material.QUARTZ); + } + else if (random.nextInt(100) < chanceGoldNuggets) { + return new ItemStack(Material.GOLD_NUGGET); + } + else if (random.nextInt(100) < chanceNetherWart) { + return new ItemStack(Material.NETHER_WART); + } + else if (random.nextInt(100) < chanceBlazePowder) { + return new ItemStack(Material.BLAZE_POWDER); + } + else if (random.nextInt(100) < chanceGlowstoneDust) { + return new ItemStack(Material.GLOWSTONE_DUST); + } + else if (random.nextInt(100) < chanceGhastTear) { + return new ItemStack(Material.GHAST_TEAR); + } } - else if (random.nextInt(100) < chanceFlint) { - return new ItemStack(Material.FLINT); - } - return null; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 1dc13f80e..865f16dda 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -245,6 +245,7 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(251, "Nether Gold Pan", 8), SlimefunItems.NETHER_GOLD_PAN); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index a453d38c0..d0eac54c2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -91,6 +91,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MeatJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Multimeter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.NetherGoldPan; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; @@ -333,8 +334,11 @@ public final class SlimefunSetup { .register(true); new GoldPan(Categories.TOOLS, (SlimefunItemStack) SlimefunItems.GOLD_PAN, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.STONE), new ItemStack(Material.BOWL), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE)}, - new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {40, 25, 35}) + new ItemStack[] {null, null, null, new ItemStack(Material.STONE), new ItemStack(Material.BOWL), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE)}) + .register(true); + + new NetherGoldPan(Categories.TOOLS, (SlimefunItemStack) SlimefunItems.NETHER_GOLD_PAN, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.NETHER_BRICK), SlimefunItems.GOLD_PAN, new ItemStack(Material.NETHER_BRICK), new ItemStack(Material.NETHER_BRICK), new ItemStack(Material.NETHER_BRICK), new ItemStack(Material.NETHER_BRICK)}) .register(true); new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SIFTED_ORE, RecipeType.GOLD_PAN, From 61a58d87ddde3e3d064b3388ecbe3e4bc367ca25 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 26 Nov 2019 00:48:47 +0100 Subject: [PATCH 80/80] Added Iron Nuggets to Gold Pan drops --- .../Slimefun/Objects/SlimefunItem/items/GoldPan.java | 8 ++++++-- .../SlimefunItem/multiblocks/AutomatedPanningMachine.java | 5 +++++ .../me/mrCookieSlime/Slimefun/guides/GuideSettings.java | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java index 2aab6334b..8b157816e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java @@ -28,14 +28,16 @@ public class GoldPan extends SimpleSlimefunItem implemen private int chanceSiftedOre; private int chanceFlint; private int chanceClay; + private int chanceIronNuggets; public GoldPan(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe, new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {40, 25, 35}); + super(category, item, recipeType, recipe, new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE", "chance.IRON_NUGGET"}, new Integer[] {40, 20, 35, 5}); recipes = Arrays.asList( new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), - new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE + new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE, + new ItemStack(Material.GRAVEL), new ItemStack(Material.IRON_NUGGET) ); } @@ -44,6 +46,7 @@ public class GoldPan extends SimpleSlimefunItem implemen chanceSiftedOre = (int) Slimefun.getItemValue(getID(), "chance.SIFTED_ORE"); chanceClay = (int) Slimefun.getItemValue(getID(), "chance.CLAY"); chanceFlint = (int) Slimefun.getItemValue(getID(), "chance.FLINT"); + chanceIronNuggets = (int) Slimefun.getItemValue(getID(), "chance.IRON_NUGGET"); } @Override @@ -57,6 +60,7 @@ public class GoldPan extends SimpleSlimefunItem implemen if (random.nextInt(100) < chanceSiftedOre) drops.add(SlimefunItems.SIFTED_ORE); else if (random.nextInt(100) < chanceClay) drops.add(new ItemStack(Material.CLAY_BALL)); else if (random.nextInt(100) < chanceFlint) drops.add(new ItemStack(Material.FLINT)); + else if (random.nextInt(100) < chanceIronNuggets) drops.add(new ItemStack(Material.IRON_NUGGET)); e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, e.getClickedBlock().getType()); e.getClickedBlock().setType(Material.AIR); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java index 2448744b2..20bf178c4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java @@ -27,6 +27,7 @@ public class AutomatedPanningMachine extends MultiBlockMachine { private int chanceSiftedOre; private int chanceFlint; private int chanceClay; + private int chanceIronNuggets; // Nether Gold Pan private int chanceQuartz; @@ -61,6 +62,7 @@ public class AutomatedPanningMachine extends MultiBlockMachine { chanceSiftedOre = (int) Slimefun.getItemValue(goldPan, "chance.SIFTED_ORE"); chanceClay = (int) Slimefun.getItemValue(goldPan, "chance.CLAY"); chanceFlint = (int) Slimefun.getItemValue(goldPan, "chance.FLINT"); + chanceIronNuggets = (int) Slimefun.getItemValue(goldPan, "chance.IRON_NUGGET"); chanceQuartz = (int) Slimefun.getItemValue(netherGoldPan, "chance.QUARTZ"); chanceGoldNuggets = (int) Slimefun.getItemValue(netherGoldPan, "chance.GOLD_NUGGET"); @@ -122,6 +124,9 @@ public class AutomatedPanningMachine extends MultiBlockMachine { else if (random.nextInt(100) < chanceFlint) { return new ItemStack(Material.FLINT); } + else if (random.nextInt(100) < chanceIronNuggets) { + return new ItemStack(Material.IRON_NUGGET); + } } else if (input == Material.SOUL_SAND) { if (random.nextInt(100) < chanceQuartz) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java b/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java index e11fe5849..c86d62527 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/guides/GuideSettings.java @@ -188,6 +188,8 @@ public final class GuideSettings { lore.add(ChatColors.color(entry.getKey() + " &7(" + entry.getValue() + " Commit" + (entry.getValue() > 1 ? "s": "") + ")")); } + lore.add(""); + lore.add("&7\u21E8 Click to visit " + contributor.getName() + "'s profile"); meta.setLore(lore); skull.setItemMeta(meta);