diff --git a/pom.xml b/pom.xml
index 4455ca9ce..e2aed4a93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -124,7 +124,7 @@
com.github.thebusybiscuit
CS-CoreLib2
- 0.3.10
+ 0.4.1
compile
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java
index daf92475a..71e50e7c0 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java
@@ -5,16 +5,24 @@ import org.bukkit.inventory.ItemStack;
public interface OreGenResource {
- // Returns the default supply of this resource in that biome
+ /**
+ * Returns the default supply of this resource in that biome
+ */
int getDefaultSupply(Biome biome);
- // Name/ID e.g. "Oil"
+ /**
+ * Name/ID e.g. "Oil"
+ */
String getName();
- // For the GEO-Scanner
+ /**
+ * For the GEO-Scanner
+ */
ItemStack getIcon();
- // Measurement Unit e.g. "Buckets"
+ /**
+ * Measurement Unit e.g. "Buckets"
+ */
String getMeasurementUnit();
}
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java
similarity index 92%
rename from src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java
rename to src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java
index 4c2cac513..2a86ea450 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.GEO.Resources;
+package me.mrCookieSlime.Slimefun.GEO.resources;
import org.bukkit.block.Biome;
import org.bukkit.inventory.ItemStack;
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java
similarity index 97%
rename from src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java
rename to src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java
index 26b3c4cd3..cac4cbd09 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.GEO.Resources;
+package me.mrCookieSlime.Slimefun.GEO.resources;
import org.bukkit.block.Biome;
import org.bukkit.inventory.ItemStack;
diff --git a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java
index 88ecba204..0926ba551 100644
--- a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java
+++ b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java
@@ -74,7 +74,7 @@ public final class Elevator {
else {
tellraw.addText("&7" + index + ". &r" + floor + "\n");
tellraw.addHoverEvent(HoverAction.SHOW_TEXT, "\n&eClick to teleport to this Floor\n&r" + floor + "\n");
- tellraw.addClickEvent(me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.ClickAction.RUN_COMMAND, "/sf elevator " + block.getX() + " " + block.getY() + " " + block.getZ() + " ");
+ tellraw.addClickEvent(me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.ClickAction.RUN_COMMAND, "/sf elevator " + block.getX() + ' ' + block.getY() + ' ' + block.getZ() + " ");
}
index++;
diff --git a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java
index bc0425cc4..664268947 100644
--- a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java
+++ b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java
@@ -160,7 +160,8 @@ public class GPSNetwork {
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
- String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(" ", "_");
+ String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey()))
+ .toUpperCase().replace(' ', '_');
Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml");
cfg.setValue(id, null);
cfg.save();
@@ -210,7 +211,8 @@ public class GPSNetwork {
return;
}
Config cfg = new Config("data-storage/Slimefun/waypoints/" + p.getUniqueId().toString() + ".yml");
- String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase().replace(" ", "_");
+ String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', name)).toUpperCase()
+ .replace(' ', '_');
cfg.setValue(id, l);
cfg.setValue(id + ".name", name);
cfg.save();
@@ -234,7 +236,7 @@ public class GPSNetwork {
for (OreGenResource resource: OreGenSystem.listResources()) {
int supply = OreGenSystem.getSupplies(resource, chunk, true);
- menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + " " + resource.getMeasurementUnit()), (pl, slot, item, action) -> false);
+ menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + ' ' + resource.getMeasurementUnit()), (pl, slot, item, action) -> false);
index++;
}
diff --git a/src/me/mrCookieSlime/Slimefun/Lists/Categories.java b/src/me/mrCookieSlime/Slimefun/Lists/Categories.java
index 0935b3387..65e59cace 100644
--- a/src/me/mrCookieSlime/Slimefun/Lists/Categories.java
+++ b/src/me/mrCookieSlime/Slimefun/Lists/Categories.java
@@ -1,18 +1,13 @@
package me.mrCookieSlime.Slimefun.Lists;
-import java.util.logging.Level;
-
import org.bukkit.Color;
import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomArmor;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory;
-import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* Built-in categories.
@@ -25,39 +20,31 @@ public final class Categories {
private Categories() {}
- private static final String lore = "&a> Click to open";
+ private static final String LORE = "&a> Click to open";
- public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", lore), 1);
- public static final Category PORTABLE = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&7Items", "", lore), 1);
- public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", lore), 2);
- public static final Category MACHINES_1 = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Basic Machines", "", lore), 1);
- public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19"), "&bEnergy and Electricity", "", lore), 4, MACHINES_1);
- public static final LockedCategory GPS = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS-based Machines", "", lore), 4, MACHINES_1);
- public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", lore), 2);
- public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", lore), 2);
- public static final Category MAGIC = new Category(new CustomItem(SlimefunItems.ENDER_BACKPACK, "&7Magical Gadgets", "", lore), 3);
- public static final Category MISC = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&7Miscellaneous", "", lore), 2);
- public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", lore), Color.SILVER), 3);
- public static final Category RESOURCES = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&7Resources", "", lore), 1);
- public static final Category CARGO = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&cCargo Management", "", lore), 4, MACHINES_1);
- public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", lore), 2);
- public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", lore), 2);
- public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", lore), 2);
- public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", lore), 3, TALISMANS_1);
- public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", lore), 1);
+ public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", LORE), 1);
+ public static final Category PORTABLE = new Category(new CustomItem(SlimefunItems.BACKPACK_MEDIUM, "&7Items", "", LORE), 1);
+ public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", LORE), 2);
+ public static final Category MACHINES_1 = new Category(new CustomItem(Material.SMITHING_TABLE, "&7Basic Machines", "", LORE), 1);
+ public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity", "", LORE), 4, MACHINES_1);
+ public static final LockedCategory GPS = new LockedCategory(new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines", "", LORE), 4, MACHINES_1);
+ public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", LORE), 2);
+ public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", LORE), 2);
+ public static final Category MAGIC = new Category(new CustomItem(Material.ELYTRA, "&7Magical Gadgets", "", LORE), 3);
+ public static final Category MISC = new Category(new CustomItem(SlimefunItems.CAN, "&7Miscellaneous", "", LORE), 2);
+ public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", LORE), Color.SILVER), 3);
+ public static final Category RESOURCES = new Category(new CustomItem(SlimefunItems.SYNTHETIC_SAPPHIRE, "&7Resources", "", LORE), 1);
+ public static final Category CARGO = new LockedCategory(new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management", "", LORE), 4, MACHINES_1);
+ public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", LORE), 2);
+ public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", LORE), 2);
+ public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", LORE), 2);
+ public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", LORE), 3, TALISMANS_1);
+ public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", LORE), 1);
+
+ // Seasonal Categories
public static final SeasonalCategory CHRISTMAS = new SeasonalCategory(12, 1, new CustomItem(Material.NETHER_STAR, "&aC&ch&ar&ci&as&ct&am&ca&as", "", "&c> Click to help &aSanta"));
public static final SeasonalCategory VALENTINES_DAY = new SeasonalCategory(2, 2, new CustomItem(Material.POPPY, "&dValentine's Day", "", "&d> Click to celebrate Love"));
public static final SeasonalCategory EASTER = new SeasonalCategory(4, 2, new CustomItem(Material.EGG, "&6Easter", "", "&a> Click to paint some Eggs"));
public static final SeasonalCategory BIRTHDAY = new SeasonalCategory(10, 1, new CustomItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)", "", "&a> Click to celebrate with me"));
- private static ItemStack getSkull(String texture) {
- try {
- return CustomSkull.getItem(texture);
- }
- catch(Exception x) {
- Slimefun.getLogger().log(Level.SEVERE, "An Error occured while initializing the Categories for Slimefun " + Slimefun.getVersion(), x);
-
- return new ItemStack(Material.PLAYER_HEAD);
- }
- }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java
index 9096d7832..50ae08976 100644
--- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java
+++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java
@@ -1,6 +1,8 @@
package me.mrCookieSlime.Slimefun.Lists;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.logging.Level;
@@ -8,8 +10,8 @@ import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
-import org.bukkit.enchantments.Enchantment;
import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import org.bukkit.potion.PotionEffect;
@@ -486,8 +488,13 @@ public final class SlimefunItems {
public static final ItemStack SOLAR_PANEL = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Panel", "", "&a&oTransforms Sunlight to Energy");
public static final ItemStack SOLAR_ARRAY = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Array", "", "&a&oTransforms Sunlight to Energy");
- public static final ItemStack DIGITAL_MINER = new CustomItem(Material.IRON_PICKAXE, "&bDigital Miner", "", "&a&oDigs out everything!");
- public static final ItemStack ADVANCED_DIGITAL_MINER = new CustomItem(Material.DIAMOND_PICKAXE, "&6Advanced Digital Miner", "", "&a&oDigs out everything!", "&a&oAutomatically crushes your Ores");
+
+ @Deprecated
+ public static final ItemStack DIGITAL_MINER = new CustomItem(Material.IRON_PICKAXE, "&bDigital Miner", "", "&4DEPRECATED", "&cThis machine will soon be removed!");
+
+ @Deprecated
+ public static final ItemStack ADVANCED_DIGITAL_MINER = new CustomItem(Material.DIAMOND_PICKAXE, "&6Advanced Digital Miner", "", "&4DEPRECATED", "&cThis machine will soon be removed!");
+
public static final ItemStack AUTOMATED_PANNING_MACHINE = new CustomItem(Material.BOWL, "&aAutomated Panning Machine", "", "&a&oA MultiBlock Version of the Gold Pan");
public static final ItemStack OUTPUT_CHEST = new CustomItem(Material.CHEST, "&4Output Chest", "", "&c&oA basic machine will try to put", "&c&oitems in this chest if it's placed", "&c&oadjacent to the dispenser.");
public static final ItemStack HOLOGRAM_PROJECTOR = new CustomItem(Material.QUARTZ_SLAB, "&bHologram Projector", "", "&rProjects an Editable Hologram");
@@ -531,6 +538,7 @@ public final class SlimefunItems {
public static final ItemStack RUNE_ENDER;
public static final ItemStack RUNE_RAINBOW;
public static final ItemStack RUNE_LIGHTNING;
+ public static final ItemStack RUNE_SOULBOUND;
static {
ItemStack itemB = new ItemStack(Material.FIREWORK_STAR);
@@ -563,7 +571,7 @@ public final class SlimefunItems {
ItemStack itemE = new ItemStack(Material.FIREWORK_STAR);
FireworkEffectMeta imE = (FireworkEffectMeta) itemE.getItemMeta();
- imE.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.ORANGE).build());
+ imE.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(112, 47, 7)).build());
imE.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&c&lEarth&8&l]"));
itemE.setItemMeta(imE);
RUNE_EARTH = itemE;
@@ -577,17 +585,33 @@ public final class SlimefunItems {
ItemStack itemR = new ItemStack(Material.FIREWORK_STAR);
FireworkEffectMeta imR = (FireworkEffectMeta) itemR.getItemMeta();
- imR.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.PURPLE).build());
+ imR.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.FUCHSIA).build());
imR.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&d&lRainbow&8&l]"));
itemR.setItemMeta(imR);
RUNE_RAINBOW = itemR;
ItemStack itemL = new ItemStack(Material.FIREWORK_STAR);
FireworkEffectMeta imL = (FireworkEffectMeta) itemL.getItemMeta();
- imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.YELLOW).build());
+ imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(255, 255, 95)).build());
imL.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&e&lLightning&8&l]"));
itemL.setItemMeta(imL);
RUNE_LIGHTNING = itemL;
+
+ ItemStack itemS = new ItemStack(Material.FIREWORK_STAR);
+ FireworkEffectMeta imS = (FireworkEffectMeta) itemS.getItemMeta();
+ imS.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.fromRGB(47, 0, 117)).build());
+ imS.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&5&lSoulbound&8&l]"));
+ List lore = new ArrayList<>();
+ lore.add(ChatColor.YELLOW + "Drop this rune onto a dropped item to");
+ lore.add(ChatColor.DARK_PURPLE + "bind " + ChatColor.YELLOW + "that item to your soul.");
+ lore.add(" ");
+ lore.add(ChatColor.YELLOW + "It is advised that you only use this rune");
+ lore.add(ChatColor.YELLOW + "on " + ChatColor.GOLD + "important " + ChatColor.YELLOW + "items.");
+ lore.add(" ");
+ lore.add(ChatColor.YELLOW + "Items bound to your soul won't drop on death.");
+ imS.setLore(lore);
+ itemS.setItemMeta(imS);
+ RUNE_SOULBOUND = itemS;
}
/* Electricity */
@@ -597,7 +621,10 @@ public final class SlimefunItems {
public static final ItemStack SOLAR_GENERATOR_4 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&eEnergized Solar Generator", "", "&9Works at Night", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &7256 J/s (Day)", "&8\u21E8 &e\u26A1 &7128 J/s (Night)");
public static final ItemStack COAL_GENERATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &764 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
+ public static final ItemStack COAL_GENERATOR_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator &7(&eII&7)", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s");
+
public static final ItemStack LAVA_GENERATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s");
+ public static final ItemStack LAVA_GENERATOR_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator &7&eII&7)", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &740 J/s");
public static final ItemStack ELECTRIC_FURNACE = new CustomItem(Material.FURNACE, "&cElectric Furnace", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &74 J/s");
public static final ItemStack ELECTRIC_FURNACE_2 = new CustomItem(Material.FURNACE, "&cElectric Furnace &7- &eII", "", "&aMedium Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &76 J/s");
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Category.java b/src/me/mrCookieSlime/Slimefun/Objects/Category.java
index 32f200a74..20acc458f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/Category.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/Category.java
@@ -2,10 +2,11 @@ package me.mrCookieSlime.Slimefun.Objects;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
+import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
@@ -23,13 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
* @see SeasonalCategory
*/
public class Category {
- /**
- * List of the registered Categories.
- * @since 4.0
- * @see Categories
- */
- public static List list = new ArrayList<>();
-
+
private ItemStack item;
private List items;
private int tier;
@@ -44,6 +39,11 @@ public class Category {
*/
public Category(ItemStack item) {
this.item = item;
+
+ ItemMeta meta = item.getItemMeta();
+ meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
+ this.item.setItemMeta(meta);
+
this.items = new ArrayList<>();
this.tier = 3;
}
@@ -72,15 +72,19 @@ public class Category {
* @since 4.0
*/
public void register() {
- list.add(this);
- Collections.sort(list, new CategorySorter());
+ SlimefunPlugin.getUtilities().allCategories.add(this);
+ Collections.sort(list(), SlimefunPlugin.getUtilities().categorySorter);
if (this instanceof SeasonalCategory) {
- if (((SeasonalCategory) this).isUnlocked()) SlimefunPlugin.getUtilities().currentlyEnabledCategories.add(this);
+ if (((SeasonalCategory) this).isUnlocked()) {
+ SlimefunPlugin.getUtilities().enabledCategories.add(this);
+ }
+ }
+ else {
+ SlimefunPlugin.getUtilities().enabledCategories.add(this);
}
- else SlimefunPlugin.getUtilities().currentlyEnabledCategories.add(this);
- Collections.sort(SlimefunPlugin.getUtilities().currentlyEnabledCategories, new CategorySorter());
+ Collections.sort(SlimefunPlugin.getUtilities().enabledCategories, SlimefunPlugin.getUtilities().categorySorter);
}
/**
@@ -92,7 +96,7 @@ public class Category {
* @see Categories
*/
public static List list() {
- return list;
+ return SlimefunPlugin.getUtilities().allCategories;
}
/**
@@ -136,8 +140,9 @@ public class Category {
*
* @since 4.0
*/
+ @Deprecated
public static Category getByItem(ItemStack item) {
- for (Category c: list) {
+ for (Category c: list()) {
if (c.getItem().isSimilar(item)) return c;
}
return null;
@@ -154,19 +159,4 @@ public class Category {
return tier;
}
- /**
- * @since 4.0
- */
- class CategorySorter implements Comparator {
-
- /**
- * @since 4.0
- */
- @Override
- public int compare(Category c1, Category c2) {
- return Integer.compare(c1.getTier(), c2.getTier());
- }
-
- }
-
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
index 988d37656..2065ccd57 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
@@ -1,40 +1,74 @@
package me.mrCookieSlime.Slimefun.Objects;
-import java.util.ArrayList;
import java.util.List;
+import org.bukkit.Material;
+import org.bukkit.block.BlockFace;
+
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
-import org.bukkit.Material;
-
public class MultiBlock {
- public static List list = new ArrayList<>();
-
private Material[] blocks;
- private Material trigger;
-
+ private BlockFace trigger;
+ private boolean isSymmetric;
+
+ @Deprecated
public MultiBlock(Material[] build, Material trigger) {
+ this.blocks = build;
+ this.isSymmetric = isSymmetric(build);
+ //Hacky, the other constructor should be used
+ for (int i = 1; i < 9; i +=3)
+ {
+ if (trigger.equals(build[i]))
+ {
+ switch (i) {
+ case 1:
+ this.trigger = BlockFace.DOWN;
+ break;
+ case 4:
+ this.trigger = BlockFace.SELF;
+ break;
+ case 7:
+ this.trigger = BlockFace.UP;
+ break;
+ }
+ break;
+ }
+ }
+ }
+
+ public MultiBlock(Material[] build, BlockFace trigger)
+ {
this.blocks = build;
this.trigger = trigger;
+ this.isSymmetric = isSymmetric(build);
+ }
+
+ private static boolean isSymmetric(Material[] blocks)
+ {
+ return blocks[0] == blocks[2]
+ && blocks[3] == blocks[5]
+ && blocks[6] == blocks[8];
}
public Material[] getBuild() {
return this.blocks;
}
- public Material getTriggerBlock() {
+ public BlockFace getTriggerBlock() {
return this.trigger;
}
public void register() {
- list.add(this);
+ SlimefunPlugin.getUtilities().allMultiblocks.add(this);
}
public static List list() {
- return list;
+ return SlimefunPlugin.getUtilities().allMultiblocks;
}
public boolean isMultiBlock(SlimefunItem machine) {
@@ -71,5 +105,10 @@ public class MultiBlock {
return true;
}
+
+ public boolean isSymmetric()
+ {
+ return this.isSymmetric;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/me/mrCookieSlime/Slimefun/Objects/Research.java
index 19f048602..56b2fabdf 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/Research.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/Research.java
@@ -3,7 +3,6 @@ package me.mrCookieSlime.Slimefun.Objects;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@@ -40,13 +39,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
public class Research {
private static final int[] research_progress = {23, 44, 57, 92};
-
- /**
- * Contains all the registered researches;
- * @since 4.0
- * @see ResearchSetup
- */
- public static List list = new LinkedList<>();
private int id;
private String name;
@@ -116,7 +108,7 @@ public class Research {
*/
@Deprecated
public int getLevel() {
- return cost;
+ return getCost();
}
/**
@@ -129,7 +121,7 @@ public class Research {
*/
@Deprecated
public void setLevel(int level) {
- this.cost = level;
+ setCost(level);
}
/**
@@ -303,7 +295,7 @@ public class Research {
this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost");
this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled");
- list.add(this);
+ SlimefunPlugin.getUtilities().allResearches.add(this);
if (SlimefunPlugin.getSettings().printOutLoading) {
Slimefun.getLogger().log(Level.INFO, "Loaded Research \"" + this.getName() + "\"");
}
@@ -318,7 +310,7 @@ public class Research {
* @see ResearchSetup
*/
public static List list() {
- return list;
+ return SlimefunPlugin.getUtilities().allResearches;
}
/**
@@ -388,7 +380,7 @@ public class Research {
* @since 4.0
*/
public static Research getByID(int id) {
- for (Research research: list) {
+ for (Research research: list()) {
if (research.getID() == id) return research;
}
return null;
@@ -426,4 +418,9 @@ public class Research {
public static List getResearches(String uuid) {
return getResearches(UUID.fromString(uuid));
}
+
+ @Override
+ public String toString() {
+ return "Research {" + id + ',' + name + "}";
+ }
}
\ No newline at end of file
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java
index b133b19c9..f6b515413 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java
@@ -1,38 +1,42 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.potion.PotionEffect;
import me.mrCookieSlime.Slimefun.Lists.Categories;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* @since 4.0
*/
-public class EnderTalisman extends SlimefunItem {
-
- private String suffix;
- private boolean consumable;
- private boolean cancel;
- private PotionEffect[] effects;
- private int chance;
+public class EnderTalisman extends Talisman {
public EnderTalisman(Talisman parent) {
- super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, parent.upgrade());
- this.consumable = parent.isConsumable();
- this.cancel = parent.isEventCancelled();
- this.suffix = parent.getSuffix();
- this.effects = parent.getEffects();
- this.chance = parent.getChance();
+ super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3});
+
+ consumable = parent.isConsumable();
+ cancel = parent.isEventCancelled();
+ suffix = parent.getSuffix();
+ effects = parent.getEffects();
+ chance = parent.getChance();
Slimefun.addHint("ENDER_" + parent.getID(), "&eEnder Talismans have the advantage", "&eof still working while they", "&eare in your Ender Chest");
}
-
- public String getSuffix() { return this.suffix; }
- public boolean isConsumable() { return this.consumable; }
- public boolean isEventCancelled() { return this.cancel; }
- public PotionEffect[] getEffects() { return this.effects; }
- public int getChance() { return this.chance; }
+
+ @Override
+ public ItemStack upgrade() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void install() {
+ // Let's override that, otherwise we would be creating Ender Talismans
+ // for every Ender Talisman
+ }
+
+ @Override
+ public void create() {
+ // Let's override that, otherwise we would be creating Ender Talismans
+ // for every Ender Talisman
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java
index be3a6c28e..b01620841 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java
@@ -12,7 +12,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
-public class EnhancedFurnace extends SlimefunItem {
+public class EnhancedFurnace extends SimpleSlimefunItem {
private int speed;
private int efficiency;
@@ -24,8 +24,27 @@ public class EnhancedFurnace extends SlimefunItem {
this.speed = speed - 1;
this.efficiency = efficiency - 1;
this.fortune = fortune - 1;
-
- addItemHandler(new BlockTicker() {
+ }
+
+ public int getSpeed() {
+ return speed;
+ }
+
+ public int getFuelEfficiency() {
+ return efficiency;
+ }
+
+ public int getOutput() {
+ int fortune = this.fortune;
+ fortune = new Random().nextInt(fortune + 2) - 1;
+ if (fortune <= 0) fortune = 0;
+ fortune++;
+ return fortune;
+ }
+
+ @Override
+ public BlockTicker getItemHandler() {
+ return new BlockTicker() {
@Override
public void tick(Block b, SlimefunItem item, Config data) {
@@ -49,22 +68,6 @@ public class EnhancedFurnace extends SlimefunItem {
public boolean isSynchronized() {
return true;
}
- });
- }
-
- public int getSpeed() {
- return speed;
- }
-
- public int getFuelEfficiency() {
- return efficiency;
- }
-
- public int getOutput() {
- int fortune = this.fortune;
- fortune = new Random().nextInt(fortune + 2) - 1;
- if (fortune <= 0) fortune = 0;
- fortune++;
- return fortune;
+ };
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java
index 8a75fee13..c20512b9a 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java
@@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
public class ExcludedBlock extends SlimefunItem implements NotPlaceable {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java
index 6bd151202..1a35ecc55 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java
@@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
public class ExcludedGadget extends SlimefunGadget implements NotPlaceable {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java
index 8be575860..120ab916f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java
@@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
public class ExcludedSoulboundTool extends SoulboundItem implements NotPlaceable {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java
index 6f2e49c7d..2ac5f15cb 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java
@@ -4,8 +4,9 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+@Deprecated
public class ExcludedTool extends SlimefunItem implements NotPlaceable {
public ExcludedTool(Category category, ItemStack item, String id,RecipeType recipeType, ItemStack[] recipe) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java
deleted file mode 100644
index 41c515d34..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces;
-
-public interface NotPlaceable {
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java
index 2a91594a0..5e8f4c29b 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java
@@ -21,9 +21,8 @@ public abstract class SimpleSlimefunItem extends Slimefun
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(getItemHandler());
- super.register(slimefun);
}
public abstract T getItemHandler();
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java
index afff7f633..26da5ca11 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java
@@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
public class SlimefunGadget extends SlimefunItem implements RecipeDisplayItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java
index 53b0ee567..e829d129c 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java
@@ -2,10 +2,8 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
@@ -35,11 +33,7 @@ import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
public class SlimefunItem {
-
- public static List items = new ArrayList<>();
- public static Map mapID = new HashMap<>();
- public static List all = new ArrayList<>();
-
+
private String id;
private String hash;
private State state;
@@ -151,7 +145,10 @@ public class SlimefunItem {
* @since 4.1.11, rename of {@link #getName()}.
*/
public String getID() { return id; }
+
+ @Deprecated
public String getHash() { return hash; }
+
public State getState() { return state; }
public ItemStack getItem() { return item; }
public Category getCategory() { return category; }
@@ -201,13 +198,17 @@ public class SlimefunItem {
public void register() {
register(false);
}
-
+
public void register(boolean slimefun) {
this.addon = !slimefun;
try {
- if (mapID.containsKey(this.id)) throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
+ preRegister();
+
+ if (SlimefunPlugin.getUtilities().itemIDs.containsKey(this.id)) {
+ throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
+ }
if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
- all.add(this);
+ SlimefunPlugin.getUtilities().allItems.add(this);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".enabled", true);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing);
@@ -218,7 +219,7 @@ public class SlimefunItem {
if (this.keys != null && this.values != null) {
for (int i = 0; i < this.keys.length; i++) {
- SlimefunPlugin.getItemCfg().setDefaultValue(this.id + "." + this.keys[i], this.values[i]);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + '.' + this.keys[i], this.values[i]);
}
}
@@ -242,9 +243,9 @@ public class SlimefunItem {
this.enchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-enchanting");
this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission");
- items.add(this);
+ SlimefunPlugin.getUtilities().enabledItems.add(this);
if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++;
- mapID.put(this.id, this);
+ SlimefunPlugin.getUtilities().itemIDs.put(this.id, this);
create();
@@ -270,7 +271,7 @@ public class SlimefunItem {
}
public static List list() {
- return items;
+ return SlimefunPlugin.getUtilities().enabledItems;
}
public void bindToResearch(Research r) {
@@ -278,6 +279,7 @@ public class SlimefunItem {
this.research = r;
}
+ @Deprecated
public void setHash(String hash) {
this.hash = hash;
}
@@ -308,19 +310,19 @@ public class SlimefunItem {
*/
@Deprecated
public static SlimefunItem getByName(String name) {
- return mapID.get(name);
+ return getByID(name);
}
/**
* @since 4.1.11, rename of {@link #getByName(String)}.
*/
public static SlimefunItem getByID(String id) {
- return mapID.get(id);
+ return SlimefunPlugin.getUtilities().itemIDs.get(id);
}
public static SlimefunItem getByItem(ItemStack item) {
if (item == null) return null;
- for (SlimefunItem sfi: items) {
+ for (SlimefunItem sfi: SlimefunPlugin.getUtilities().enabledItems) {
if ((sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
(sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
(sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
@@ -349,7 +351,8 @@ public class SlimefunItem {
if (recipeOutput != null) output = recipeOutput.clone();
if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) {
- String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_");
+ String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase()
+ .replace(' ', '_');
try {
EntityType entity = EntityType.valueOf(mob);
List dropping = SlimefunPlugin.getUtilities().drops.getOrDefault(entity, new ArrayList<>());
@@ -373,7 +376,7 @@ public class SlimefunItem {
}
public static State getState(ItemStack item) {
- for (SlimefunItem i: all) {
+ for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) {
if (i.isItem(item)) {
return i.getState();
}
@@ -382,7 +385,7 @@ public class SlimefunItem {
}
public static boolean isDisabled(ItemStack item) {
- for (SlimefunItem i: all) {
+ for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) {
if (i.isItem(item)) {
return i.isDisabled();
}
@@ -528,6 +531,11 @@ public class SlimefunItem {
ChargableBlock.registerCapacitor(id, capacity);
}
+ public void preRegister() {
+ // Override this method to execute code before the Item has been registered
+ // Useful for calls to addItemHandler(...)
+ }
+
public void postRegister() {
// Override this method to execute code after the Item has been registered
// Useful for calls to Slimefun.getItemValue(...)
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java
index 70be933dc..01e133286 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java
@@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
@@ -59,7 +59,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
}
@Override
- public void create() {
+ public void postRegister() {
this.toMultiBlock().register();
}
@@ -80,6 +80,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
else if (i.getType() == Material.FLINT_AND_STEEL) mats.add(Material.FIRE);
else mats.add(i.getType());
}
+
Material[] build = mats.toArray(new Material[mats.size()]);
return new MultiBlock(build, this.trigger);
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java
index 11ec3e485..ef0d493e4 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java
@@ -19,6 +19,7 @@ import org.bukkit.potion.PotionEffect;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.Research;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.Slimefun;
@@ -28,11 +29,11 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
*/
public class Talisman extends SlimefunItem {
- private String suffix;
- private boolean consumable = true;
- private boolean cancel = true;
- private PotionEffect[] effects;
- private int chance = 100;
+ protected String suffix;
+ protected boolean consumable = true;
+ protected boolean cancel = true;
+ protected PotionEffect[] effects;
+ protected int chance = 100;
public Talisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, PotionEffect... effects) {
super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, new CustomItem(item, consumable ? 4 : 1));
@@ -52,12 +53,16 @@ public class Talisman extends SlimefunItem {
}
public Talisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix, int chance, PotionEffect... effects) {
- super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, item);
+ super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
this.suffix = messageSuffix;
this.effects = effects;
this.chance = chance;
}
+ protected Talisman(Category category, ItemStack item, String id, ItemStack[] recipe) {
+ super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
+ }
+
public String getSuffix() {
return this.suffix;
}
@@ -78,6 +83,38 @@ public class Talisman extends SlimefunItem {
return this.chance;
}
+ public ItemStack upgrade() {
+ List lore = new ArrayList<>();
+ lore.add("&7&oEnder Infused");
+ lore.add("");
+ for (String line : getItem().getItemMeta().getLore()) {
+ lore.add(line);
+ }
+ return new CustomItem(getItem().getType(), "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()), lore.toArray(new String[lore.size()]));
+ }
+
+ @Override
+ public void create() {
+ EnderTalisman talisman = new EnderTalisman(this);
+ talisman.register(!isAddonItem());
+ }
+
+ @Override
+ public void install() {
+ EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(upgrade());
+ Research research = Research.getByID(112);
+ if (talisman != null) {
+ Slimefun.addOfficialWikiPage(talisman.getID(), "Talismans");
+ if (research != null) talisman.bindToResearch(research);
+ }
+
+ Slimefun.addOfficialWikiPage(getID(), "Talismans");
+ }
+
+ private static boolean isTalismanMessage(Talisman talisman){
+ return !("").equalsIgnoreCase(talisman.getSuffix());
+ }
+
public static boolean checkFor(Event e, SlimefunItem item) {
if (!(item instanceof Talisman)) {
return false;
@@ -108,39 +145,6 @@ public class Talisman extends SlimefunItem {
else return false;
}
else return false;
-
- }
-
- public ItemStack upgrade() {
- List lore = new ArrayList<>();
- lore.add("&7&oEnder Infused");
- lore.add("");
- for (String line : getItem().getItemMeta().getLore()) {
- lore.add(line);
- }
- return new CustomItem(getItem().getType(), "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()), lore.toArray(new String[lore.size()]));
- }
-
- @Override
- public void create() {
- EnderTalisman talisman = new EnderTalisman(this);
- talisman.register(true);
- }
-
- @Override
- public void install() {
- EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(upgrade());
- Research research = Research.getByID(112);
- if (talisman != null) {
- Slimefun.addOfficialWikiPage(talisman.getID(), "Talismans");
- if (research != null) talisman.bindToResearch(research);
- }
-
- Slimefun.addOfficialWikiPage(getID(), "Talismans");
- }
-
- private static boolean isTalismanMessage(Talisman talisman){
- return !("").equalsIgnoreCase(talisman.getSuffix());
}
private static void executeTalismanAttributes(Event e, Player p, Talisman talisman){
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java
index edaf92cec..083e24d10 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java
@@ -18,16 +18,14 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public abstract class AContainer extends SlimefunItem implements InventoryBlock {
@@ -43,33 +41,29 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
- createPreset(id, getInventoryTitle(), this::constructMenu);
+ createPreset(this, getInventoryTitle(), this::constructMenu);
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
-
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b);
- processing.remove(b);
- return true;
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
}
+
+ progress.remove(b);
+ processing.remove(b);
+ return true;
});
this.registerDefaultRecipes();
@@ -121,6 +115,17 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
// Override this method to register your machine recipes
}
+ public List getDisplayRecipes() {
+ List displayRecipes = new ArrayList<>(recipes.size() * 2);
+
+ for (MachineRecipe recipe: recipes) {
+ displayRecipes.add(recipe.getInput()[0]);
+ displayRecipes.add(recipe.getOutput()[0]);
+ }
+
+ return displayRecipes;
+ }
+
@Override
public int[] getInputSlots() {
return new int[] {19, 20};
@@ -149,7 +154,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -162,8 +167,6 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
return false;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java
index 07452a502..a5a780fd9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java
@@ -16,9 +16,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
@@ -53,61 +51,17 @@ public abstract class AFarm extends SlimefunItem {
}
};
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
- }
- });
- }
-
- public AFarm(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
- super(category, item, id, recipeType, recipe, recipeOutput);
-
- new BlockMenuPreset(id, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow == ItemTransportFlow.WITHDRAW) return getOutputSlots();
- return new int[0];
- }
- };
-
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot: getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- return true;
}
+ return true;
});
}
@@ -174,7 +128,7 @@ public abstract class AFarm extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -187,8 +141,6 @@ public abstract class AFarm extends SlimefunItem {
return true;
}
});
-
- super.register(slimefun);
}
private Inventory inject(Block b) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java
index 066a8343a..9512702b9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java
@@ -23,9 +23,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
@@ -67,29 +65,25 @@ public abstract class AGenerator extends SlimefunItem {
}
};
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b.getLocation());
- processing.remove(b.getLocation());
- return true;
}
+ progress.remove(b.getLocation());
+ processing.remove(b.getLocation());
+ return true;
});
this.registerDefaultRecipes();
@@ -157,7 +151,7 @@ public abstract class AGenerator extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new EnergyTicker() {
@Override
@@ -216,8 +210,6 @@ public abstract class AGenerator extends SlimefunItem {
return false;
}
});
-
- super.register(slimefun);
}
private MachineFuel findRecipe(BlockMenu menu, Map found) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java
index 0db7d9f2a..933360392 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java
@@ -26,9 +26,7 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -138,39 +136,35 @@ public abstract class AReactor extends SlimefunItem {
}
};
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getFuelSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
-
- for (int slot : getCoolantSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
-
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getFuelSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b.getLocation());
- processing.remove(b.getLocation());
- ReactorHologram.remove(b.getLocation());
- return true;
+ for (int slot : getCoolantSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
}
+
+ progress.remove(b.getLocation());
+ processing.remove(b.getLocation());
+ ReactorHologram.remove(b.getLocation());
+ return true;
});
this.registerDefaultRecipes();
@@ -252,7 +246,7 @@ public abstract class AReactor extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new EnergyTicker() {
private Set explode = new HashSet<>();
@@ -365,8 +359,6 @@ public abstract class AReactor extends SlimefunItem {
return explosion;
}
});
-
- super.register(slimefun);
}
private void restockCoolant(Location l, BlockMenu port) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java
index cc9ccad25..90c042baa 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java
@@ -98,7 +98,7 @@ public final class MachineHelper {
im.setLore(lore);
item.setItemMeta(im);
- menu.replaceExistingItem(22, item);
+ menu.replaceExistingItem(slot, item);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java
new file mode 100644
index 000000000..817715d95
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java
@@ -0,0 +1,66 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
+
+import org.bukkit.ChatColor;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
+import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
+
+public class CargoManagerBlock extends SlimefunItem {
+
+ public CargoManagerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+
+ SlimefunItem.registerBlockHandler("CARGO_MANAGER", (p, b, tool, reason) -> {
+ CargoHologram.remove(b);
+ return true;
+ });
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(new BlockTicker() {
+
+ @Override
+ public void tick(Block b, SlimefunItem item, Config data) {
+ CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b);
+ }
+
+ @Override
+ public boolean isSynchronized() {
+ return false;
+ }
+
+ }, new ItemInteractionHandler() {
+
+ @Override
+ public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) {
+ if (e.getClickedBlock() == null) return false;
+ String item = BlockStorage.checkID(e.getClickedBlock());
+ if (item == null || !item.equals(getID())) return false;
+ e.setCancelled(true);
+
+ if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "visualizer") == null) {
+ BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", "disabled");
+ p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718"));
+ }
+ else {
+ BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", null);
+ p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714"));
+ }
+ return true;
+ }
+ });
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java
similarity index 69%
rename from src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java
index 6db351177..0c0ace468 100644
--- a/src/me/mrCookieSlime/Slimefun/utils/DamageableItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.utils;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
@@ -13,7 +13,11 @@ public interface DamageableItem {
boolean isDamageable();
default void damageItem(Player p, ItemStack item) {
- if (item != null && item.getType() != null && item.getType() != Material.AIR && item.getAmount() > 0 && isDamageable() && item.getEnchantments().containsKey(Enchantment.DURABILITY) && Math.random() * 100 <= (60 + Math.floorDiv(40, (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1)))) {
+ if (item != null && item.getType() != null && item.getType() != Material.AIR && item.getAmount() > 0 && isDamageable()) {
+ if (item.getEnchantments().containsKey(Enchantment.DURABILITY) && Math.random() * 100 <= (60 + Math.floorDiv(40, (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1)))) {
+ return;
+ }
+
ItemMeta meta = item.getItemMeta();
Damageable damageable = (Damageable) meta;
diff --git a/src/me/mrCookieSlime/Slimefun/utils/InventoryBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java
similarity index 78%
rename from src/me/mrCookieSlime/Slimefun/utils/InventoryBlock.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java
index d405afe8b..b6dddcef2 100644
--- a/src/me/mrCookieSlime/Slimefun/utils/InventoryBlock.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.utils;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
import java.util.function.Consumer;
@@ -13,7 +13,9 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.Calculator;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@@ -22,8 +24,8 @@ public interface InventoryBlock {
int[] getInputSlots();
int[] getOutputSlots();
- default void createPreset(String id, String title, Consumer setup) {
- new BlockMenuPreset(id, title) {
+ default void createPreset(SlimefunItem item, String title, Consumer setup) {
+ new BlockMenuPreset(item.getID(), title) {
@Override
public void init() {
@@ -38,7 +40,7 @@ public interface InventoryBlock {
@Override
public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES);
+ return p.hasPermission("slimefun.inventory.bypass") || (SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES) && Slimefun.hasUnlocked(p, item, false));
}
};
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java
new file mode 100644
index 000000000..e06465fac
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java
@@ -0,0 +1,5 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
+
+public interface NotPlaceable {
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/utils/RecipeDisplayItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java
similarity index 71%
rename from src/me/mrCookieSlime/Slimefun/utils/RecipeDisplayItem.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java
index bfdde8001..a52363b7f 100644
--- a/src/me/mrCookieSlime/Slimefun/utils/RecipeDisplayItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.utils;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
import java.util.List;
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java
index a10c77c78..9e3f8a116 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java
@@ -19,12 +19,12 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
-import me.mrCookieSlime.Slimefun.utils.DamageableItem;
public class ExplosivePickaxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java
index 77e453fc7..69b2c432e 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java
@@ -13,11 +13,11 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.Slimefun;
-import me.mrCookieSlime.Slimefun.utils.DamageableItem;
public class ExplosiveShovel extends SimpleSlimefunItem implements NotPlaceable, DamageableItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java
new file mode 100644
index 000000000..5d6bd4d7b
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java
@@ -0,0 +1,41 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class HerculesPickaxe extends SimpleSlimefunItem {
+
+ public HerculesPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) {
+ if (e.getBlock().getType() == Material.IRON_ORE) {
+ drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2));
+ }
+ else if (e.getBlock().getType() == Material.GOLD_ORE) {
+ drops.add(new CustomItem(SlimefunItems.GOLD_DUST, 2));
+ }
+ else {
+ for (ItemStack drop: e.getBlock().getDrops()) {
+ drops.add(new CustomItem(drop, drop.getAmount() * 2));
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java
new file mode 100644
index 000000000..0db06913d
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java
@@ -0,0 +1,53 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.entity.ChestedHorse;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman;
+import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
+
+public class HunterTalisman extends Talisman {
+
+ public HunterTalisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance) {
+ super(item, id, recipe, consumable, cancelEvent, messageSuffix, chance);
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(getItemHandler());
+ }
+
+ public EntityKillHandler getItemHandler() {
+ return (e, entity, killer, item) -> {
+ if (Talisman.checkFor(e, this) && !(e.getEntity() instanceof Player)) {
+ if (!e.getEntity().getCanPickupItems()) {
+ List extraDrops = new ArrayList<>(e.getDrops());
+
+ if (e.getEntity() instanceof ChestedHorse) {
+ for (ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) {
+ extraDrops.remove(invItem);
+ }
+
+ //The chest is not included in getStorageContents()
+ extraDrops.remove(new ItemStack(Material.CHEST));
+ }
+
+ for (ItemStack drop: extraDrops) {
+ e.getDrops().add(drop);
+ }
+ }
+
+ return true;
+ }
+ else {
+ return false;
+ }
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java
new file mode 100644
index 000000000..67b763b92
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java
@@ -0,0 +1,55 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class LumberAxe extends SimpleSlimefunItem implements NotPlaceable {
+
+ public LumberAxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), getItem(), true)) {
+ if (MaterialHelper.isLog( e.getBlock().getType())) {
+ List logs = new ArrayList<>();
+ TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs);
+
+ if (logs.contains(e.getBlock().getLocation())) logs.remove(e.getBlock().getLocation());
+ for (Location b: logs) {
+ if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b, Action.BREAK_BLOCK)) {
+ b.getWorld().playEffect(b, Effect.STEP_SOUND, b.getBlock().getType());
+
+ for (ItemStack drop: b.getBlock().getDrops()) {
+ b.getWorld().dropItemNaturally(b, drop);
+ }
+
+ b.getBlock().setType(Material.AIR);
+ }
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java
new file mode 100644
index 000000000..13c235d4c
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java
@@ -0,0 +1,61 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.CreatureSpawner;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class PickaxeOfContainment extends SimpleSlimefunItem {
+
+ public PickaxeOfContainment(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ // Refactored it into this so we don't need to call e.getBlock() all the time.
+ Block b = e.getBlock();
+ if (b.getType() != Material.SPAWNER) return true;
+
+ // If the spawner's BlockStorage has BlockInfo, then it's not a vanilla spawner and shouldn't give a broken spawner.
+ ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone();
+ if (BlockStorage.hasBlockInfo(b)) {
+ spawner = SlimefunItems.REPAIRED_SPAWNER.clone();
+ }
+
+ ItemMeta im = spawner.getItemMeta();
+ List lore = im.getLore();
+
+ for (int i = 0; i < lore.size(); i++) {
+ if (lore.get(i).contains("")) lore.set(i, lore.get(i).replace("", StringUtils.format(((CreatureSpawner) b.getState()).getSpawnedType().toString())));
+ }
+
+ im.setLore(lore);
+ spawner.setItemMeta(im);
+ b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner);
+ e.setExpToDrop(0);
+ e.setDropItems(false);
+ return true;
+ }
+ else {
+ if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false);
+ return false;
+ }
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java
index 712e9d874..39db089c7 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java
@@ -7,10 +7,10 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
-import me.mrCookieSlime.Slimefun.utils.DamageableItem;
public class PickaxeOfTheSeeker extends SimpleSlimefunItem implements DamageableItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java
new file mode 100644
index 000000000..58353ddb9
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java
@@ -0,0 +1,56 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class PickaxeOfVeinMining extends SimpleSlimefunItem {
+
+ public PickaxeOfVeinMining(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ if (e.getBlock().getType().toString().endsWith("_ORE")) {
+ List blocks = new ArrayList<>();
+ Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16);
+
+ for (Location block: blocks) {
+ if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), block, Action.BREAK_BLOCK)) {
+ Block b = block.getBlock();
+ b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
+
+ for (ItemStack drop: b.getDrops()) {
+ b.getWorld().dropItemNaturally(b.getLocation(), drop.getType().isBlock() ? drop: new CustomItem(drop, fortune));
+ }
+
+ b.setType(Material.AIR);
+ }
+ }
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java
index d24641b4b..9c1d5b67e 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java
@@ -21,10 +21,10 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
-import me.mrCookieSlime.Slimefun.utils.DamageableItem;
public class SeismicAxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java
new file mode 100644
index 000000000..9309af0d4
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java
@@ -0,0 +1,50 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class SmeltersPickaxe extends SimpleSlimefunItem {
+
+ public SmeltersPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ if (BlockStorage.hasBlockInfo(e.getBlock())) return true;
+ if (e.getBlock().getType() == Material.PLAYER_HEAD) return true;
+
+ int j = -1;
+ List dropsList = (List) e.getBlock().getDrops();
+ for (int i = 0; i < dropsList.size(); i++) {
+ if (dropsList.get(i) != null) {
+ j++;
+ drops.add(e.getBlock().getType().toString().endsWith("_ORE") ? new CustomItem(dropsList.get(i), fortune): dropsList.get(i));
+ if (RecipeCalculator.getSmeltedOutput(drops.get(i).getType()) != null) {
+ e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1);
+ drops.set(j, new CustomItem(RecipeCalculator.getSmeltedOutput(drops.get(i).getType()), drops.get(i).getAmount()));
+ }
+ }
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java
new file mode 100644
index 000000000..326d33a39
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SoulboundRune.java
@@ -0,0 +1,98 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Sound;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Item;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler;
+import me.mrCookieSlime.Slimefun.Setup.Messages;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class SoulboundRune extends SimpleSlimefunItem {
+
+ public SoulboundRune(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) {
+ super(category, item, id, type, recipe);
+ }
+
+ @Override
+ public ItemDropHandler getItemHandler() {
+ return (e, p, i) -> {
+ ItemStack item = i.getItemStack();
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RUNE_SOULBOUND, true)) {
+
+ if (!Slimefun.hasUnlocked(p, SlimefunItems.RUNE_SOULBOUND, true)) {
+ return true;
+ }
+
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
+ // Being sure the entity is still valid and not picked up or whatsoever.
+ if (!i.isValid()) return;
+
+ Location l = i.getLocation();
+ Collection entites = l.getWorld().getNearbyEntities(l, 1.5, 1.5, 1.5,
+ entity -> entity instanceof Item && !SlimefunManager.isItemSoulbound(((Item) entity).getItemStack()) &&
+ !SlimefunManager.isItemSimiliar(((Item) entity).getItemStack(), SlimefunItems.RUNE_SOULBOUND, true)
+ );
+
+ if (entites.isEmpty()) return;
+
+ Entity entity = entites.stream().findFirst().get();
+ ItemStack ench = ((Item) entity).getItemStack();
+ Item ent = (Item) entity;
+
+ if (ench.getAmount() == 1) {
+ e.setCancelled(true);
+
+ ItemMeta enchMeta = ench.getItemMeta();
+ List lore = enchMeta.hasLore() ? enchMeta.getLore(): new ArrayList<>();
+
+ // This lightning is just an effect, it deals no damage.
+ l.getWorld().strikeLightningEffect(l);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
+
+ // Being sure entities are still valid and not picked up or whatsoever.
+ if (i.isValid() && ent.isValid()) {
+
+ l.getWorld().createExplosion(l, 0.0F);
+ l.getWorld().playSound(l, Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F);
+
+ lore.add(ChatColor.GRAY + "Soulbound");
+
+ enchMeta.setLore(lore);
+ ench.setItemMeta(enchMeta);
+
+ ent.remove();
+ i.remove();
+ l.getWorld().dropItemNaturally(l, ench);
+
+ Messages.local.sendTranslation(p, "messages.soulbound-rune.success", true);
+ }
+ }, 10L);
+ }
+ else {
+ Messages.local.sendTranslation(p, "messages.soulbound-rune.fail", true);
+ }
+ }, 20L);
+
+ return true;
+ }
+ return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java
index f4f3226a3..849d5569d 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java
@@ -82,7 +82,7 @@ public class StormStaff extends SimpleSlimefunItem {
return true;
}
else if (ChatColor.translateAlternateColorCodes('&', "&e" + i + " Uses &7left").equals(itemLore.get(4))) {
- itemLore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + (i - 1) + " " + (i > 2 ? "Uses": "Use") + " &7left"));
+ itemLore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + (i - 1) + ' ' + (i > 2 ? "Uses": "Use") + " &7left"));
e.setCancelled(true);
// Saving the changes to lore and item.
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java
new file mode 100644
index 000000000..dae0619fe
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java
@@ -0,0 +1,83 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.Random;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Creeper;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Skeleton;
+import org.bukkit.entity.WitherSkeleton;
+import org.bukkit.entity.Zombie;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.SkullMeta;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class SwordOfBeheading extends SimpleSlimefunItem {
+
+ private final Random random = new Random();
+
+ private int chanceZombie;
+ private int chanceSkeleton;
+ private int chanceCreeper;
+ private int chanceWitherSkeleton;
+ private int chancePlayer;
+
+ public SwordOfBeheading(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public EntityKillHandler getItemHandler() {
+ return (e, entity, killer, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ if (e.getEntity() instanceof Zombie) {
+ if (random.nextInt(100) < chanceZombie) {
+ e.getDrops().add(new ItemStack(Material.ZOMBIE_HEAD));
+ }
+ }
+ else if (e.getEntity() instanceof WitherSkeleton) {
+ if (random.nextInt(100) < chanceWitherSkeleton)
+ e.getDrops().add(new ItemStack(Material.WITHER_SKELETON_SKULL));
+ }
+ else if (e.getEntity() instanceof Skeleton) {
+ if (random.nextInt(100) < chanceSkeleton)
+ e.getDrops().add(new ItemStack(Material.SKELETON_SKULL));
+ }
+ else if (e.getEntity() instanceof Creeper) {
+ if (random.nextInt(100) < chanceCreeper) {
+ e.getDrops().add(new ItemStack(Material.CREEPER_HEAD));
+ }
+ }
+ else if (e.getEntity() instanceof Player) {
+ if (random.nextInt(100) < chancePlayer) {
+ ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
+ ItemMeta meta = skull.getItemMeta();
+ ((SkullMeta) meta).setOwningPlayer((Player) e.getEntity());
+ skull.setItemMeta(meta);
+
+ e.getDrops().add(skull);
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public void postRegister() {
+ chanceZombie = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.ZOMBIE");
+ chanceSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.SKELETON");
+ chanceCreeper = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.CREEPER");
+ chanceWitherSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.WITHER_SKELETON");
+ chancePlayer = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.PLAYER");
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java
new file mode 100644
index 000000000..6086c4a2c
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java
@@ -0,0 +1,27 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import org.bukkit.entity.Item;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener;
+
+public class AncientPedestal extends SlimefunItem {
+
+ public AncientPedestal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+
+ SlimefunItem.registerBlockHandler(getID(), (p, b, tool, reason) -> {
+ Item stack = AncientAltarListener.findItem(b);
+ if (stack != null) {
+ stack.removeMetadata("item_placed", SlimefunPlugin.instance);
+ b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName()));
+ stack.remove();
+ }
+ return true;
+ });
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java
index 1b4f9a46f..f68893a66 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java
@@ -28,7 +28,7 @@ public class Composter extends SlimefunGadget {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new ItemInteractionHandler() {
@Override
@@ -73,8 +73,6 @@ public class Composter extends SlimefunGadget {
return false;
}
});
-
- super.register(slimefun);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java
index c5b0f234d..d349db5f0 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java
@@ -29,7 +29,7 @@ public class Crucible extends SlimefunGadget {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new ItemInteractionHandler() {
@Override
@@ -81,8 +81,6 @@ public class Crucible extends SlimefunGadget {
return false;
}
});
-
- super.register(slimefun);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java
index 3e9374ae0..23c35c62a 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java
@@ -1,44 +1,26 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
-import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.holograms.InfusedHopperHologram;
public class InfusedHopper extends SimpleSlimefunItem {
public InfusedHopper(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
-
- SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- InfusedHopperHologram.getArmorStand(b, true);
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- InfusedHopperHologram.remove(b);
- return true;
- }
- });
}
@Override
@@ -53,15 +35,13 @@ public class InfusedHopper extends SimpleSlimefunItem {
return;
}
- ArmorStand hologram = InfusedHopperHologram.getArmorStand(b, true);
+ Location l = b.getLocation().add(0.5, 1.2, 0.5);
boolean sound = false;
- for (Entity n: hologram.getNearbyEntities(3.5D, 3.5D, 3.5D)) {
- if (n instanceof Item && !n.hasMetadata("no_pickup") && n.getLocation().distance(hologram.getLocation()) > 0.4D) {
- n.setVelocity(new Vector(0, 0.1, 0));
- n.teleport(hologram);
- sound = true;
- }
+ for (Entity n: b.getWorld().getNearbyEntities(l, 3.5D, 3.5D, 3.5D, n -> n instanceof Item && n.isValid() && !n.hasMetadata("no_pickup") && n.getLocation().distanceSquared(l) > 0.1)) {
+ n.setVelocity(new Vector(0, 0.1, 0));
+ n.teleport(l);
+ sound = true;
}
if (sound) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java
index c06ae96b0..067748973 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java
@@ -16,9 +16,7 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -36,7 +34,7 @@ public class ReactorAccessPort extends SlimefunItem {
public ReactorAccessPort(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
- new BlockMenuPreset(name, getInventoryTitle()) {
+ new BlockMenuPreset(name, "&2Reactor Access Port") {
@Override
public void init() {
@@ -97,36 +95,32 @@ public class ReactorAccessPort extends SlimefunItem {
}
};
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
-
- if (inv != null) {
- for (int slot : getFuelSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
-
- for (int slot : getCoolantSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
-
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+
+ if (inv != null) {
+ for (int slot : getFuelSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getCoolantSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
@@ -152,10 +146,6 @@ public class ReactorAccessPort extends SlimefunItem {
preset.addItem(7, new CustomItem(SlimefunItems.REACTOR_COOLANT_CELL, "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells", "&4Without any Coolant Cells, your Reactor", "&4will explode"),(p, slot, item, action) -> false);
}
- public String getInventoryTitle() {
- return "&2Reactor Access Port";
- }
-
public int[] getInputSlots() {
return new int[] {19, 28, 37, 25, 34, 43};
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java
index 253c3ab13..25721f1f9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java
@@ -9,11 +9,11 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public class TrashCan extends SlimefunItem implements InventoryBlock {
@@ -21,7 +21,7 @@ public class TrashCan extends SlimefunItem implements InventoryBlock {
public TrashCan(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
- createPreset(getID(), "&4Trash Can", this::constructMenu);
+ createPreset(this, "&4Trash Can", this::constructMenu);
}
private void constructMenu(BlockMenuPreset preset) {
@@ -43,7 +43,7 @@ public class TrashCan extends SlimefunItem implements InventoryBlock {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -59,8 +59,6 @@ public class TrashCan extends SlimefunItem implements InventoryBlock {
return false;
}
});
-
- super.register(slimefun);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java
index 585cfe0d1..e7b999483 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java
@@ -8,7 +8,6 @@ import org.bukkit.block.Block;
import org.bukkit.entity.Ageable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
@@ -17,9 +16,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -27,33 +25,28 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAcceleratorHologram;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
+ protected int energyConsumption = 14;
+
public AnimalGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
- createPreset(getID(), "&bGrowth Accelerator", this::constructMenu);
+ createPreset(this, "&bGrowth Accelerator", this::constructMenu);
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- AnimalGrowthAcceleratorHologram.remove(b);
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
@@ -63,10 +56,6 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl
}
}
- public int getEnergyConsumption() {
- return 14;
- }
-
@Override
public int[] getInputSlots() {
return new int[] {10, 11, 12, 13, 14, 15, 16};
@@ -78,7 +67,7 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -95,23 +84,24 @@ public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBl
return true;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
- for (Entity n : AnimalGrowthAcceleratorHologram.getArmorStand(b, true).getNearbyEntities(3D, 3D, 3D)) {
- if (n instanceof Ageable && !((Ageable) n).isAdult()) {
- for (int slot: getInputSlots()) {
- if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
- ChargableBlock.addCharge(b, -getEnergyConsumption());
- BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
- ((Ageable) n).setAge(((Ageable) n).getAge() + 2000);
- if (((Ageable) n).getAge() > 0) ((Ageable) n).setAge(0);
- n.getWorld().spawnParticle(Particle.VILLAGER_HAPPY,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F);
- return;
+ for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 3.0, 3.0, 3.0, n -> n instanceof Ageable && n.isValid() && !((Ageable) n).isAdult())) {
+ for (int slot: getInputSlots()) {
+ if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
+ if (ChargableBlock.getCharge(b) < energyConsumption) return;
+
+ ChargableBlock.addCharge(b, -energyConsumption);
+ BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
+ ((Ageable) n).setAge(((Ageable) n).getAge() + 2000);
+
+ if (((Ageable) n).getAge() > 0) {
+ ((Ageable) n).setAge(0);
}
+
+ n.getWorld().spawnParticle(Particle.VILLAGER_HAPPY,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F);
+ return;
}
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java
index 8c773a8d5..9ea1cdc09 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java
@@ -5,22 +5,19 @@ import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.block.Block;
+import org.bukkit.entity.Animals;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.CSCoreLibPlugin.general.World.Animals;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -28,51 +25,28 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-import me.mrCookieSlime.Slimefun.holograms.AutoBreederHologram;
-public class AutoBreeder extends SlimefunItem {
+public class AutoBreeder extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
+ protected int energyConsumption = 60;
+
public AutoBreeder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
+ createPreset(this, "&6Auto Breeder", this::constructMenu);
- new BlockMenuPreset(name, "&6Auto Breeder") {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow == ItemTransportFlow.INSERT) return getInputSlots();
- return new int[0];
- }
- };
-
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- AutoBreederHologram.remove(b);
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
@@ -82,16 +56,18 @@ public class AutoBreeder extends SlimefunItem {
}
}
- public int getEnergyConsumption() {
- return 60;
- }
-
+ @Override
public int[] getInputSlots() {
return new int[] {10, 11, 12, 13, 14, 15, 16};
}
@Override
- public void register(boolean slimefun) {
+ public int[] getOutputSlots() {
+ return new int[0];
+ }
+
+ @Override
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -108,22 +84,20 @@ public class AutoBreeder extends SlimefunItem {
return true;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) throws Exception {
- for (Entity n : AutoBreederHologram.getArmorStand(b, true).getNearbyEntities(4D, 2D, 4D)) {
- if (Animals.isFeedable(n)) {
- for (int slot : getInputSlots()) {
- if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
- ChargableBlock.addCharge(b, -getEnergyConsumption());
- BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
- Animals.feed(n);
- n.getWorld().spawnParticle(Particle.HEART,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F);
- return;
- }
+ for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), 4.0, 2.0, 4.0, n -> n instanceof Animals && n.isValid() && ((Animals) n).isAdult() && !((Animals) n).isLoveMode())) {
+ for (int slot : getInputSlots()) {
+ if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
+ if (ChargableBlock.getCharge(b) < energyConsumption) return;
+
+ ChargableBlock.addCharge(b, -energyConsumption);
+ BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
+
+ ((Animals) n).setLoveModeTicks(600);
+ n.getWorld().spawnParticle(Particle.HEART,((LivingEntity) n).getEyeLocation(), 8, 0.2F, 0.2F, 0.2F);
+ return;
}
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java
index 21a10c933..43e08855d 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java
@@ -16,41 +16,41 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
public class AutoDrier extends AContainer implements RecipeDisplayItem {
- private final List recipes = new ArrayList<>();
+ private final List recipeList = new ArrayList<>();
public AutoDrier(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
- recipes.add(new ItemStack(Material.ROTTEN_FLESH));
- recipes.add(new ItemStack(Material.LEATHER));
+ recipeList.add(new ItemStack(Material.ROTTEN_FLESH));
+ recipeList.add(new ItemStack(Material.LEATHER));
- recipes.add(new ItemStack(Material.WET_SPONGE));
- recipes.add(new ItemStack(Material.SPONGE));
+ recipeList.add(new ItemStack(Material.WET_SPONGE));
+ recipeList.add(new ItemStack(Material.SPONGE));
- recipes.add(new ItemStack(Material.KELP));
- recipes.add(new ItemStack(Material.DRIED_KELP));
+ recipeList.add(new ItemStack(Material.KELP));
+ recipeList.add(new ItemStack(Material.DRIED_KELP));
- recipes.add(new ItemStack(Material.COOKED_BEEF));
- recipes.add(SlimefunItems.BEEF_JERKY);
+ recipeList.add(new ItemStack(Material.COOKED_BEEF));
+ recipeList.add(SlimefunItems.BEEF_JERKY);
- recipes.add(new ItemStack(Material.POTION));
- recipes.add(new ItemStack(Material.GLASS_BOTTLE));
+ recipeList.add(new ItemStack(Material.POTION));
+ recipeList.add(new ItemStack(Material.GLASS_BOTTLE));
- recipes.add(new ItemStack(Material.OAK_SAPLING));
- recipes.add(new ItemStack(Material.STICK, 2));
+ recipeList.add(new ItemStack(Material.OAK_SAPLING));
+ recipeList.add(new ItemStack(Material.STICK, 2));
- recipes.add(new ItemStack(Material.OAK_LEAVES));
- recipes.add(new ItemStack(Material.STICK));
+ recipeList.add(new ItemStack(Material.OAK_LEAVES));
+ recipeList.add(new ItemStack(Material.STICK));
- recipes.add(new ItemStack(Material.WATER_BUCKET));
- recipes.add(new ItemStack(Material.BUCKET));
+ recipeList.add(new ItemStack(Material.WATER_BUCKET));
+ recipeList.add(new ItemStack(Material.BUCKET));
}
@Override
@@ -65,7 +65,7 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem {
@Override
public List getDisplayRecipes() {
- return recipes;
+ return recipeList;
}
@Override
@@ -100,9 +100,9 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem {
Material mat = item.getType();
ItemStack output = null;
- for (int i = 0; i < recipes.size(); i += 2) {
- if (SlimefunManager.isItemSimiliar(item, recipes.get(i), true)) {
- output = recipes.get(i + 1);
+ for (int i = 0; i < recipeList.size(); i += 2) {
+ if (SlimefunManager.isItemSimiliar(item, recipeList.get(i), true)) {
+ output = recipeList.get(i + 1);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java
index 91f9c90b7..8ac0a250f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java
@@ -24,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
@@ -31,7 +32,6 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import me.mrCookieSlime.Slimefun.api.item_transport.RecipeSorter;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public abstract class AutomatedCraftingChamber extends SlimefunItem implements InventoryBlock {
@@ -172,7 +172,7 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem implements I
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -185,8 +185,6 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem implements I
return false;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java
index a0e793913..831200b03 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java
@@ -1,8 +1,5 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
-import java.util.List;
-
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@@ -11,8 +8,7 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
public abstract class CarbonPress extends AContainer implements RecipeDisplayItem {
@@ -29,24 +25,20 @@ public abstract class CarbonPress extends AContainer implements RecipeDisplayIte
registerRecipe(60, new ItemStack[] {SlimefunItems.CARBON_CHUNK}, new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND});
registerRecipe(90, new ItemStack[] {SlimefunItems.RAW_CARBONADO}, new ItemStack[] {SlimefunItems.CARBONADO});
}
-
- @Override
- public List getDisplayRecipes() {
- List displayRecipes = new ArrayList<>(recipes.size() * 2);
-
- for (MachineRecipe recipe: recipes) {
- displayRecipes.add(recipe.getInput()[0]);
- displayRecipes.add(recipe.getOutput()[0]);
- }
-
- return displayRecipes;
- }
@Override
public String getMachineIdentifier() {
return "CARBON_PRESS";
}
-
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.DIAMOND_PICKAXE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cCarbon Press";
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java
index 856064390..493b2805b 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java
@@ -8,7 +8,6 @@ import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.block.Block;
import org.bukkit.block.data.Ageable;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
@@ -17,9 +16,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -27,13 +25,11 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public abstract class CropGrowthAccelerator extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
-
- public static final Map crops = new EnumMap<>(Material.class);
+ private static final Map crops = new EnumMap<>(Material.class);
static {
crops.put(Material.WHEAT, 7);
@@ -47,23 +43,19 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve
public CropGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
- createPreset(getID(), "&bGrowth Accelerator", this::constructMenu);
+ createPreset(this, "&bGrowth Accelerator", this::constructMenu);
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot: getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot: getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
@@ -90,7 +82,7 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -107,8 +99,6 @@ public abstract class CropGrowthAccelerator extends SlimefunItem implements Inve
return true;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java
index 73c245cef..6da65a837 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java
@@ -16,10 +16,10 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
public abstract class ElectricGoldPan extends AContainer implements RecipeDisplayItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java
index 2a3b1e7c8..ee0c76b9c 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java
@@ -1,8 +1,5 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
-import java.util.List;
-
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@@ -11,7 +8,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
public abstract class ElectricIngotFactory extends AContainer implements RecipeDisplayItem {
@@ -32,21 +29,19 @@ public abstract class ElectricIngotFactory extends AContainer implements RecipeD
registerRecipe(new MachineRecipe(8, new ItemStack[] {SlimefunItems.ZINC_DUST}, new ItemStack[] {SlimefunItems.ZINC_INGOT}));
}
- @Override
- public List getDisplayRecipes() {
- List displayRecipes = new ArrayList<>(recipes.size() * 2);
-
- for (MachineRecipe recipe: recipes) {
- displayRecipes.add(recipe.getInput()[0]);
- displayRecipes.add(recipe.getOutput()[0]);
- }
-
- return displayRecipes;
- }
-
@Override
public String getMachineIdentifier() {
return "ELECTRIC_INGOT_FACTORY";
}
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.FLINT_AND_STEEL);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cElectric Ingot Factory";
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java
index cb4f4fa88..319f53474 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java
@@ -11,7 +11,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
public class ElectricIngotPulverizer extends AContainer implements RecipeDisplayItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java
new file mode 100644
index 000000000..f2439dcd4
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java
@@ -0,0 +1,32 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
+
+public abstract class ElectricOreGrinder extends AContainer implements RecipeDisplayItem {
+
+ public ElectricOreGrinder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, name, recipeType, recipe);
+ }
+
+ @Override
+ public String getMachineIdentifier() {
+ return "ELECTRIC_ORE_GRINDER";
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.IRON_PICKAXE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&bElectric Ore Grinder";
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java
index ab3c0354b..9e8c888f6 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java
@@ -16,9 +16,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -82,29 +79,25 @@ public abstract class ElectricSmeltery extends AContainer {
}
};
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b);
- processing.remove(b);
- return true;
}
+ progress.remove(b);
+ processing.remove(b);
+ return true;
});
this.registerDefaultRecipes();
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java
new file mode 100644
index 000000000..5a08dceca
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java
@@ -0,0 +1,52 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.GPS.Elevator;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class ElevatorPlate extends SimpleSlimefunItem {
+
+ public ElevatorPlate(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+
+ SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() {
+
+ @Override
+ public void onPlace(Player p, Block b, SlimefunItem item) {
+ BlockStorage.addBlockInfo(b, "floor", "&rFloor #0");
+ BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
+ }
+
+ @Override
+ public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (e.getClickedBlock() == null) return false;
+ String id = BlockStorage.checkID(e.getClickedBlock());
+ if (id == null || !id.equals(getID())) return false;
+
+ if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) {
+ Elevator.openEditor(p, e.getClickedBlock());
+ }
+
+ return true;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java
index 11ca83572..d4bd78166 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/EnergyRegulator.java
@@ -36,7 +36,7 @@ public class EnergyRegulator extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -49,8 +49,6 @@ public class EnergyRegulator extends SlimefunItem {
EnergyNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b);
}
});
-
- super.register(slimefun);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java
index dbded71b0..c705679a9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FluidPump.java
@@ -1,9 +1,7 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -22,27 +20,25 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public class FluidPump extends SlimefunItem implements InventoryBlock {
- public static Map processing = new HashMap<>();
- public static Map progress = new HashMap<>();
-
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44, 22};
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
private static final int[] border_out = {14, 15, 16, 17, 23, 26, 32, 33, 34, 35};
+ protected int energyConsumption = 32;
+
public FluidPump(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
- createPreset(getID(), "&9Fluid Pump", this::constructMenu);
+ createPreset(this, "&9Fluid Pump", this::constructMenu);
}
private void constructMenu(BlockMenuPreset preset) {
@@ -88,13 +84,13 @@ public class FluidPump extends SlimefunItem implements InventoryBlock {
if (fluid.getType() == Material.LAVA) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
+ if (ChargableBlock.getCharge(b) < energyConsumption) return;
ItemStack output = new ItemStack(Material.LAVA_BUCKET);
if (!fits(b, output)) return;
- ChargableBlock.addCharge(b, -getEnergyConsumption());
+ ChargableBlock.addCharge(b, -energyConsumption);
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
pushItems(b, output);
@@ -110,13 +106,13 @@ public class FluidPump extends SlimefunItem implements InventoryBlock {
else if (fluid.getType() == Material.WATER) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
+ if (ChargableBlock.getCharge(b) < energyConsumption) return;
ItemStack output = new ItemStack(Material.WATER_BUCKET);
if (!fits(b, output)) return;
- ChargableBlock.addCharge(b, -getEnergyConsumption());
+ ChargableBlock.addCharge(b, -energyConsumption);
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
pushItems(b, output);
@@ -127,13 +123,9 @@ public class FluidPump extends SlimefunItem implements InventoryBlock {
}
}
}
-
- private int getEnergyConsumption() {
- return 32;
- }
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -146,8 +138,6 @@ public class FluidPump extends SlimefunItem implements InventoryBlock {
return true;
}
});
-
- super.register(slimefun);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java
index ca225bd0d..962d9738b 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodComposter.java
@@ -1,16 +1,13 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
-import java.util.List;
-
+import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
public abstract class FoodComposter extends AContainer implements RecipeDisplayItem {
@@ -29,21 +26,19 @@ public abstract class FoodComposter extends AContainer implements RecipeDisplayI
registerRecipe(30, new ItemStack[] {SlimefunItems.APPLE_ORGANIC_FOOD}, new ItemStack[] {SlimefunItems.APPLE_FERTILIZER});
}
- @Override
- public List getDisplayRecipes() {
- List displayRecipes = new ArrayList<>(recipes.size() * 2);
-
- for (MachineRecipe recipe: recipes) {
- displayRecipes.add(recipe.getInput()[0]);
- displayRecipes.add(recipe.getOutput()[0]);
- }
-
- return displayRecipes;
- }
-
@Override
public String getMachineIdentifier() {
return "FOOD_COMPOSTER";
}
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.GOLDEN_HOE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cFood Composter";
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java
index eea001c0b..bdd210f5f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/FoodFabricator.java
@@ -1,13 +1,13 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
-
public abstract class FoodFabricator extends AContainer {
public FoodFabricator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
@@ -28,5 +28,15 @@ public abstract class FoodFabricator extends AContainer {
public String getMachineIdentifier() {
return "FOOD_FABRICATOR";
}
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.GOLDEN_HOE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cFood Fabricator";
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java
index 52d177863..d0fc50fba 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Freezer.java
@@ -5,7 +5,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import java.util.ArrayList;
import java.util.List;
@@ -24,7 +24,8 @@ public abstract class Freezer extends AContainer implements RecipeDisplayItem {
registerRecipe(2, new ItemStack[] {new ItemStack(Material.WATER_BUCKET)}, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.ICE)});
registerRecipe(8, new ItemStack[] {new ItemStack(Material.LAVA_BUCKET)}, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.OBSIDIAN)});
registerRecipe(4, new ItemStack[] {new ItemStack(Material.ICE)}, new ItemStack[] {new ItemStack(Material.PACKED_ICE)});
- registerRecipe(6, new ItemStack[] {new ItemStack(Material.PACKED_ICE)}, new ItemStack[] {SlimefunItems.REACTOR_COOLANT_CELL});
+ registerRecipe(6, new ItemStack[] {new ItemStack(Material.PACKED_ICE)}, new ItemStack[] {new ItemStack(Material.BLUE_ICE)});
+ registerRecipe(8, new ItemStack[] {new ItemStack(Material.BLUE_ICE)}, new ItemStack[] {SlimefunItems.REACTOR_COOLANT_CELL});
}
@Override
@@ -39,6 +40,16 @@ public abstract class Freezer extends AContainer implements RecipeDisplayItem {
return displayRecipes;
}
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.GOLDEN_PICKAXE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&bFreezer";
+ }
+
@Override
public String getMachineIdentifier() {
return "FREEZER";
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java
index bef4a3c05..cf41b2a35 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/HeatedPressureChamber.java
@@ -117,7 +117,7 @@ public abstract class HeatedPressureChamber extends AContainer {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -130,8 +130,6 @@ public abstract class HeatedPressureChamber extends AContainer {
return false;
}
});
-
- super.register(slimefun);
}
@Override
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java
index 38294d8d6..49129e58a 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/Refinery.java
@@ -15,10 +15,10 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
public abstract class Refinery extends AContainer implements RecipeDisplayItem {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java
index 417a710e9..f3ce751fb 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/WitherAssembler.java
@@ -38,6 +38,8 @@ public class WitherAssembler extends SlimefunItem {
private static final int[] border_1 = {9, 10, 11, 18, 20, 27, 29, 36, 37, 38};
private static final int[] border_2 = {15, 16, 17, 24, 26, 33, 35, 42, 43, 44};
+ protected int energyConsumption = 4096;
+
public WitherAssembler(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
@@ -179,14 +181,14 @@ public class WitherAssembler extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
public void tick(final Block b, SlimefunItem sf, Config data) {
if (BlockStorage.getLocationInfo(b.getLocation(), "enabled").equals("false")) return;
if (lifetime % 60 == 0) {
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
+ if (ChargableBlock.getCharge(b) < energyConsumption) return;
int soulsand = 0;
int skulls = 0;
@@ -240,7 +242,7 @@ public class WitherAssembler extends SlimefunItem {
}
}
- ChargableBlock.addCharge(b, -getEnergyConsumption());
+ ChargableBlock.addCharge(b, -energyConsumption);
final double offset = Double.parseDouble(BlockStorage.getLocationInfo(b.getLocation(), "offset"));
@@ -259,12 +261,6 @@ public class WitherAssembler extends SlimefunItem {
return false;
}
});
-
- super.register(slimefun);
- }
-
- public int getEnergyConsumption() {
- return 4096;
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java
similarity index 71%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java
index d1cb51de8..5019d44b4 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.Iterator;
import java.util.logging.Level;
@@ -17,22 +17,23 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.holograms.XPCollectorHologram;
-import me.mrCookieSlime.Slimefun.utils.InventoryBlock;
public class XPCollector extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
+ protected int energyConsumption = 10;
+
public XPCollector(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
- createPreset(getID(), "&aEXP Collector", this::constructMenu);
+ createPreset(this, "&aEXP Collector", this::constructMenu);
registerBlockHandler(name, new SlimefunBlockHandler() {
@@ -43,7 +44,6 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- XPCollectorHologram.remove(b);
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot: getOutputSlots()) {
@@ -76,12 +76,8 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
}
}
- public int getEnergyConsumption() {
- return 10;
- }
-
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -98,35 +94,29 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
return true;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
- Iterator iterator = XPCollectorHologram.getArmorStand(b, true).getNearbyEntities(4D, 4D, 4D).iterator();
- while (iterator.hasNext()) {
+ Iterator iterator = b.getWorld().getNearbyEntities(b.getLocation(), 4.0, 4.0, 4.0, n -> n instanceof ExperienceOrb && n.isValid()).iterator();
+ int xp = 0;
+
+ while (iterator.hasNext() && xp == 0) {
Entity n = iterator.next();
- if (n instanceof ExperienceOrb) {
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
-
- if (n.isValid()) {
- int xp = getEXP(b) + ((ExperienceOrb) n).getExperience();
-
- ChargableBlock.addCharge(b, -getEnergyConsumption());
- n.remove();
-
- int withdrawn = 0;
- for (int level = 0; level < getEXP(b); level = level + 10) {
- if (fits(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"))) {
- withdrawn = withdrawn + 10;
- pushItems(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"));
- }
- }
- BlockStorage.addBlockInfo(b, "stored-exp", String.valueOf(xp - withdrawn));
-
- return;
+ if (ChargableBlock.getCharge(b) < energyConsumption) return;
+
+ xp = getEXP(b) + ((ExperienceOrb) n).getExperience();
+
+ ChargableBlock.addCharge(b, -energyConsumption);
+ n.remove();
+
+ int withdrawn = 0;
+ for (int level = 0; level < getEXP(b); level = level + 10) {
+ if (fits(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"))) {
+ withdrawn = withdrawn + 10;
+ pushItems(b, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"));
}
}
+ BlockStorage.addBlockInfo(b, "stored-exp", String.valueOf(xp - withdrawn));
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java
new file mode 100644
index 000000000..e972e9aa5
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CoalGenerator.java
@@ -0,0 +1,49 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators;
+
+import org.bukkit.Material;
+import org.bukkit.Tag;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
+
+public abstract class CoalGenerator extends AGenerator {
+
+ public CoalGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public void registerDefaultRecipes() {
+ registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK)));
+ registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD)));
+
+ // Coals
+ for (Material mat: Tag.ITEMS_COALS.getValues()) {
+ registerFuel(new MachineFuel(8, new ItemStack(mat)));
+ }
+
+ // Logs
+ for (Material mat: Tag.LOGS.getValues()) {
+ registerFuel(new MachineFuel(2, new ItemStack(mat)));
+ }
+
+ // Wooden Planks
+ for (Material mat: Tag.PLANKS.getValues()) {
+ registerFuel(new MachineFuel(1, new ItemStack(mat)));
+ }
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.FLINT_AND_STEEL);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cCoal Generator";
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java
new file mode 100644
index 000000000..080e9bc86
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/CombustionGenerator.java
@@ -0,0 +1,34 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
+
+public abstract class CombustionGenerator extends AGenerator {
+
+ public CombustionGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public void registerDefaultRecipes() {
+ registerFuel(new MachineFuel(30, SlimefunItems.BUCKET_OF_OIL));
+ registerFuel(new MachineFuel(90, SlimefunItems.BUCKET_OF_FUEL));
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.FLINT_AND_STEEL);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cCombustion Reactor";
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java
new file mode 100644
index 000000000..a6705e8f9
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/generators/LavaGenerator.java
@@ -0,0 +1,32 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
+
+public abstract class LavaGenerator extends AGenerator {
+
+ public LavaGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public void registerDefaultRecipes() {
+ registerFuel(new MachineFuel(40, new ItemStack(Material.LAVA_BUCKET)));
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.FLINT_AND_STEEL);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&4Lava Generator";
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java
index 26d2dd234..9b3c59acc 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/AutomatedPanningMachine.java
@@ -50,8 +50,10 @@ public class AutomatedPanningMachine extends MultiBlockMachine {
if (input != null && input.getType() == Material.GRAVEL) {
PlayerInventory.consumeItemInHand(p);
+
for (int i = 1; i < 7; i++) {
int j = i;
+
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL);
if (j == 6) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java
index e3222e9cb..789434a83 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Juicer.java
@@ -29,7 +29,8 @@ public class Juicer extends MultiBlockMachine {
new ItemStack(Material.APPLE), SlimefunItems.APPLE_JUICE,
new ItemStack(Material.MELON), SlimefunItems.MELON_JUICE,
new ItemStack(Material.CARROT), SlimefunItems.CARROT_JUICE,
- new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE
+ new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE,
+ new ItemStack(Material.GOLDEN_APPLE), SlimefunItems.GOLDEN_APPLE_JUICE
},
Material.NETHER_BRICK_FENCE
);
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java
index f70b40be4..d35c14915 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/MagicWorkbench.java
@@ -107,7 +107,7 @@ public class MagicWorkbench extends MultiBlockMachine {
}
}
- if (id.equals("")) {
+ if (id.isEmpty()) {
for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) {
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) {
int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID();
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java
index dec794fec..259077952 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/TableSaw.java
@@ -1,7 +1,11 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
+import java.util.ArrayList;
+import java.util.List;
+
import org.bukkit.Effect;
import org.bukkit.Material;
+import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -11,6 +15,8 @@ import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
public class TableSaw extends MultiBlockMachine {
+
+ private final List displayRecipes = new ArrayList<>();
public TableSaw() {
super(
@@ -21,6 +27,16 @@ public class TableSaw extends MultiBlockMachine {
new ItemStack[0],
Material.STONECUTTER
);
+
+ for (Material log: Tag.LOGS.getValues()) {
+ displayRecipes.add(new ItemStack(log));
+ displayRecipes.add(new ItemStack(MaterialHelper.getWoodFromLog(log), 8));
+ }
+ }
+
+ @Override
+ public List getDisplayRecipes() {
+ return displayRecipes;
}
@Override
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java
new file mode 100644
index 000000000..7dd695a97
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/EntityKillHandler.java
@@ -0,0 +1,16 @@
+package me.mrCookieSlime.Slimefun.Objects.handlers;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDeathEvent;
+import org.bukkit.inventory.ItemStack;
+
+@FunctionalInterface
+public interface EntityKillHandler extends ItemHandler {
+
+ boolean onKill(EntityDeathEvent e, Entity entity, Player killer, ItemStack item);
+
+ default String toCodename() {
+ return "EntityKillHandler";
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java
new file mode 100644
index 000000000..ed1913840
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemDropHandler.java
@@ -0,0 +1,15 @@
+package me.mrCookieSlime.Slimefun.Objects.handlers;
+
+import org.bukkit.entity.Item;
+import org.bukkit.entity.Player;
+import org.bukkit.event.player.PlayerDropItemEvent;
+
+@FunctionalInterface
+public interface ItemDropHandler extends ItemHandler {
+
+ boolean onItemDrop(PlayerDropItemEvent e, Player p, Item item);
+
+ default String toCodename() {
+ return "ItemDropHandler";
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java b/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java
index a24f8cd6b..3fd9b77be 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/tasks/JetBootsTask.java
@@ -25,7 +25,7 @@ public class JetBootsTask extends SlimefunTask {
Player p = Bukkit.getPlayer(uuid);
float cost = 0.075F;
float charge = ItemEnergy.getStoredEnergy(p.getInventory().getBoots());
- double accuracy = Double.parseDouble(new DecimalFormat("##.##").format(speed - 0.7).replace(",", "."));
+ double accuracy = Double.parseDouble(new DecimalFormat("##.##").format(speed - 0.7).replace(',', '.'));
if (charge >= cost) {
p.getInventory().setBoots(ItemEnergy.chargeItem(p.getInventory().getBoots(), -cost));
PlayerInventory.update(p);
diff --git a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java
index df3fd95a1..a98c4e735 100644
--- a/src/me/mrCookieSlime/Slimefun/Setup/Messages.java
+++ b/src/me/mrCookieSlime/Slimefun/Setup/Messages.java
@@ -56,6 +56,8 @@ public final class Messages {
local.setDefault("messages.talisman.knight", "&a&oYour Talisman gave you 5 Seconds of Regeneration");
local.setDefault("messages.talisman.whirlwind", "&a&oYour Talisman reflected the Projectile");
local.setDefault("messages.talisman.wizard", "&a&oYour Talisman has given you a better Fortune Level but maybe also lowered some other Enchantment Levels");
+ local.setDefault("messages.soulbound-rune.fail", "&cYou can only bind one item to your soul at a time.");
+ local.setDefault("messages.soulbound-rune.success", "&aYou have successfully bound this item to your soul! You will keep it when you die.");
local.setDefault("messages.broken-leg", "&c&oSeems like you broke your Leg, maybe a Splint could help?");
local.setDefault("messages.fixed-leg", "&a&oThe Splint helps. It feels better now.");
local.setDefault("messages.start-bleeding", "&c&oYou started to bleed. Maybe a Bandage could help?");
diff --git a/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java
index 1e3c27c53..c859aaeaf 100644
--- a/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java
+++ b/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java
@@ -49,7 +49,7 @@ public final class MiscSetup {
}
public static void loadItems(Settings settings) {
- Iterator iterator = SlimefunItem.items.iterator();
+ Iterator iterator = SlimefunItem.list().iterator();
while (iterator.hasNext()) {
SlimefunItem item = iterator.next();
if (item == null) {
diff --git a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java
index a8bbd7377..195947c07 100644
--- a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java
+++ b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java
@@ -243,5 +243,6 @@ public final class ResearchSetup {
Slimefun.registerResearch(new Research(243, "A Dry Day", 15), SlimefunItems.AUTO_DRIER);
Slimefun.registerResearch(new Research(244, "Diet Cookie", 3), SlimefunItems.DIET_COOKIE);
Slimefun.registerResearch(new Research(245, "Storm Staff", 30), SlimefunItems.STAFF_STORM);
+ Slimefun.registerResearch(new Research(246, "Soulbound Rune", 60), SlimefunItems.RUNE_SOULBOUND);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java
index f05aa753d..5b48a0d4c 100644
--- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java
+++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java
@@ -3,15 +3,24 @@ package me.mrCookieSlime.Slimefun.Setup;
import java.util.ArrayList;
import java.util.List;
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect;
+import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants;
+import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public final class SlimefunManager {
@@ -116,14 +125,41 @@ public final class SlimefunManager {
}
private static boolean equalsLore(List lore, List lore2) {
- String string1 = "";
- String string2 = "";
+ StringBuilder string1 = new StringBuilder();
+ StringBuilder string2 = new StringBuilder();
+
+ String colors = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString();
for (String string: lore) {
- if (!string.startsWith("&e&e&7")) string1 = string1 + "-NEW LINE-" + string;
+ if (!string.equals(ChatColor.GRAY + "Soulbound") && !string.startsWith(colors)) string1.append("-NEW LINE-").append(string);
}
+
for (String string: lore2) {
- if (!string.startsWith("&e&e&7")) string2 = string2 + "-NEW LINE-" + string;
+ if (!string.equals(ChatColor.GRAY + "Soulbound") && !string.startsWith(colors)) string2.append("-NEW LINE-").append(string);
+ }
+ return string1.toString().equals(string2.toString());
+ }
+
+ public static boolean isItemSoulbound(ItemStack item) {
+ if (item == null || item.getType() == Material.AIR) return false;
+ else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) return true;
+ else {
+ ItemStack strippedItem = item.clone();
+
+ for (Enchantment enchantment : item.getEnchantments().keySet()) {
+ strippedItem.removeEnchantment(enchantment);
+ }
+
+ if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) {
+ for (ItemEnchantment enchantment : EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)){
+ EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0);
+ }
+ }
+ if (SlimefunItem.getByItem(strippedItem) instanceof SoulboundItem) return true;
+ else if (item.hasItemMeta()) {
+ ItemMeta im = item.getItemMeta();
+ return (im.hasLore() && im.getLore().contains(ChatColor.GRAY + "Soulbound"));
+ }
+ return false;
}
- return string1.equals(string2);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java
index 29b595e51..c07232c04 100644
--- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java
+++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java
@@ -23,37 +23,28 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
-import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow;
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator;
-import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
-import me.mrCookieSlime.Slimefun.GPS.Elevator;
import me.mrCookieSlime.Slimefun.GPS.GPSNetwork;
import me.mrCookieSlime.Slimefun.GPS.NetworkStatus;
import me.mrCookieSlime.Slimefun.Lists.Categories;
@@ -65,7 +56,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Alloy;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.EnhancedFurnace;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedBlock;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedSoulboundTool;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedTool;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice;
@@ -83,28 +73,37 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.AdvancedCargoOutputNode;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoInputNode;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoManagerBlock;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoOutputNode;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.DietCookie;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosivePickaxe;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosiveShovel;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GoldPan;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GrapplingHook;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HerculesPickaxe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HunterTalisman;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.InfernalBonemeal;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeFlask;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeTome;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.LumberAxe;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SoulboundRune;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AncientPedestal;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.BlockPlacer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Composter;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Crucible;
@@ -112,7 +111,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HologramProjector
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.InfusedHopper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AnimalGrowthAccelerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoAnvil;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoBreeder;
@@ -128,8 +126,10 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Electric
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricGoldPan;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricIngotFactory;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricIngotPulverizer;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricOreGrinder;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricSmeltery;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectrifiedCrucible;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElevatorPlate;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.EnergyRegulator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FluidPump;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FoodComposter;
@@ -140,6 +140,10 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.NetherDr
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.OilPump;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Refinery;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.WitherAssembler;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.XPCollector;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CoalGenerator;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CombustionGenerator;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.LavaGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.ArmorForge;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.AutomatedPanningMachine;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Compressor;
@@ -152,7 +156,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.OreWasher;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.PressureChamber;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Smeltery;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.TableSaw;
-import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler;
@@ -160,7 +163,6 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler;
import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker;
-import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener;
import me.mrCookieSlime.Slimefun.androids.AndroidType;
import me.mrCookieSlime.Slimefun.androids.ProgrammableAndroid;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -168,7 +170,6 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
-import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
import me.mrCookieSlime.Slimefun.holograms.ReactorHologram;
public final class SlimefunSetup {
@@ -341,7 +342,7 @@ public final class SlimefunSetup {
new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)})
.register(true);
- new SlimefunItem(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new SwordOfBeheading(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.EMERALD), SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.BLAZE_ROD), null}, new String[] {"chance.PLAYER", "chance.SKELETON", "chance.WITHER_SKELETON", "chance.ZOMBIE", "chance.CREEPER"}, new Integer[] {70, 40, 25, 40, 40})
.register(true);
@@ -774,34 +775,9 @@ public final class SlimefunSetup {
new ItemStack[] {SlimefunItems.RUNE_LIGHTNING, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_LIGHTNING, SlimefunItems.STAFF_WATER, SlimefunItems.MAGIC_SUGAR, SlimefunItems.STAFF_WIND, SlimefunItems.RUNE_LIGHTNING, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_LIGHTNING})
.register(true);
- new SlimefunItem(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new SmeltersPickaxe(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null})
- .register(true, new BlockBreakHandler() {
-
- @Override
- public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) {
- if (SlimefunManager.isItemSimiliar(item, SlimefunItems.AUTO_SMELT_PICKAXE, true)) {
- if (BlockStorage.hasBlockInfo(e.getBlock())) return true;
- if (e.getBlock().getType() == Material.PLAYER_HEAD) return true;
-
- int j = -1;
- List dropsList = (List) e.getBlock().getDrops();
- for (int i = 0; i < dropsList.size(); i++) {
- if (dropsList.get(i) != null) {
- j++;
- drops.add(e.getBlock().getType().toString().endsWith("_ORE") ? new CustomItem(dropsList.get(i), fortune): dropsList.get(i));
- if (RecipeCalculator.getSmeltedOutput(drops.get(i).getType()) != null) {
- e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1);
- drops.set(j, new CustomItem(RecipeCalculator.getSmeltedOutput(drops.get(i).getType()), drops.get(i).getAmount()));
- }
- }
- }
-
- return true;
- }
- else return false;
- }
- });
+ .register(true);
new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.TALISMAN, "COMMON_TALISMAN", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2},
@@ -818,7 +794,7 @@ public final class SlimefunSetup {
false, false, "miner", 20)
.register(true);
- new Talisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN",
+ new HunterTalisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN",
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3},
false, false, "hunter", 20)
.register(true);
@@ -883,33 +859,9 @@ public final class SlimefunSetup {
false, false, "wizard", 60)
.register(true);
- new ExcludedTool(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH,
+ new LumberAxe(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_DIAMOND, null, SlimefunItems.SYNTHETIC_EMERALD, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null})
- .register(true, new BlockBreakHandler() {
-
- @Override
- public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) {
- if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.LUMBER_AXE, true)) {
- if (MaterialHelper.isLog( e.getBlock().getType())) {
- List logs = new ArrayList<>();
- TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs);
-
- if (logs.contains(e.getBlock().getLocation())) logs.remove(e.getBlock().getLocation());
- for (Location b: logs) {
- if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b.getBlock())) {
- b.getWorld().playEffect(b, Effect.STEP_SOUND, b.getBlock().getType());
- for (ItemStack drop: b.getBlock().getDrops()) {
- b.getWorld().dropItemNaturally(b, drop);
- }
- b.getBlock().setType(Material.AIR);
- }
- }
- }
- return true;
- }
- else return false;
- }
- });
+ .register(true);
new SlimefunItem(Categories.MISC, SlimefunItems.SALT, "SALT", RecipeType.ORE_WASHER,
new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null})
@@ -1053,8 +1005,8 @@ public final class SlimefunSetup {
if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS);
if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION);
if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS);
- p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2));
p.setFireTicks(0);
+ p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2));
e.setCancelled(true);
return true;
}
@@ -1089,63 +1041,13 @@ public final class SlimefunSetup {
new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 20)})
.register(true);
- new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH,
+ new PickaxeOfContainment(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null})
- .register(true, new BlockBreakHandler() {
+ .register(true);
- @Override
- public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) {
- if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) {
- // Refactored it into this so we don't need to call e.getBlock() all the time.
- Block b = e.getBlock();
- if (b.getType() != Material.SPAWNER) return true;
-
- // If the spawner's BlockStorage has BlockInfo, then it's not a vanilla spawner and shouldn't give a broken spawner.
- ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone();
- if (BlockStorage.hasBlockInfo(b)) {
- spawner = SlimefunItems.REPAIRED_SPAWNER.clone();
- }
-
- ItemMeta im = spawner.getItemMeta();
- List lore = im.getLore();
-
- for (int i = 0; i < lore.size(); i++) {
- if (lore.get(i).contains("")) lore.set(i, lore.get(i).replace("", StringUtils.format(((CreatureSpawner) b.getState()).getSpawnedType().toString())));
- }
-
- im.setLore(lore);
- spawner.setItemMeta(im);
- b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner);
- e.setExpToDrop(0);
- e.setDropItems(false);
- return true;
- }
- else {
- if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false);
- return false;
- }
- }
- });
-
- new SlimefunItem(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH,
+ new HerculesPickaxe(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null})
- .register(true, new BlockBreakHandler() {
-
- @Override
- public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) {
- if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) {
- if (e.getBlock().getType() == Material.IRON_ORE) drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2));
- else if (e.getBlock().getType() == Material.GOLD_ORE) drops.add(new CustomItem(SlimefunItems.GOLD_DUST, 2));
- else {
- for (ItemStack drop: e.getBlock().getDrops()) {
- drops.add(new CustomItem(drop, 2));
- }
- }
- return true;
- }
- else return false;
- }
- });
+ .register(true);
new TableSaw().register();
@@ -1202,6 +1104,7 @@ public final class SlimefunSetup {
@Override
public boolean onInteract(final Player p, MultiBlock mb, final Block b) {
if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) {
+ p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!");
if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) {
Block chestBlock = b.getRelative(BlockFace.UP);
@@ -1259,6 +1162,7 @@ public final class SlimefunSetup {
@Override
public boolean onInteract(final Player p, MultiBlock mb, final Block b) {
if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) {
+ p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!");
if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) {
Block chestBlock = b.getRelative(BlockFace.UP);
@@ -1495,30 +1399,9 @@ public final class SlimefunSetup {
new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.STAFF_ELEMENTAL, null, null, SlimefunItems.STAFF_ELEMENTAL, null})
.register(true);
- new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH,
+ new PickaxeOfVeinMining(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {new ItemStack(Material.EMERALD_ORE), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.EMERALD_ORE), null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null})
- .register(true, new BlockBreakHandler() {
-
- @Override
- public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) {
- if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_VEIN_MINING, true)) {
- if (e.getBlock().getType().toString().endsWith("_ORE")) {
- List blocks = new ArrayList<>();
- Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16);
- for (Location block: blocks) {
- Block b = block.getBlock();
- b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
- for (ItemStack drop: b.getDrops()) {
- b.getWorld().dropItemNaturally(b.getLocation(), drop.getType().isBlock() ? drop: new CustomItem(drop, fortune));
- }
- b.setType(Material.AIR);
- }
- }
- return true;
- }
- else return false;
- }
- });
+ .register(true);
new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_SWORD, "SOULBOUND_SWORD",
new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SWORD), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null})
@@ -1579,7 +1462,7 @@ public final class SlimefunSetup {
.register(true);
new Juice(Categories.FOOD, SlimefunItems.GOLDEN_APPLE_JUICE, "GOLDEN_APPLE_JUICE", RecipeType.JUICER,
- new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null})
+ new ItemStack[] {null, null, null, null, new ItemStack(Material.GOLDEN_APPLE), null, null, null, null})
.register(true);
new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BROKEN_SPAWNER, "BROKEN_SPAWNER", new RecipeType(SlimefunItems.PICKAXE_OF_CONTAINMENT),
@@ -1588,26 +1471,22 @@ public final class SlimefunSetup {
new SlimefunItem(Categories.MAGIC, SlimefunItems.REPAIRED_SPAWNER, "REINFORCED_SPAWNER", RecipeType.ANCIENT_ALTAR,
new ItemStack[] {SlimefunItems.RUNE_ENDER, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.BROKEN_SPAWNER, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), SlimefunItems.RUNE_ENDER})
- .register(true, new BlockPlaceHandler() {
-
- @Override
- public boolean onBlockPlace(BlockPlaceEvent e, ItemStack item) {
- if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) {
- EntityType type = null;
- for (String line: item.getItemMeta().getLore()) {
- if (ChatColor.stripColor(line).startsWith("Type: ") && !line.contains(""))
- type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "").replace(" ", "_").toUpperCase());
-
- }
- if (type != null) {
- CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState();
- spawner.setSpawnedType(type);
- spawner.update(true, false);
- }
- return true;
+ .register(true, (BlockPlaceHandler) (e, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) {
+ EntityType type = null;
+ for (String line: item.getItemMeta().getLore()) {
+ if (ChatColor.stripColor(line).startsWith("Type: ") && !line.contains(""))
+ type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "")
+ .replace(' ', '_').toUpperCase());
}
- else return false;
+ if (type != null) {
+ CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState();
+ spawner.setSpawnedType(type);
+ spawner.update(true, false);
+ }
+ return true;
}
+ else return false;
});
new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE",
@@ -1849,24 +1728,10 @@ public final class SlimefunSetup {
new CustomItem(SlimefunItems.WITHER_PROOF_OBSIDIAN, 4))
.register(true);
- new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH,
+ new AncientPedestal(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.STONE), null, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}, new CustomItem(SlimefunItems.ANCIENT_PEDESTAL, 4))
.register(true);
- SlimefunItem.registerBlockHandler("ANCIENT_PEDESTAL", new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- Item stack = AncientAltarListener.findItem(b);
- if (stack != null) {
- stack.removeMetadata("item_placed", SlimefunPlugin.instance);
- b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName()));
- stack.remove();
- }
- return true;
- }
- });
-
new SlimefunItem(Categories.MAGIC, SlimefunItems.ANCIENT_ALTAR, "ANCIENT_ALTAR", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {null, new ItemStack(Material.ENCHANTING_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)})
.register(true);
@@ -2134,17 +1999,7 @@ public final class SlimefunSetup {
new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY, "ELECTRIC_INGOT_FACTORY", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.FLINT_AND_STEEL), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT}) {
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cElectric Ingot Factory";
- }
-
+
@Override
public int getEnergyConsumption() {
return 4;
@@ -2160,16 +2015,6 @@ public final class SlimefunSetup {
new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, "ELECTRIC_INGOT_FACTORY_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.BRASS_INGOT}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cElectric Ingot Factory";
- }
-
@Override
public int getEnergyConsumption() {
return 7;
@@ -2185,16 +2030,6 @@ public final class SlimefunSetup {
new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, "ELECTRIC_INGOT_FACTORY_3", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.BRASS_INGOT}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cElectric Ingot Factory";
- }
-
@Override
public int getEnergyConsumption() {
return 20;
@@ -2252,19 +2087,9 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 1024);
- new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new ElectricOreGrinder(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.STONE_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&bElectric Ore Grinder";
- }
-
@Override
public int getEnergyConsumption() {
return 6;
@@ -2275,26 +2100,11 @@ public final class SlimefunSetup {
return 1;
}
- @Override
- public String getMachineIdentifier() {
- return "ELECTRIC_ORE_GRINDER";
- }
-
}.registerChargeableBlock(true, 128);
- new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new ElectricOreGrinder(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&bElectric Ore Grinder";
- }
-
@Override
public int getEnergyConsumption() {
return 15;
@@ -2305,21 +2115,11 @@ public final class SlimefunSetup {
return 4;
}
- @Override
- public String getMachineIdentifier() {
- return "ELECTRIC_ORE_GRINDER";
- }
-
}.registerChargeableBlock(true, 512);
new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER, "HEATED_PRESSURE_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, new ItemStack(Material.GLASS), SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) {
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
+
@Override
public int getEnergyConsumption() {
return 5;
@@ -2335,11 +2135,6 @@ public final class SlimefunSetup {
new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER_2, "HEATED_PRESSURE_CHAMBER_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
@Override
public int getEnergyConsumption() {
return 22;
@@ -2356,43 +2151,9 @@ public final class SlimefunSetup {
new ItemStack[] {null, SlimefunItems.ELECTRIC_ORE_GRINDER, null, SlimefunItems.LEAD_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT})
.registerChargeableBlock(true, 512);
- new AGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new CoalGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, SlimefunItems.NICKEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.NICKEL_INGOT, null, SlimefunItems.NICKEL_INGOT, null}) {
-
- @Override
- public void registerDefaultRecipes() {
- registerFuel(new MachineFuel(8, new ItemStack(Material.COAL)));
- registerFuel(new MachineFuel(8, new ItemStack(Material.CHARCOAL)));
- registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK)));
- registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD)));
-
- // Logs
- registerFuel(new MachineFuel(1, new ItemStack(Material.OAK_LOG)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.SPRUCE_LOG)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.BIRCH_LOG)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.JUNGLE_LOG)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.ACACIA_LOG)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.DARK_OAK_LOG)));
-
- // Wooden Planks
- registerFuel(new MachineFuel(1, new ItemStack(Material.OAK_WOOD)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.SPRUCE_WOOD)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.BIRCH_WOOD)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.JUNGLE_WOOD)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.ACACIA_WOOD)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.DARK_OAK_WOOD)));
- }
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cCoal Generator";
- }
-
+
@Override
public int getEnergyProduction() {
return 8;
@@ -2400,6 +2161,16 @@ public final class SlimefunSetup {
}.registerUnrechargeableBlock(true, 64);
+ new CoalGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR_2, "COAL_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new ItemStack[] {new ItemStack(Material.MAGMA_BLOCK), SlimefunItems.HEATING_COIL, new ItemStack(Material.MAGMA_BLOCK), SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.COAL_GENERATOR, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) {
+
+ @Override
+ public int getEnergyProduction() {
+ return 15;
+ }
+
+ }.registerUnrechargeableBlock(true, 256);
+
new AGenerator(Categories.ELECTRICITY, SlimefunItems.BIO_REACTOR, "BIO_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.HEATING_COIL, SlimefunItems.COMPOSTER, SlimefunItems.HEATING_COIL, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}) {
@@ -3014,6 +2785,10 @@ public final class SlimefunSetup {
new ItemStack[] {new ItemStack(Material.RED_DYE), SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.CYAN_DYE), new ItemStack(Material.WHITE_WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WHITE_WOOL), new ItemStack(Material.YELLOW_DYE), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.MAGENTA_DYE)})
.register(true);
+ new SoulboundRune(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_SOULBOUND, "ANCIENT_RUNE_SOULBOUND", RecipeType.ANCIENT_ALTAR,
+ new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.MAGIC_LUMP_3, 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 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);
@@ -3165,24 +2940,9 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 256);
- new AGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new LavaGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.GOLD_16K, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL}) {
-
- @Override
- public void registerDefaultRecipes() {
- registerFuel(new MachineFuel(40, new ItemStack(Material.LAVA_BUCKET)));
- }
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&4Lava Generator";
- }
-
+
@Override
public int getEnergyProduction() {
return 10;
@@ -3190,25 +2950,19 @@ public final class SlimefunSetup {
}.registerUnrechargeableBlock(true, 512);
- new AGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new LavaGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR_2, "LAVA_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.LAVA_GENERATOR, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.HEATING_COIL}) {
+
+ @Override
+ public int getEnergyProduction() {
+ return 20;
+ }
+
+ }.registerUnrechargeableBlock(true, 1024);
+
+ new CombustionGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL}) {
-
- @Override
- public void registerDefaultRecipes() {
- registerFuel(new MachineFuel(30, SlimefunItems.BUCKET_OF_OIL));
- registerFuel(new MachineFuel(90, SlimefunItems.BUCKET_OF_FUEL));
- }
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.FLINT_AND_STEEL);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cCombustion Reactor";
- }
-
+
@Override
public int getEnergyProduction() {
return 12;
@@ -3272,49 +3026,14 @@ public final class SlimefunSetup {
new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null})
.register(true);
- new SlimefunItem(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new ElevatorPlate(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.STONE_PRESSURE_PLATE), null, new ItemStack(Material.PISTON), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON), SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT},
new CustomItem(SlimefunItems.ELEVATOR, 2))
- .register(true, new ItemInteractionHandler() {
-
- @Override
- public boolean onRightClick(final ItemUseEvent e, Player p, ItemStack stack) {
- if (e.getClickedBlock() == null) return false;
- String item = BlockStorage.checkID(e.getClickedBlock());
- if (item == null || !item.equals("ELEVATOR_PLATE")) return false;
-
- if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) Elevator.openEditor(p, e.getClickedBlock());
- return true;
- }
- });
-
- SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- BlockStorage.addBlockInfo(b, "floor", "&rFloor #0");
- BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- return true;
- }
- });
+ .register(true);
new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR, "FOOD_FABRICATOR", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.CAN, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.GOLDEN_HOE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cFood Fabricator";
- }
-
@Override
public int getEnergyConsumption() {
return 7;
@@ -3329,17 +3048,7 @@ public final class SlimefunSetup {
new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR_2, "FOOD_FABRICATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) {
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_HOE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cFood Fabricator";
- }
-
+
@Override
public int getEnergyConsumption() {
return 24;
@@ -3394,17 +3103,7 @@ public final class SlimefunSetup {
new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER, "FOOD_COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.CAN, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) {
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.GOLDEN_HOE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cFood Composter";
- }
-
+
@Override
public int getEnergyConsumption() {
return 8;
@@ -3420,16 +3119,6 @@ public final class SlimefunSetup {
new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER_2, "FOOD_COMPOSTER_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_HOE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cFood Composter";
- }
-
@Override
public int getEnergyConsumption() {
return 26;
@@ -3471,8 +3160,7 @@ public final class SlimefunSetup {
.register(true);
new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR, "CROP_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE,
- new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET})
- {
+ new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) {
@Override
public int getEnergyConsumption() {
@@ -3492,8 +3180,7 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 1024);
new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR_2, "CROP_GROWTH_ACCELERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE,
- new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET})
- {
+ new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) {
@Override
public int getEnergyConsumption() {
@@ -3514,17 +3201,7 @@ public final class SlimefunSetup {
new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER, "FREEZER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PACKED_ICE), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COOLING_UNIT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.COOLING_UNIT}) {
-
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.GOLDEN_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&bFreezer";
- }
-
+
@Override
public int getEnergyConsumption() {
return 9;
@@ -3540,16 +3217,6 @@ public final class SlimefunSetup {
new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER_2, "FREEZER_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.COOLING_UNIT}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&bFreezer";
- }
-
@Override
public int getEnergyConsumption() {
return 15;
@@ -3563,7 +3230,7 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 256);
new SlimefunItem(Categories.TECH_MISC, SlimefunItems.REACTOR_COOLANT_CELL, "REACTOR_COOLANT_CELL", new RecipeType(SlimefunItems.FREEZER),
- new ItemStack[] {new ItemStack(Material.PACKED_ICE), null, null, null, null, null, null, null, null})
+ new ItemStack[] {new ItemStack(Material.BLUE_ICE), null, null, null, null, null, null, null, null})
.register(true);
new SlimefunItem(Categories.TECH_MISC, SlimefunItems.NETHER_ICE_COOLANT_CELL, "NETHER_ICE_COOLANT_CELL", new RecipeType(SlimefunItems.HEATED_PRESSURE_CHAMBER),
@@ -3676,49 +3343,9 @@ public final class SlimefunSetup {
new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS, SlimefunItems.SILVER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS}, new CustomItem(SlimefunItems.CARGO_MOTOR, 4))
.register(true);
- new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE,
+ new CargoManagerBlock(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT})
- .register(true, new BlockTicker() {
-
- @Override
- public void tick(Block b, SlimefunItem item, Config data) {
- CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b);
- }
-
- @Override
- public boolean isSynchronized() {
- return false;
- }
-
- }, new ItemInteractionHandler() {
-
- @Override
- public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) {
- if (e.getClickedBlock() == null) return false;
- String item = BlockStorage.checkID(e.getClickedBlock());
- if (item == null || !item.equals("CARGO_MANAGER")) return false;
- e.setCancelled(true);
-
- if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "visualizer") == null) {
- BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", "disabled");
- p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718"));
- }
- else {
- BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", null);
- p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714"));
- }
- return true;
- }
- });
-
- SlimefunItem.registerBlockHandler("CARGO_MANAGER", new SlimefunBlockHandler() {
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- CargoHologram.remove(b);
- return true;
- }
- });
+ .register(true);
new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_NODE, "CARGO_NODE", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4))
@@ -3778,16 +3405,6 @@ public final class SlimefunSetup {
new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS, "CARBON_PRESS", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.CARBON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBON, SlimefunItems.CARBON, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cCarbon Press";
- }
-
@Override
public int getEnergyConsumption() {
return 10;
@@ -3803,16 +3420,6 @@ public final class SlimefunSetup {
new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_2, "CARBON_PRESS_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.CARBON, SlimefunItems.CARBON_PRESS, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cCarbon Press";
- }
-
@Override
public int getEnergyConsumption() {
return 25;
@@ -3828,16 +3435,6 @@ public final class SlimefunSetup {
new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_3, "CARBON_PRESS_3", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBON_PRESS_2, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) {
- @Override
- public ItemStack getProgressBar() {
- return new ItemStack(Material.DIAMOND_PICKAXE);
- }
-
- @Override
- public String getInventoryTitle() {
- return "&cCarbon Press";
- }
-
@Override
public int getEnergyConsumption() {
return 90;
diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java
index 3c742c463..2618f7258 100644
--- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java
+++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java
@@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -42,6 +43,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.GuideHandler;
@@ -50,14 +52,14 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout;
import me.mrCookieSlime.Slimefun.hooks.github.Contributor;
import me.mrCookieSlime.Slimefun.hooks.github.IntegerFormat;
-import me.mrCookieSlime.Slimefun.utils.RecipeDisplayItem;
public final class SlimefunGuide {
private SlimefunGuide() {}
private static final int category_size = 36;
-
+ private static final int[] slots = new int[] {0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
+
@Deprecated
public static ItemStack getItem() {
return getItem(SlimefunGuideLayout.CHEST);
@@ -86,8 +88,6 @@ public final class SlimefunGuide {
return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&eSlimefun Guide &7(Right Click)", (book ? "": "&2"), "&rThis is your basic Guide for Slimefun", "&rYou can see all Items added by this Plugin", "&ror its Addons including their Recipes", "&ra bit of information and more");
}
- private static final int[] slots = new int[] {0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
-
public static void openSettings(Player p, final ItemStack guide) {
final ChestMenu menu = new ChestMenu("Settings / Info");
@@ -184,16 +184,12 @@ public final class SlimefunGuide {
final ChestMenu menu = new ChestMenu("Credits");
menu.setEmptySlotsClickable(false);
- menu.addMenuOpeningHandler(
- pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)
- );
+ menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F));
for (int i = 0; i < 9; i++) {
if (i != 4) {
menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "));
- menu.addMenuClickHandler(i,
- (pl, slot, item, action) -> false
- );
+ menu.addMenuClickHandler(i, (pl, slot, item, action) -> false);
}
else {
menu.addItem(4, new CustomItem(new ItemStack(Material.EMERALD), "&7\u21E6 Back to Settings"));
@@ -205,11 +201,7 @@ public final class SlimefunGuide {
}
int index = 9;
- double total = 0;
-
- for (Contributor contributor : SlimefunPlugin.getUtilities().contributors) {
- total += contributor.getCommits();
- }
+ double total = 1.0 * SlimefunPlugin.getUtilities().contributors.stream().mapToInt(Contributor::getCommits).sum();
for (final Contributor contributor: SlimefunPlugin.getUtilities().contributors) {
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
@@ -259,7 +251,10 @@ public final class SlimefunGuide {
public static void openGuide(Player p, boolean book) {
if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return;
if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return;
- if (!getHistory().containsKey(p.getUniqueId())) openMainMenu(p, true, book, 1);
+
+ if (!getHistory().containsKey(p.getUniqueId())) {
+ openMainMenu(p, true, book, 1);
+ }
else {
Object last = getLastEntry(p, false);
if (last instanceof Category) openCategory(p, (Category) last, true, 1, book);
@@ -270,8 +265,9 @@ public final class SlimefunGuide {
}
public static void openMainMenu(final Player p, final boolean survival, final boolean book, final int selected_page) {
- if (survival)
+ if (survival) {
clearHistory(p.getUniqueId());
+ }
if (book) {
List pages = new ArrayList<>();
@@ -293,7 +289,7 @@ public final class SlimefunGuide {
}
if (locked) {
- // Dont display that Category...
+ // Don't display that Category...
}
else {
if (tier < category.getTier()) {
@@ -402,7 +398,7 @@ public final class SlimefunGuide {
menu.setEmptySlotsClickable(false);
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 0));
- List categories = SlimefunPlugin.getUtilities().currentlyEnabledCategories;
+ List categories = SlimefunPlugin.getUtilities().enabledCategories;
List handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList());
int index = 9;
@@ -410,16 +406,12 @@ public final class SlimefunGuide {
for (int i = 0; i < 9; i++) {
menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "));
- menu.addMenuClickHandler(i,
- (pl, slot, item, action) -> false
- );
+ menu.addMenuClickHandler(i, (pl, slot, item, action) -> false);
}
for (int i = 45; i < 54; i++) {
menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "));
- menu.addMenuClickHandler(i,
- (pl, slot, item, action) -> false
- );
+ menu.addMenuClickHandler(i, (pl, slot, item, action) -> false);
}
int target = (category_size * (selected_page - 1)) - 1;
@@ -433,12 +425,13 @@ public final class SlimefunGuide {
target++;
if (target >= categories.size()) {
- if (!survival) break;
+ if (!survival) {
+ break;
+ }
index = handlers.get(target - categories.size()).next(p, index, menu);
}
else {
final Category category = categories.get(target);
-
boolean locked = true;
for (SlimefunItem item: category.getItems()) {
@@ -485,13 +478,13 @@ public final class SlimefunGuide {
parents.add(ChatColor.translateAlternateColorCodes('&', "&rYou need to unlock all Items"));
parents.add(ChatColor.translateAlternateColorCodes('&', "&rfrom the following Categories first:"));
parents.add("");
+
for (Category parent : ((LockedCategory) category).getParents()) {
parents.add(parent.getItem().getItemMeta().getDisplayName());
}
+
menu.addItem(index, new CustomItem(Material.BARRIER, "&4LOCKED &7- &r" + category.getItem().getItemMeta().getDisplayName(), parents.toArray(new String[parents.size()])));
- menu.addMenuClickHandler(index,
- (pl, slot, item, action) -> false
- );
+ menu.addMenuClickHandler(index, (pl, slot, item, action) -> false);
index++;
}
}
@@ -609,19 +602,23 @@ public final class SlimefunGuide {
for (int i = 0; i < texts.size(); i = i + 10) {
TellRawMessage page = new TellRawMessage();
page.addText(ChatColor.translateAlternateColorCodes('&', "&b&l- Slimefun Guide -\n\n"));
+
for (int j = i; j < texts.size() && j < i + 10; j++) {
page.addText(texts.get(j) + "\n");
if (tooltips.get(j) != null) page.addHoverEvent(HoverAction.SHOW_TEXT, tooltips.get(j));
if (actions.get(j) != null) page.addClickEvent(actions.get(j));
}
+
page.addText("\n");
page.addText(ChatColor.translateAlternateColorCodes('&', "&6\u21E6 &lBack"));
page.addHoverEvent(HoverAction.SHOW_TEXT, ChatColor.translateAlternateColorCodes('&', "&eClick to go back to the Category Overview"));
page.addClickEvent(new PlayerRunnable(2) {
+
@Override
public void run(final Player p) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openMainMenu(p, survival, true, 1), 1L);
}
+
});
pages.add(page);
}
@@ -678,10 +675,12 @@ public final class SlimefunGuide {
int target = categoryIndex + i;
if (target >= category.getItems().size()) break;
final SlimefunItem sfitem = category.getItems().get(target);
+
if (Slimefun.isEnabled(p, sfitem, false)) {
if (survival && !Slimefun.hasUnlocked(p, sfitem.getItem(), false) && sfitem.getResearch() != null) {
if (Slimefun.hasPermission(p, sfitem, false)) {
final Research research = sfitem.getResearch();
+
menu.addItem(index, new CustomItem(Material.BARRIER, "&r" + StringUtils.formatItemName(sfitem.getItem(), false), "&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + research.getCost() + " Level"));
menu.addMenuClickHandler(index, (pl, slot, item, action) -> {
if (!Research.isResearching(pl)) {
@@ -714,10 +713,8 @@ public final class SlimefunGuide {
index++;
}
else {
- List list = Messages.local.getTranslation("tooltips.item-permission");
- String[] strings = list.toArray(new String[list.size()]);
- CustomItem display = new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), strings);
- menu.addItem(index, display);
+ List tooltip = Messages.local.getTranslation("tooltips.item-permission");
+ menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), tooltip.toArray(new String[tooltip.size()])));
menu.addMenuClickHandler(index, (pl, slot, item, action) -> false);
index++;
}
@@ -743,25 +740,28 @@ public final class SlimefunGuide {
}
public static void addToHistory(Player p, Object obj) {
- List