1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Merge branch 'master' into experimental

This commit is contained in:
TheBusyBiscuit 2020-08-28 20:53:20 +02:00 committed by GitHub
commit 9d740436a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 570 additions and 847 deletions

View File

@ -7,8 +7,6 @@ on:
pull_request:
branches:
- master
paths:
- '**.yml'
jobs:
linter:

View File

@ -85,6 +85,12 @@
* Fixed Electric Press not working
* Fixed #2240
* Fixed #2243
* Fixed #2249
* Fixed #1022
* Fixed #2208
* Fixed Fluid Pump treating low-level fluids like stationary fluids
* Fixed Fluid Pump not working on Bubble Columns
* Fixed #2251
## Release Candidate 15 (01 Aug 2020)

View File

@ -310,7 +310,7 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.5.5</version>
<version>3.5.7</version>
<scope>test</scope>
</dependency>

View File

@ -83,6 +83,56 @@ final class CargoUtils {
return false;
}
static int[] getInputSlotRange(Inventory inv, ItemStack item) {
if (inv instanceof FurnaceInventory) {
if (item.getType().isFuel()) {
if (isSmeltable(item, true)) {
// Any non-smeltable items should not land in the upper slot
return new int[] { 0, 2 };
}
else {
return new int[] { 1, 2 };
}
}
else {
return new int[] { 0, 1 };
}
}
else if (inv instanceof BrewerInventory) {
if (isPotion(item)) {
// Slots for potions
return new int[] { 0, 3 };
}
else if (item != null && item.getType() == Material.BLAZE_POWDER) {
// Blaze Powder slot
return new int[] { 4, 5 };
}
else {
// Input slot
return new int[] { 3, 4 };
}
}
else {
// Slot 0-size
return new int[] { 0, inv.getSize() };
}
}
static int[] getOutputSlotRange(Inventory inv) {
if (inv instanceof FurnaceInventory) {
// Slot 2-3
return new int[] { 2, 3 };
}
else if (inv instanceof BrewerInventory) {
// Slot 0-3
return new int[] { 0, 3 };
}
else {
// Slot 0-size
return new int[] { 0, inv.getSize() };
}
}
static ItemStack withdraw(Map<Location, Inventory> inventories, Block node, Block target, ItemStack template) {
DirtyChestMenu menu = getChestMenu(target);
@ -129,16 +179,9 @@ final class CargoUtils {
static ItemStack withdrawFromVanillaInventory(Block node, ItemStack template, Inventory inv) {
ItemStack[] contents = inv.getContents();
int minSlot = 0;
int maxSlot = contents.length;
if (inv instanceof FurnaceInventory) {
minSlot = 2;
maxSlot = 3;
}
else if (inv instanceof BrewerInventory) {
maxSlot = 3;
}
int[] range = getOutputSlotRange(inv);
int minSlot = range[0];
int maxSlot = range[1];
ItemStackWrapper wrapper = new ItemStackWrapper(template);
@ -196,16 +239,9 @@ final class CargoUtils {
private static ItemStackAndInteger withdrawFromVanillaInventory(Block node, Inventory inv) {
ItemStack[] contents = inv.getContents();
int minSlot = 0;
int maxSlot = contents.length;
if (inv instanceof FurnaceInventory) {
minSlot = 2;
maxSlot = 3;
}
else if (inv instanceof BrewerInventory) {
maxSlot = 3;
}
int[] range = getOutputSlotRange(inv);
int minSlot = range[0];
int maxSlot = range[1];
for (int slot = minSlot; slot < maxSlot; slot++) {
ItemStack is = contents[slot];
@ -280,40 +316,9 @@ final class CargoUtils {
private static ItemStack insertIntoVanillaInventory(ItemStack stack, Inventory inv) {
ItemStack[] contents = inv.getContents();
int minSlot = 0;
int maxSlot = contents.length;
// Check if it is a normal furnace
if (inv instanceof FurnaceInventory) {
// Check if it is fuel or not
if (stack.getType().isFuel()) {
maxSlot = 2;
// Any non-smeltable items should not land in the upper slot
if (!isSmeltable(stack, true)) {
minSlot = 1;
}
}
else {
maxSlot = 1;
}
}
else if (inv instanceof BrewerInventory) {
if (stack.getType() == Material.POTION || stack.getType() == Material.LINGERING_POTION || stack.getType() == Material.SPLASH_POTION) {
// Potions slot
maxSlot = 3;
}
else if (stack.getType() == Material.BLAZE_POWDER) {
// Blaze Powder slot
minSlot = 4;
maxSlot = 5;
}
else {
// Input slot
minSlot = 3;
maxSlot = 4;
}
}
int[] range = getInputSlotRange(inv, stack);
int minSlot = range[0];
int maxSlot = range[1];
ItemStackWrapper wrapper = new ItemStackWrapper(stack);
@ -347,28 +352,6 @@ final class CargoUtils {
return stack;
}
/**
* This method checks if a given {@link ItemStack} is smeltable or not.
* The lazy-option is a performance-saver since actually calculating this can be quite expensive.
* For the current applicational purposes a quick check for any wooden logs is sufficient.
* Otherwise the "lazyness" can be turned off in the future.
*
* @param stack
* The {@link ItemStack} to test
* @param lazy
* Whether or not to perform a "lazy" but performance-saving check
*
* @return Whether the given {@link ItemStack} can be smelted or not
*/
private static boolean isSmeltable(ItemStack stack, boolean lazy) {
if (lazy) {
return stack != null && Tag.LOGS.isTagged(stack.getType());
}
else {
return SlimefunPlugin.getMinecraftRecipeService().isSmeltable(stack);
}
}
static DirtyChestMenu getChestMenu(Block block) {
if (BlockStorage.hasInventory(block)) {
return BlockStorage.getInventory(block);
@ -447,6 +430,32 @@ final class CargoUtils {
return defaultValue;
}
/**
* This method checks if a given {@link ItemStack} is smeltable or not.
* The lazy-option is a performance-saver since actually calculating this can be quite expensive.
* For the current applicational purposes a quick check for any wooden logs is sufficient.
* Otherwise the "lazyness" can be turned off in the future.
*
* @param stack
* The {@link ItemStack} to test
* @param lazy
* Whether or not to perform a "lazy" but performance-saving check
*
* @return Whether the given {@link ItemStack} can be smelted or not
*/
private static boolean isSmeltable(ItemStack stack, boolean lazy) {
if (lazy) {
return stack != null && Tag.LOGS.isTagged(stack.getType());
}
else {
return SlimefunPlugin.getMinecraftRecipeService().isSmeltable(stack);
}
}
private static boolean isPotion(ItemStack item) {
return item != null && (item.getType() == Material.POTION || item.getType() == Material.SPLASH_POTION || item.getType() == Material.LINGERING_POTION);
}
/**
* Get the whitelist/blacklist slots in a Cargo Input Node. If you wish to access the items
* in the cargo (without hardcoding the slots in case of change) then you can use this method.

View File

@ -368,41 +368,7 @@ abstract class ChestTerminalNetwork extends Network {
Optional<Block> block = getAttachedBlock(l);
if (block.isPresent()) {
Block target = block.get();
UniversalBlockMenu menu = BlockStorage.getUniversalInventory(target);
if (menu != null) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport((DirtyChestMenu) menu, ItemTransportFlow.WITHDRAW, null)) {
ItemStack is = menu.getItemInSlot(slot);
filter(is, items, l);
}
}
else if (BlockStorage.hasInventory(target)) {
BlockMenu blockMenu = BlockStorage.getInventory(target);
if (blockMenu.getPreset().getID().startsWith("BARREL_")) {
Config cfg = BlockStorage.getLocationInfo(target.getLocation());
String data = cfg.getString("storedItems");
if (data != null) {
gatherItemsFromBarrel(l, data, blockMenu, items);
}
}
else {
handleWithdraw(blockMenu, items, l);
}
}
else if (CargoUtils.hasInventory(target)) {
BlockState state = PaperLib.getBlockState(target, false).getState();
if (state instanceof InventoryHolder) {
Inventory inv = ((InventoryHolder) state).getInventory();
for (ItemStack is : inv.getContents()) {
filter(is, items, l);
}
}
}
findAllItems(items, l, block.get());
}
}
@ -410,8 +376,47 @@ abstract class ChestTerminalNetwork extends Network {
return items;
}
private void gatherItemsFromBarrel(Location l, String data, BlockMenu blockMenu, List<ItemStackAndInteger> items) {
private void findAllItems(List<ItemStackAndInteger> items, Location l, Block target) {
UniversalBlockMenu menu = BlockStorage.getUniversalInventory(target);
if (menu != null) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport(menu, ItemTransportFlow.WITHDRAW, null)) {
ItemStack is = menu.getItemInSlot(slot);
filter(is, items, l);
}
}
else if (BlockStorage.hasInventory(target)) {
BlockMenu blockMenu = BlockStorage.getInventory(target);
if (blockMenu.getPreset().getID().startsWith("BARREL_")) {
gatherItemsFromBarrel(l, blockMenu, items);
}
else {
handleWithdraw(blockMenu, items, l);
}
}
else if (CargoUtils.hasInventory(target)) {
BlockState state = PaperLib.getBlockState(target, false).getState();
if (state instanceof InventoryHolder) {
Inventory inv = ((InventoryHolder) state).getInventory();
for (ItemStack is : inv.getContents()) {
filter(is, items, l);
}
}
}
}
private void gatherItemsFromBarrel(Location l, BlockMenu blockMenu, List<ItemStackAndInteger> items) {
try {
Config cfg = BlockStorage.getLocationInfo(blockMenu.getLocation());
String data = cfg.getString("storedItems");
if (data == null) {
return;
}
int stored = Integer.parseInt(data);
for (int slot : blockMenu.getPreset().getSlotsAccessedByItemTransport((DirtyChestMenu) blockMenu, ItemTransportFlow.WITHDRAW, null)) {

View File

@ -544,7 +544,7 @@ public final class SlimefunItems {
public static final SlimefunItemStack TALISMAN_TRAVELLER = new SlimefunItemStack("TRAVELLER_TALISMAN", Material.EMERALD, "&aTalisman of the Traveller", "", "&fWhile you have this Talisman", "&fin your Inventory it gives", "&fyou a 60% Chance for a decent", "&fSpeed Buff when you start sprinting");
public static final SlimefunItemStack TALISMAN_WARRIOR = new SlimefunItemStack("WARRIOR_TALISMAN", Material.EMERALD, "&aTalisman of the Warrior", "", "&fWhile you have this Talisman", "&fin your Inventory it gives", "&fyou Strength III whenever you get hit", "&fbut will then be consumed");
public static final SlimefunItemStack TALISMAN_KNIGHT = new SlimefunItemStack("KNIGHT_TALISMAN", Material.EMERALD, "&aTalisman of the Knight", "", "&fWhile you have this Talisman", "&fin your Inventory it gives", "&fyou a 30% Chance for 5 Seconds of Regeneration", "&fwhenever You get hit", "&fbut will then be consumed");
public static final SlimefunItemStack TALISMAN_WHIRLWIND = new SlimefunItemStack("WHIRLWIND_TALISMAN", Material.EMERALD, "&aTalisman of the Whirlwind", "", "&fWhile you have this Talisman", "&fin your Inventory it will reflect", "&f60% of all Projectiles fired at you");
public static final SlimefunItemStack TALISMAN_WHIRLWIND = new SlimefunItemStack("WHIRLWIND_TALISMAN", Material.EMERALD, "&aTalisman of the Whirlwind", "", "&fHaving this Talisman", "&fin your Inventory will reflect", "&f60% of any projectiles fired at you.", "&e&oOnly a thrown Trident can pierce", "&e&othrough this layer of protection");
public static final SlimefunItemStack TALISMAN_WIZARD = new SlimefunItemStack("WIZARD_TALISMAN", Material.EMERALD, "&aTalisman of the Wizard", "", "&fWhile you have this Talisman", "&fin your Inventory it allows you to", "&fobtain Fortune Level 4/5 however", "&fit also has a chance to lower the", "&fLevel of some Enchantments on your Item");
/* Staves */

View File

@ -45,6 +45,7 @@ import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubService;
import io.github.thebusybiscuit.slimefun4.core.services.plugins.ThirdPartyPluginService;
import io.github.thebusybiscuit.slimefun4.core.services.profiler.SlimefunProfiler;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientAltar;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientPedestal;
import io.github.thebusybiscuit.slimefun4.implementation.items.backpacks.Cooler;
import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor;
import io.github.thebusybiscuit.slimefun4.implementation.items.tools.GrapplingHook;
@ -144,7 +145,6 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon {
private final Config researches = new Config(this, "Researches.yml");
// Listeners that need to be accessed elsewhere
private final AncientAltarListener ancientAltarListener = new AncientAltarListener();
private final GrapplingHookListener grapplingHookListener = new GrapplingHookListener();
private final BackpackListener backpackListener = new BackpackListener();
private final SlimefunBowListener bowListener = new SlimefunBowListener();
@ -210,7 +210,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon {
networkManager = new NetworkManager(networkSize);
// Setting up bStats
new Thread(metricsService::start).start();
new Thread(metricsService::start, "Slimefun Metrics").start();
// Starting the Auto-Updater
if (config.getBoolean("options.auto-update")) {
@ -460,9 +460,8 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon {
new VampireBladeListener(this, (VampireBlade) SlimefunItems.BLADE_OF_VAMPIRES.getItem());
new CoolerListener(this, (Cooler) SlimefunItems.COOLER.getItem());
new SeismicAxeListener(this, (SeismicAxe) SlimefunItems.SEISMIC_AXE.getItem());
new AncientAltarListener(this, (AncientAltar) SlimefunItems.ANCIENT_ALTAR.getItem(), (AncientPedestal) SlimefunItems.ANCIENT_PEDESTAL.getItem());
grapplingHookListener.register(this, (GrapplingHook) SlimefunItems.GRAPPLING_HOOK.getItem());
ancientAltarListener.register(this, (AncientAltar) SlimefunItems.ANCIENT_ALTAR.getItem());
bowListener.register(this);
// Toggleable Listeners for performance reasons
@ -624,10 +623,6 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon {
return instance.networkManager;
}
public static AncientAltarListener getAncientAltarListener() {
return instance.ancientAltarListener;
}
public static GrapplingHookListener getGrapplingHookListener() {
return instance.grapplingHookListener;
}

View File

@ -1,5 +1,8 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.altar;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.slimefun4.api.events.AncientAltarCraftEvent;
@ -26,6 +29,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class AncientAltar extends SlimefunItem {
private final int speed;
private final List<AltarRecipe> recipes = new ArrayList<>();
public AncientAltar(Category category, int speed, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
@ -48,4 +52,8 @@ public class AncientAltar extends SlimefunItem {
return speed;
}
public List<AltarRecipe> getRecipes() {
return recipes;
}
}

View File

@ -1,30 +1,131 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.altar;
import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack;
import java.util.Optional;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AncientAltarListener;
import io.github.thebusybiscuit.slimefun4.implementation.tasks.AncientAltarTask;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
/**
* The {@link AncientPedestal} is a part of the {@link AncientAltar}.
* You can place any {@link ItemStack} onto the {@link AncientPedestal} to provide it to
* the altar as a crafting ingredient.
*
* @author Redemption198
* @author TheBusyBiscuit
*
* @see AncientAltar
* @see AncientAltarListener
* @see AncientAltarTask
*
*/
public class AncientPedestal extends SlimefunItem {
public static final String ITEM_PREFIX = ChatColors.color("&dALTAR &3Probe - &e");
public AncientPedestal(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
super(category, item, recipeType, recipe, recipeOutput);
SlimefunItem.registerBlockHandler(getID(), (p, b, tool, reason) -> {
AncientAltarListener listener = SlimefunPlugin.getAncientAltarListener();
Item stack = listener.findItem(b);
Optional<Item> entity = getPlacedItem(b);
if (stack != null) {
stack.removeMetadata("no_pickup", SlimefunPlugin.instance());
b.getWorld().dropItem(b.getLocation(), listener.fixItemStack(stack.getItemStack(), stack.getCustomName()));
stack.remove();
if (entity.isPresent()) {
Item stack = entity.get();
if (stack.isValid()) {
stack.removeMetadata("no_pickup", SlimefunPlugin.instance());
b.getWorld().dropItem(b.getLocation(), getOriginalItemStack(stack));
stack.remove();
}
}
return true;
});
}
public Optional<Item> getPlacedItem(Block pedestal) {
Location l = pedestal.getLocation().add(0.5, 1.2, 0.5);
for (Entity n : l.getWorld().getNearbyEntities(l, 0.5, 0.5, 0.5, this::testItem)) {
if (n instanceof Item) {
return Optional.of((Item) n);
}
}
return Optional.empty();
}
private boolean testItem(Entity n) {
if (n instanceof Item && n.isValid()) {
Item item = (Item) n;
ItemMeta meta = item.getItemStack().getItemMeta();
return meta.hasDisplayName() && meta.getDisplayName().startsWith(ITEM_PREFIX);
}
else {
return false;
}
}
public ItemStack getOriginalItemStack(Item item) {
ItemStack stack = item.getItemStack().clone();
String customName = item.getCustomName();
if (customName.equals(ItemUtils.getItemName(new ItemStack(stack.getType())))) {
ItemMeta im = stack.getItemMeta();
im.setDisplayName(null);
stack.setItemMeta(im);
}
else {
ItemMeta im = stack.getItemMeta();
if (!customName.startsWith(String.valueOf(ChatColor.COLOR_CHAR))) {
customName = ChatColor.WHITE + customName;
}
im.setDisplayName(customName);
stack.setItemMeta(im);
}
return stack;
}
public void placeItem(Player p, Block b) {
ItemStack hand = p.getInventory().getItemInMainHand();
ItemStack stack = new CustomItem(hand, ITEM_PREFIX + System.nanoTime());
stack.setAmount(1);
if (p.getGameMode() != GameMode.CREATIVE) {
ItemUtils.consumeItem(hand, false);
}
String nametag = ItemUtils.getItemName(stack);
Item entity = b.getWorld().dropItem(b.getLocation().add(0.5, 1.2, 0.5), stack);
entity.setVelocity(new Vector(0, 0.1, 0));
SlimefunUtils.markAsNoPickup(entity, "altar_item");
entity.setCustomNameVisible(true);
entity.setCustomName(nametag);
p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F);
}
}

View File

@ -0,0 +1,25 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.armor;
import org.bukkit.block.data.type.Farmland;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
/**
* The {@link FarmerShoes} are just a simple pair of boots which allows a {@link Player} to walk
* on {@link Farmland} without breaking it.
*
* @author TheBusyBiscuit
*
*/
public class FarmerShoes extends SlimefunItem {
public FarmerShoes(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
}
}

View File

@ -0,0 +1,93 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.armor;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
/**
* The Boots of the Stomper are boots which damage nearby enemies whenever the {@link Player}
* takes fall damage.
*
* @author TheBusyBiscuit
*
*/
public class StomperBoots extends SlimefunItem {
public StomperBoots(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
}
/**
* This will apply the "stomp" effect to the given {@link EntityDamageEvent}.
*
* @param fallDamageEvent
* The {@link EntityDamageEvent} in which the {@link Player} has taken fall damage
*/
public void stomp(EntityDamageEvent fallDamageEvent) {
Player p = (Player) fallDamageEvent.getEntity();
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F);
p.setVelocity(new Vector(0, 0.7, 0));
for (Entity n : p.getNearbyEntities(4, 4, 4)) {
if (n instanceof LivingEntity && n.isValid() && !n.getUniqueId().equals(p.getUniqueId())) {
Vector velocity = getShockwave(p.getLocation(), n.getLocation());
n.setVelocity(velocity);
// Check if it's not a Player or if PvP is enabled
if (!(n instanceof Player) || (p.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, n.getLocation(), ProtectableAction.PVP))) {
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, fallDamageEvent.getDamage() / 2);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
((LivingEntity) n).damage(event.getDamage());
}
}
}
}
for (BlockFace face : BlockFace.values()) {
Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face);
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
}
}
/**
* This gives us the "shockwave" {@link Vector} for a given target.
*
* @param origin
* The {@link Location} of our {@link Player}
* @param target
* The {@link Location} of the {@link Entity} we are pushing away
*
* @return A {@link Vector} to determine the velocity for our {@link Entity}
*/
private Vector getShockwave(Location origin, Location target) {
// As the distance approaches zero we might slip into a "division by zero" when normalizing
if (origin.distanceSquared(target) < 0.05) {
return new Vector(0, 1, 0);
}
else {
Vector direction = target.toVector().subtract(origin.toVector());
return direction.normalize().multiply(1.4);
}
}
}

View File

@ -1,6 +1,7 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.backpacks;
import org.bukkit.Sound;
import org.bukkit.block.EnderChest;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@ -9,8 +10,16 @@ import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler;
import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
/**
* The {@link EnderBackpack} is a pretty simple {@link SlimefunItem} which opens your
* {@link EnderChest} upon right clicking.
*
* @author TheBusyBiscuit
*
*/
public class EnderBackpack extends SimpleSlimefunItem<ItemUseHandler> implements NotPlaceable {
public EnderBackpack(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {

View File

@ -4,8 +4,11 @@ import java.util.List;
import java.util.Optional;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Levelled;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
@ -31,6 +34,14 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
/**
* This machine collects liquids from the {@link World} and puts them
* into buckets provided to the machine by using energy.
*
* @author TheBusyBiscuit
* @author Linox
*
*/
public class FluidPump extends SimpleSlimefunItem<BlockTicker> implements InventoryBlock, EnergyNetComponent {
private static final int ENERGY_CONSUMPTION = 32;
@ -130,24 +141,47 @@ public class FluidPump extends SimpleSlimefunItem<BlockTicker> implements Invent
}
private void consumeFluid(Block fluid) {
if (fluid.getType() == Material.WATER) {
fluid.setType(Material.AIR);
return;
if (fluid.isLiquid()) {
if (fluid.getType() == Material.WATER || fluid.getType() == Material.BUBBLE_COLUMN) {
// With water we can be sure to find an infinite source whenever we go
// further than 2 blocks, so we can just remove the water here and save
// outselves all of that computing...
fluid.setType(Material.AIR);
}
else {
List<Block> list = Vein.find(fluid, RANGE, block -> isLiquid(block) && block.getType() == fluid.getType());
list.get(list.size() - 1).setType(Material.AIR);
}
}
List<Block> list = Vein.find(fluid, RANGE, block -> block.isLiquid() && block.getType() == fluid.getType());
list.get(list.size() - 1).setType(Material.AIR);
}
private Optional<ItemStack> getFilledBucket(Block fluid) {
if (fluid.getType() == Material.LAVA) {
return Optional.of(new ItemStack(Material.LAVA_BUCKET));
}
else if (fluid.getType() == Material.WATER) {
else if (fluid.getType() == Material.WATER || fluid.getType() == Material.BUBBLE_COLUMN) {
return Optional.of(new ItemStack(Material.WATER_BUCKET));
}
else {
return Optional.empty();
}
}
return Optional.empty();
private boolean isLiquid(Block block) {
if (block.isLiquid()) {
BlockData data = block.getBlockData();
if (data instanceof Levelled) {
// Check if this is a full block.
return ((Levelled) data).getLevel() == 0;
}
else {
return false;
}
}
else {
return false;
}
}
@Override

View File

@ -1,5 +1,6 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.medical;
import org.bukkit.attribute.Attribute;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
@ -11,6 +12,8 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class Medicine extends SimpleSlimefunItem<ItemConsumptionHandler> {
private static final double HEALING_AMOUNT = 8.0;
public Medicine(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
}
@ -26,6 +29,10 @@ public class Medicine extends SimpleSlimefunItem<ItemConsumptionHandler> {
if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION);
if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS);
double health = p.getHealth() + HEALING_AMOUNT;
double maxHealth = p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
p.setHealth(Math.min(health, maxHealth));
p.setFireTicks(0);
};
}

View File

@ -2,9 +2,9 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.medical;
import org.bukkit.GameMode;
import org.bukkit.Sound;
import org.bukkit.attribute.Attribute;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
@ -16,6 +16,8 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class Vitamins extends SimpleSlimefunItem<ItemUseHandler> {
private static final double HEALING_AMOUNT = 8.0;
public Vitamins(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
}
@ -40,7 +42,10 @@ public class Vitamins extends SimpleSlimefunItem<ItemUseHandler> {
if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS);
p.setFireTicks(0);
p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2));
double health = p.getHealth() + HEALING_AMOUNT;
double maxHealth = p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
p.setHealth(Math.min(health, maxHealth));
e.cancel();
};

View File

@ -1,11 +1,10 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.weapons;
import org.bukkit.Sound;
import org.bukkit.attribute.Attribute;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.VampireBladeListener;
@ -25,6 +24,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
*/
public class VampireBlade extends SlimefunItem {
private static final double HEALING_AMOUNT = 4.0;
private final ItemSetting<Integer> chance = new ItemSetting<>("chance", 45);
public VampireBlade(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
@ -44,7 +44,9 @@ public class VampireBlade extends SlimefunItem {
public void heal(Player p) {
p.playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 0.7F, 0.7F);
p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 1));
double health = p.getHealth() + HEALING_AMOUNT;
double maxHealth = p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
p.setHealth(Math.min(health, maxHealth));
}
}

View File

@ -8,14 +8,12 @@ import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Result;
@ -25,9 +23,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
@ -54,19 +50,19 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
*/
public class AncientAltarListener implements Listener {
public static final String ITEM_PREFIX = ChatColors.color("&dALTAR &3Probe - &e");
private AncientAltar altarItem;
private AncientPedestal pedestalItem;
private AncientAltar altar;
private final Set<AltarRecipe> altarRecipes = new HashSet<>();
private final Set<Location> altarsInUse = new HashSet<>();
private final List<Block> altars = new ArrayList<>();
private final Set<UUID> removedItems = new HashSet<>();
public void register(SlimefunPlugin plugin, AncientAltar altar) {
public AncientAltarListener(SlimefunPlugin plugin, AncientAltar altar, AncientPedestal pedestal) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
this.altar = altar;
this.altarItem = altar;
this.pedestalItem = pedestal;
}
/**
@ -82,13 +78,9 @@ public class AncientAltarListener implements Listener {
return altars;
}
public Set<AltarRecipe> getRecipes() {
return altarRecipes;
}
@EventHandler
public void onInteract(PlayerRightClickEvent e) {
if (altar == null || altar.isDisabled() || e.useBlock() == Result.DENY) {
if (altarItem == null || altarItem.isDisabled() || e.useBlock() == Result.DENY) {
return;
}
@ -109,12 +101,12 @@ public class AncientAltarListener implements Listener {
String id = slimefunBlock.get().getID();
if (id.equals(SlimefunItems.ANCIENT_PEDESTAL.getItemId())) {
if (id.equals(pedestalItem.getID())) {
e.cancel();
usePedestal(b, e.getPlayer());
}
else if (id.equals(SlimefunItems.ANCIENT_ALTAR.getItemId())) {
if (!Slimefun.hasUnlocked(e.getPlayer(), SlimefunItems.ANCIENT_ALTAR.getItem(), true) || altarsInUse.contains(b.getLocation())) {
else if (id.equals(altarItem.getID())) {
if (!Slimefun.hasUnlocked(e.getPlayer(), altarItem, true) || altarsInUse.contains(b.getLocation())) {
e.cancel();
return;
}
@ -138,9 +130,9 @@ public class AncientAltarListener implements Listener {
}
// getting the currently placed item
Item stack = findItem(pedestal);
Optional<Item> stack = pedestalItem.getPlacedItem(pedestal);
if (stack == null) {
if (!stack.isPresent()) {
// Check if the Item in hand is valid
if (p.getInventory().getItemInMainHand().getType() != Material.AIR) {
// Check for pedestal obstructions
@ -150,17 +142,18 @@ public class AncientAltarListener implements Listener {
}
// place the item onto the pedestal
insertItem(p, pedestal);
pedestalItem.placeItem(p, pedestal);
}
}
else if (!removedItems.contains(stack.getUniqueId())) {
UUID uuid = stack.getUniqueId();
else if (!removedItems.contains(stack.get().getUniqueId())) {
Item entity = stack.get();
UUID uuid = entity.getUniqueId();
removedItems.add(uuid);
Slimefun.runSync(() -> removedItems.remove(uuid), 30L);
stack.remove();
p.getInventory().addItem(fixItemStack(stack.getItemStack(), stack.getCustomName()));
entity.remove();
p.getInventory().addItem(pedestalItem.getOriginalItemStack(entity));
p.playSound(pedestal.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1F, 1F);
}
}
@ -209,10 +202,10 @@ public class AncientAltarListener implements Listener {
List<ItemStack> input = new ArrayList<>();
for (Block pedestal : pedestals) {
Item stack = findItem(pedestal);
Optional<Item> stack = pedestalItem.getPlacedItem(pedestal);
if (stack != null) {
input.add(fixItemStack(stack.getItemStack(), stack.getCustomName()));
if (stack.isPresent()) {
input.add(pedestalItem.getOriginalItemStack(stack.get()));
}
}
@ -227,7 +220,9 @@ public class AncientAltarListener implements Listener {
}
b.getWorld().playSound(b.getLocation(), Sound.ENTITY_ILLUSIONER_PREPARE_MIRROR, 1, 1);
Slimefun.runSync(new AncientAltarTask(b, altar.getSpeed(), result.get(), pedestals, consumed, p), 10L);
AncientAltarTask task = new AncientAltarTask(this, b, altarItem.getSpeed(), result.get(), pedestals, consumed, p);
Slimefun.runSync(task, 10L);
}
else {
altars.remove(b);
@ -255,7 +250,7 @@ public class AncientAltarListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent e) {
if (altar == null || altar.isDisabled()) {
if (altarItem == null || altarItem.isDisabled()) {
return;
}
@ -264,82 +259,38 @@ public class AncientAltarListener implements Listener {
if (pedestal.getType() == Material.DISPENSER) {
String id = BlockStorage.checkID(pedestal);
if (id != null && id.equals(SlimefunItems.ANCIENT_PEDESTAL.getItemId())) {
if (id != null && id.equals(pedestalItem.getID())) {
SlimefunPlugin.getLocalization().sendMessage(e.getPlayer(), "messages.cannot-place", true);
e.setCancelled(true);
}
}
}
public ItemStack fixItemStack(ItemStack itemStack, String customName) {
ItemStack stack = itemStack.clone();
if (customName.equals(ItemUtils.getItemName(new ItemStack(itemStack.getType())))) {
ItemMeta im = stack.getItemMeta();
im.setDisplayName(null);
stack.setItemMeta(im);
}
else {
ItemMeta im = stack.getItemMeta();
if (!customName.startsWith(String.valueOf(ChatColor.COLOR_CHAR))) customName = ChatColor.RESET + customName;
im.setDisplayName(customName);
stack.setItemMeta(im);
}
return stack;
}
public Item findItem(Block b) {
for (Entity n : b.getChunk().getEntities()) {
if (n instanceof Item && b.getLocation().add(0.5, 1.2, 0.5).distanceSquared(n.getLocation()) < 0.5D && n.getCustomName() != null) {
return (Item) n;
}
}
return null;
}
private void insertItem(Player p, Block b) {
ItemStack hand = p.getInventory().getItemInMainHand();
ItemStack stack = new CustomItem(hand, 1);
if (p.getGameMode() != GameMode.CREATIVE) {
ItemUtils.consumeItem(hand, false);
}
String nametag = ItemUtils.getItemName(stack);
Item entity = b.getWorld().dropItem(b.getLocation().add(0.5, 1.2, 0.5), new CustomItem(stack, ITEM_PREFIX + System.nanoTime()));
entity.setVelocity(new Vector(0, 0.1, 0));
SlimefunUtils.markAsNoPickup(entity, "altar_item");
entity.setCustomNameVisible(true);
entity.setCustomName(nametag);
p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F);
}
private List<Block> getPedestals(Block altar) {
List<Block> list = new ArrayList<>();
String id = SlimefunItems.ANCIENT_PEDESTAL.getItemId();
if (BlockStorage.check(altar.getRelative(2, 0, -2), id)) {
if (BlockStorage.check(altar.getRelative(2, 0, -2), pedestalItem.getID())) {
list.add(altar.getRelative(2, 0, -2));
}
if (BlockStorage.check(altar.getRelative(3, 0, 0), id)) {
if (BlockStorage.check(altar.getRelative(3, 0, 0), pedestalItem.getID())) {
list.add(altar.getRelative(3, 0, 0));
}
if (BlockStorage.check(altar.getRelative(2, 0, 2), id)) {
if (BlockStorage.check(altar.getRelative(2, 0, 2), pedestalItem.getID())) {
list.add(altar.getRelative(2, 0, 2));
}
if (BlockStorage.check(altar.getRelative(0, 0, 3), id)) {
if (BlockStorage.check(altar.getRelative(0, 0, 3), pedestalItem.getID())) {
list.add(altar.getRelative(0, 0, 3));
}
if (BlockStorage.check(altar.getRelative(-2, 0, 2), id)) {
if (BlockStorage.check(altar.getRelative(-2, 0, 2), pedestalItem.getID())) {
list.add(altar.getRelative(-2, 0, 2));
}
if (BlockStorage.check(altar.getRelative(-3, 0, 0), id)) {
if (BlockStorage.check(altar.getRelative(-3, 0, 0), pedestalItem.getID())) {
list.add(altar.getRelative(-3, 0, 0));
}
if (BlockStorage.check(altar.getRelative(-2, 0, -2), id)) {
if (BlockStorage.check(altar.getRelative(-2, 0, -2), pedestalItem.getID())) {
list.add(altar.getRelative(-2, 0, -2));
}
if (BlockStorage.check(altar.getRelative(0, 0, -3), id)) {
if (BlockStorage.check(altar.getRelative(0, 0, -3), pedestalItem.getID())) {
list.add(altar.getRelative(0, 0, -3));
}
@ -370,7 +321,7 @@ public class AncientAltarListener implements Listener {
}
private Optional<ItemStack> checkRecipe(ItemStack catalyst, List<ItemStackWrapper> items) {
for (AltarRecipe recipe : altarRecipes) {
for (AltarRecipe recipe : altarItem.getRecipes()) {
if (SlimefunUtils.isItemSimilar(catalyst, recipe.getCatalyst(), true)) {
Optional<ItemStack> optional = checkPedestals(items, recipe);

View File

@ -7,6 +7,7 @@ import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.inventory.meta.ItemMeta;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientPedestal;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
/**
@ -28,7 +29,7 @@ public class ItemPickupListener implements Listener {
else if (e.getItem().getItemStack().hasItemMeta()) {
ItemMeta meta = e.getItem().getItemStack().getItemMeta();
if (meta.hasDisplayName() && meta.getDisplayName().startsWith(AncientAltarListener.ITEM_PREFIX)) {
if (meta.hasDisplayName() && meta.getDisplayName().startsWith(AncientPedestal.ITEM_PREFIX)) {
e.setCancelled(true);
e.getItem().remove();
}
@ -43,7 +44,7 @@ public class ItemPickupListener implements Listener {
else if (e.getItem().getItemStack().hasItemMeta()) {
ItemMeta meta = e.getItem().getItemStack().getItemMeta();
if (meta.hasDisplayName() && meta.getDisplayName().startsWith(AncientAltarListener.ITEM_PREFIX)) {
if (meta.hasDisplayName() && meta.getDisplayName().startsWith(AncientPedestal.ITEM_PREFIX)) {
e.setCancelled(true);
e.getItem().remove();
}

View File

@ -1,20 +1,9 @@
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Predicate;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@ -23,21 +12,18 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.FarmerShoes;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.SlimefunArmorPiece;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.StomperBoots;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* This {@link Listener} is responsible for handling all boots provided by
* Slimefun, such as the Boots of the Stomper or any {@link SlimefunArmorPiece} that
* is a pair of boots and needs to listen to an {@link Event}.
* Slimefun, such as the {@link StomperBoots} or any {@link SlimefunArmorPiece} that
* is a pair of boots and needs to listen to an {@link EntityDamageEvent}.
*
* @author TheBusyBiscuit
* @author Walshy
@ -45,80 +31,65 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
*/
public class SlimefunBootsListener implements Listener {
private final Map<String, Predicate<EntityDamageEvent>> cancelledEvents = new HashMap<>();
public SlimefunBootsListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
cancelledEvents.put("ENDER_BOOTS", e -> e instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) e).getDamager() instanceof EnderPearl);
cancelledEvents.put("BOOTS_OF_THE_STOMPER", e -> {
if (e.getCause() == DamageCause.FALL) {
stomp(e);
return true;
}
return false;
});
cancelledEvents.put("SLIME_BOOTS", e -> e.getCause() == DamageCause.FALL);
cancelledEvents.put("SLIME_STEEL_BOOTS", e -> e.getCause() == DamageCause.FALL);
}
private void stomp(EntityDamageEvent e) {
Player p = (Player) e.getEntity();
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F);
p.setVelocity(new Vector(0.0, 0.7, 0.0));
for (Entity n : p.getNearbyEntities(4, 4, 4)) {
if (n instanceof LivingEntity && !n.getUniqueId().equals(p.getUniqueId())) {
Vector velocity = n.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(1.4);
n.setVelocity(velocity);
if (!(n instanceof Player) || (p.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, n.getLocation(), ProtectableAction.PVP))) {
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, e.getDamage() / 2);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) ((LivingEntity) n).damage(e.getDamage() / 2);
}
}
}
for (BlockFace face : BlockFace.values()) {
Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face);
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
}
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onDamage(EntityDamageEvent e) {
if (e.getEntity() instanceof Player) {
Player p = (Player) e.getEntity();
SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots());
if (e.getCause() == DamageCause.FALL) {
onFallDamage(e);
}
else if (e instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e;
if (boots != null) {
for (Map.Entry<String, Predicate<EntityDamageEvent>> event : cancelledEvents.entrySet()) {
if (boots.getID().equals(event.getKey())) {
if (Slimefun.hasUnlocked(p, boots, true) && event.getValue().test(e)) {
e.setCancelled(true);
}
break;
}
if (event.getDamager() instanceof EnderPearl) {
onEnderPearlDamage(e);
}
}
}
}
private void onFallDamage(EntityDamageEvent e) {
Player p = (Player) e.getEntity();
SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots());
if (boots != null) {
// Check if the boots were researched
if (!Slimefun.hasUnlocked(p, boots, true)) {
return;
}
if (boots instanceof StomperBoots) {
e.setCancelled(true);
((StomperBoots) boots).stomp(e);
}
else if (boots.getID().equals("SLIME_BOOTS") || boots.getID().equals("SLIME_STEEL_BOOTS")) {
e.setCancelled(true);
}
}
}
private void onEnderPearlDamage(EntityDamageEvent e) {
Player p = (Player) e.getEntity();
SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots());
if (boots != null && boots.getID().equals("ENDER_BOOTS") && Slimefun.hasUnlocked(p, boots, true)) {
e.setCancelled(true);
}
}
@EventHandler
public void onTrample(PlayerInteractEvent e) {
if (e.getAction() == Action.PHYSICAL) {
Block b = e.getClickedBlock();
if (b != null && b.getType() == Material.FARMLAND) {
ItemStack boots = e.getPlayer().getInventory().getBoots();
Player p = e.getPlayer();
SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots());
if (SlimefunUtils.isItemSimilar(boots, SlimefunItems.FARMER_SHOES, true) && Slimefun.hasUnlocked(e.getPlayer(), boots, true)) {
if (boots instanceof FarmerShoes && Slimefun.hasUnlocked(p, boots, true)) {
e.setCancelled(true);
}
}

View File

@ -17,6 +17,7 @@ import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Trident;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@ -75,12 +76,19 @@ public class TalismanListener implements Listener {
Talisman.checkFor(e, SlimefunItems.TALISMAN_WARRIOR);
}
if (e.getCause() == DamageCause.PROJECTILE && ((EntityDamageByEntityEvent) e).getDamager() instanceof Projectile) {
Projectile projectile = (Projectile) ((EntityDamageByEntityEvent) e).getDamager();
if (e.getCause() == DamageCause.PROJECTILE && e instanceof EntityDamageByEntityEvent) {
onProjectileDamage((EntityDamageByEntityEvent) e);
}
}
}
if (Talisman.checkFor(e, SlimefunItems.TALISMAN_WHIRLWIND)) {
returnProjectile((Player) e.getEntity(), projectile);
}
private void onProjectileDamage(EntityDamageByEntityEvent e) {
if (e.getDamager() instanceof Projectile && !(e.getDamager() instanceof Trident)) {
Projectile projectile = (Projectile) e.getDamager();
if (Talisman.checkFor(e, SlimefunItems.TALISMAN_WHIRLWIND)) {
Player p = (Player) e.getEntity();
returnProjectile(p, projectile);
}
}
}

View File

@ -31,9 +31,11 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.androids.FisherAn
import io.github.thebusybiscuit.slimefun4.implementation.items.androids.MinerAndroid;
import io.github.thebusybiscuit.slimefun4.implementation.items.androids.ProgrammableAndroid;
import io.github.thebusybiscuit.slimefun4.implementation.items.androids.WoodcutterAndroid;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.FarmerShoes;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.HazmatArmorPiece;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.Parachute;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.SlimefunArmorPiece;
import io.github.thebusybiscuit.slimefun4.implementation.items.armor.StomperBoots;
import io.github.thebusybiscuit.slimefun4.implementation.items.backpacks.Cooler;
import io.github.thebusybiscuit.slimefun4.implementation.items.backpacks.EnderBackpack;
import io.github.thebusybiscuit.slimefun4.implementation.items.backpacks.RestoredBackpack;
@ -1049,7 +1051,7 @@ public final class SlimefunItemSetup {
new ItemStack[] {new ItemStack(Material.OAK_SLAB), null, new ItemStack(Material.OAK_SLAB), new ItemStack(Material.OAK_SLAB), null, new ItemStack(Material.OAK_SLAB), new ItemStack(Material.OAK_SLAB), new ItemStack(Material.CAULDRON), new ItemStack(Material.OAK_SLAB)})
.register(plugin);
new SlimefunItem(categories.magicalArmor, SlimefunItems.FARMER_SHOES, RecipeType.ARMOR_FORGE,
new FarmerShoes(categories.magicalArmor, SlimefunItems.FARMER_SHOES, RecipeType.ARMOR_FORGE,
new ItemStack[] {null, null, null, new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK), new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK)})
.register(plugin);
@ -1066,7 +1068,7 @@ public final class SlimefunItemSetup {
new IndustrialMiner(categories.basicMachines, SlimefunItems.INDUSTRIAL_MINER, Material.IRON_BLOCK, false, 3).register(plugin);
new AdvancedIndustrialMiner(categories.basicMachines, SlimefunItems.ADVANCED_INDUSTRIAL_MINER).register(plugin);
new SlimefunItem(categories.magicalArmor, SlimefunItems.BOOTS_OF_THE_STOMPER, RecipeType.ARMOR_FORGE,
new StomperBoots(categories.magicalArmor, SlimefunItems.BOOTS_OF_THE_STOMPER, RecipeType.ARMOR_FORGE,
new ItemStack[] {null, null, null, new ItemStack(Material.YELLOW_WOOL), null, new ItemStack(Material.YELLOW_WOOL), new ItemStack(Material.PISTON), null, new ItemStack(Material.PISTON)})
.register(plugin);

View File

@ -5,8 +5,8 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import io.github.thebusybiscuit.slimefun4.api.events.AncientAltarCraftEvent;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Location;
@ -18,8 +18,11 @@ import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.slimefun4.api.events.AncientAltarCraftEvent;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientAltar;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientPedestal;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AncientAltarListener;
import me.mrCookieSlime.Slimefun.api.Slimefun;
@ -37,7 +40,8 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
*/
public class AncientAltarTask implements Runnable {
private final AncientAltarListener listener = SlimefunPlugin.getAncientAltarListener();
private final AncientAltarListener listener;
private final AncientPedestal pedestalItem = (AncientPedestal) SlimefunItems.ANCIENT_PEDESTAL.getItem();
private final Block altar;
private final int speed;
@ -47,13 +51,14 @@ public class AncientAltarTask implements Runnable {
private final List<ItemStack> items;
private final Collection<Location> particleLocations = new LinkedList<>();
private final Map<Item, Location> itemLock = new HashMap<>();
private final Map<Item, Location> positionLock = new HashMap<>();
private boolean running;
private int stage;
private final Player player;
public AncientAltarTask(Block altar, int speed, ItemStack output, List<Block> pedestals, List<ItemStack> items, Player player) {
public AncientAltarTask(AncientAltarListener listener, Block altar, int speed, ItemStack output, List<Block> pedestals, List<ItemStack> items, Player player) {
this.listener = listener;
this.dropLocation = altar.getLocation().add(0.5, 1.3, 0.5);
this.speed = speed;
this.altar = altar;
@ -66,8 +71,12 @@ public class AncientAltarTask implements Runnable {
this.stage = 0;
for (Block pedestal : pedestals) {
Item item = listener.findItem(pedestal);
this.itemLock.put(item, item.getLocation().clone());
Optional<Item> item = pedestalItem.getPlacedItem(pedestal);
if (item.isPresent()) {
Item entity = item.get();
positionLock.put(entity, entity.getLocation().clone());
}
}
}
@ -94,7 +103,7 @@ public class AncientAltarTask implements Runnable {
}
private boolean checkLockedItems() {
for (Map.Entry<Item, Location> entry : itemLock.entrySet()) {
for (Map.Entry<Item, Location> entry : positionLock.entrySet()) {
if (entry.getKey().getLocation().distanceSquared(entry.getValue()) > 0.1) {
return false;
}
@ -114,22 +123,23 @@ public class AncientAltarTask implements Runnable {
}
private void checkPedestal(Block pedestal) {
Item item = listener.findItem(pedestal);
Optional<Item> item = pedestalItem.getPlacedItem(pedestal);
if (item == null || itemLock.remove(item) == null) {
if (!item.isPresent() || positionLock.remove(item.get()) == null) {
abort();
}
else {
Item entity = item.get();
particleLocations.add(pedestal.getLocation().add(0.5, 1.5, 0.5));
items.add(listener.fixItemStack(item.getItemStack(), item.getCustomName()));
items.add(pedestalItem.getOriginalItemStack(entity));
pedestal.getWorld().playSound(pedestal.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1F, 2F);
dropLocation.getWorld().spawnParticle(Particle.ENCHANTMENT_TABLE, pedestal.getLocation().add(0.5, 1.5, 0.5), 16, 0.3F, 0.2F, 0.3F);
dropLocation.getWorld().spawnParticle(Particle.CRIT_MAGIC, pedestal.getLocation().add(0.5, 1.5, 0.5), 8, 0.3F, 0.2F, 0.3F);
itemLock.remove(item);
item.remove();
item.removeMetadata("no_pickup", SlimefunPlugin.instance());
positionLock.remove(entity);
entity.remove();
entity.removeMetadata("no_pickup", SlimefunPlugin.instance());
}
}
@ -143,7 +153,7 @@ public class AncientAltarTask implements Runnable {
// This should re-enable altar blocks on craft failure.
listener.getAltarsInUse().remove(altar.getLocation());
dropLocation.getWorld().playSound(dropLocation, Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, 1F, 1F);
itemLock.clear();
positionLock.clear();
listener.getAltars().remove(altar);
}

View File

@ -24,6 +24,7 @@ import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AltarRecipe;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientAltar;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
@ -44,7 +45,8 @@ public class RecipeType implements Keyed {
public static final RecipeType ANCIENT_ALTAR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "ancient_altar"), SlimefunItems.ANCIENT_ALTAR, (recipe, output) -> {
AltarRecipe altarRecipe = new AltarRecipe(Arrays.asList(recipe), output);
SlimefunPlugin.getAncientAltarListener().getRecipes().add(altarRecipe);
AncientAltar altar = ((AncientAltar) SlimefunItems.ANCIENT_ALTAR.getItem());
altar.getRecipes().add(altarRecipe);
});
public static final RecipeType MOB_DROP = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "mob_drop"), new CustomItem(Material.IRON_SWORD, "&bMob Drop"), RecipeType::registerMobDrop, "", "&rKill the specified Mob to obtain this Item");

View File

@ -1,518 +0,0 @@
package me.mrCookieSlime.Slimefun.Lists;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
/**
* This class was moved to {@link io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems}.
* All fields there are now finally of type {@link SlimefunItemStack}.
*
* @deprecated Moved to {@link io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems}. Use that instead.
*
* @author TheBusyBiscuit
*
*/
@Deprecated
public final class SlimefunItems {
private SlimefunItems() {}
public static final SlimefunItemStack PORTABLE_CRAFTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PORTABLE_CRAFTER;
public static final SlimefunItemStack PORTABLE_DUSTBIN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PORTABLE_DUSTBIN;
public static final SlimefunItemStack ENDER_BACKPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_BACKPACK;
public static final SlimefunItemStack MAGIC_EYE_OF_ENDER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGIC_EYE_OF_ENDER;
public static final SlimefunItemStack BROKEN_SPAWNER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BROKEN_SPAWNER;
public static final SlimefunItemStack REPAIRED_SPAWNER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REPAIRED_SPAWNER;
public static final SlimefunItemStack INFERNAL_BONEMEAL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.INFERNAL_BONEMEAL;
public static final SlimefunItemStack GOLD_PAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_PAN;
public static final SlimefunItemStack NETHER_GOLD_PAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NETHER_GOLD_PAN;
public static final SlimefunItemStack PARACHUTE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PARACHUTE;
public static final SlimefunItemStack GRAPPLING_HOOK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GRAPPLING_HOOK;
public static final SlimefunItemStack SOLAR_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLAR_HELMET;
public static final SlimefunItemStack CLOTH = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CLOTH;
public static final SlimefunItemStack CAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TIN_CAN;
public static final SlimefunItemStack NIGHT_VISION_GOGGLES = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NIGHT_VISION_GOGGLES;
public static final SlimefunItemStack FARMER_SHOES = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FARMER_SHOES;
public static final SlimefunItemStack INFUSED_MAGNET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.INFUSED_MAGNET;
public static final SlimefunItemStack RAG = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAG;
public static final SlimefunItemStack BANDAGE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BANDAGE;
public static final SlimefunItemStack SPLINT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SPLINT;
public static final SlimefunItemStack VITAMINS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.VITAMINS;
public static final SlimefunItemStack MEDICINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MEDICINE;
public static final SlimefunItemStack FLASK_OF_KNOWLEDGE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FLASK_OF_KNOWLEDGE;
public static final SlimefunItemStack FILLED_FLASK_OF_KNOWLEDGE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FILLED_FLASK_OF_KNOWLEDGE;
public static final SlimefunItemStack BACKPACK_SMALL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BACKPACK_SMALL;
public static final SlimefunItemStack BACKPACK_MEDIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BACKPACK_MEDIUM;
public static final SlimefunItemStack BACKPACK_LARGE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BACKPACK_LARGE;
public static final SlimefunItemStack WOVEN_BACKPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WOVEN_BACKPACK;
public static final SlimefunItemStack GILDED_BACKPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GILDED_BACKPACK;
public static final SlimefunItemStack RADIANT_BACKPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RADIANT_BACKPACK;
public static final SlimefunItemStack BOUND_BACKPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BOUND_BACKPACK;
public static final SlimefunItemStack COOLER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COOLER;
public static final SlimefunItemStack RESTORED_BACKPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RESTORED_BACKPACK;
public static final SlimefunItemStack DURALUMIN_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DURALUMIN_JETPACK;
public static final SlimefunItemStack SOLDER_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLDER_JETPACK;
public static final SlimefunItemStack BILLON_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BILLON_JETPACK;
public static final SlimefunItemStack STEEL_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STEEL_JETPACK;
public static final SlimefunItemStack DAMASCUS_STEEL_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_JETPACK;
public static final SlimefunItemStack REINFORCED_ALLOY_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_JETPACK;
public static final SlimefunItemStack CARBONADO_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBONADO_JETPACK;
public static final SlimefunItemStack ARMORED_JETPACK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ARMORED_JETPACK;
public static final SlimefunItemStack DURALUMIN_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DURALUMIN_JETBOOTS;
public static final SlimefunItemStack SOLDER_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLDER_JETBOOTS;
public static final SlimefunItemStack BILLON_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BILLON_JETBOOTS;
public static final SlimefunItemStack STEEL_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STEEL_JETBOOTS;
public static final SlimefunItemStack DAMASCUS_STEEL_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_JETBOOTS;
public static final SlimefunItemStack REINFORCED_ALLOY_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_JETBOOTS;
public static final SlimefunItemStack CARBONADO_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBONADO_JETBOOTS;
public static final SlimefunItemStack ARMORED_JETBOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ARMORED_JETBOOTS;
public static final SlimefunItemStack DURALUMIN_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DURALUMIN_MULTI_TOOL;
public static final SlimefunItemStack SOLDER_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLDER_MULTI_TOOL;
public static final SlimefunItemStack BILLON_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BILLON_MULTI_TOOL;
public static final SlimefunItemStack STEEL_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STEEL_MULTI_TOOL;
public static final SlimefunItemStack DAMASCUS_STEEL_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL;
public static final SlimefunItemStack REINFORCED_ALLOY_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL;
public static final SlimefunItemStack CARBONADO_MULTI_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBONADO_MULTI_TOOL;
public static final SlimefunItemStack FORTUNE_COOKIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FORTUNE_COOKIE;
public static final SlimefunItemStack DIET_COOKIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DIET_COOKIE;
public static final SlimefunItemStack MAGIC_SUGAR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGIC_SUGAR;
public static final SlimefunItemStack MONSTER_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MONSTER_JERKY;
public static final SlimefunItemStack APPLE_JUICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.APPLE_JUICE;
public static final SlimefunItemStack MELON_JUICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MELON_JUICE;
public static final SlimefunItemStack CARROT_JUICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARROT_JUICE;
public static final SlimefunItemStack PUMPKIN_JUICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PUMPKIN_JUICE;
public static final SlimefunItemStack SWEET_BERRY_JUICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SWEET_BERRY_JUICE;
public static final SlimefunItemStack GOLDEN_APPLE_JUICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLDEN_APPLE_JUICE;
public static final SlimefunItemStack BEEF_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BEEF_JERKY;
public static final SlimefunItemStack PORK_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PORK_JERKY;
public static final SlimefunItemStack CHICKEN_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHICKEN_JERKY;
public static final SlimefunItemStack MUTTON_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MUTTON_JERKY;
public static final SlimefunItemStack RABBIT_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RABBIT_JERKY;
public static final SlimefunItemStack FISH_JERKY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FISH_JERKY;
public static final SlimefunItemStack KELP_COOKIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.KELP_COOKIE;
public static final SlimefunItemStack CHRISTMAS_MILK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_MILK;
public static final SlimefunItemStack CHRISTMAS_CHOCOLATE_MILK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_CHOCOLATE_MILK;
public static final SlimefunItemStack CHRISTMAS_EGG_NOG = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_EGG_NOG;
public static final SlimefunItemStack CHRISTMAS_APPLE_CIDER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_APPLE_CIDER;
public static final SlimefunItemStack CHRISTMAS_COOKIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_COOKIE;
public static final SlimefunItemStack CHRISTMAS_FRUIT_CAKE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_FRUIT_CAKE;
public static final SlimefunItemStack CHRISTMAS_APPLE_PIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_APPLE_PIE;
public static final SlimefunItemStack CHRISTMAS_HOT_CHOCOLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_HOT_CHOCOLATE;
public static final SlimefunItemStack CHRISTMAS_CAKE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_CAKE;
public static final SlimefunItemStack CHRISTMAS_CARAMEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_CARAMEL;
public static final SlimefunItemStack CHRISTMAS_CARAMEL_APPLE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_CARAMEL_APPLE;
public static final SlimefunItemStack CHRISTMAS_CHOCOLATE_APPLE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE;
public static final SlimefunItemStack CHRISTMAS_PRESENT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHRISTMAS_PRESENT;
public static final SlimefunItemStack EASTER_EGG = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EASTER_EGG;
public static final SlimefunItemStack EASTER_CARROT_PIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EASTER_CARROT_PIE;
public static final SlimefunItemStack EASTER_APPLE_PIE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EASTER_APPLE_PIE;
public static final SlimefunItemStack GRANDMAS_WALKING_STICK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GRANDMAS_WALKING_STICK;
public static final SlimefunItemStack GRANDPAS_WALKING_STICK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GRANDPAS_WALKING_STICK;
public static final SlimefunItemStack SWORD_OF_BEHEADING = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SWORD_OF_BEHEADING;
public static final SlimefunItemStack BLADE_OF_VAMPIRES = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BLADE_OF_VAMPIRES;
public static final SlimefunItemStack SEISMIC_AXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SEISMIC_AXE;
public static final SlimefunItemStack EXPLOSIVE_BOW = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EXPLOSIVE_BOW;
public static final SlimefunItemStack ICY_BOW = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ICY_BOW;
public static final SlimefunItemStack AUTO_SMELT_PICKAXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SMELTERS_PICKAXE;
public static final SlimefunItemStack LUMBER_AXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LUMBER_AXE;
public static final SlimefunItemStack PICKAXE_OF_CONTAINMENT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PICKAXE_OF_CONTAINMENT;
public static final SlimefunItemStack HERCULES_PICKAXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HERCULES_PICKAXE;
public static final SlimefunItemStack EXPLOSIVE_PICKAXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EXPLOSIVE_PICKAXE;
public static final SlimefunItemStack EXPLOSIVE_SHOVEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EXPLOSIVE_SHOVEL;
public static final SlimefunItemStack PICKAXE_OF_THE_SEEKER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PICKAXE_OF_THE_SEEKER;
public static final SlimefunItemStack COBALT_PICKAXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COBALT_PICKAXE;
public static final SlimefunItemStack PICKAXE_OF_VEIN_MINING = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PICKAXE_OF_VEIN_MINING;
public static final SlimefunItemStack GLOWSTONE_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GLOWSTONE_HELMET;
public static final SlimefunItemStack GLOWSTONE_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GLOWSTONE_CHESTPLATE;
public static final SlimefunItemStack GLOWSTONE_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GLOWSTONE_LEGGINGS;
public static final SlimefunItemStack GLOWSTONE_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GLOWSTONE_BOOTS;
public static final SlimefunItemStack ENDER_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_HELMET;
public static final SlimefunItemStack ENDER_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_CHESTPLATE;
public static final SlimefunItemStack ENDER_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_LEGGINGS;
public static final SlimefunItemStack ENDER_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_BOOTS;
public static final SlimefunItemStack SLIME_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_HELMET;
public static final SlimefunItemStack SLIME_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_CHESTPLATE;
public static final SlimefunItemStack SLIME_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_LEGGINGS;
public static final SlimefunItemStack SLIME_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_BOOTS;
public static final SlimefunItemStack CACTUS_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CACTUS_HELMET;
public static final SlimefunItemStack CACTUS_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CACTUS_CHESTPLATE;
public static final SlimefunItemStack CACTUS_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CACTUS_LEGGINGS;
public static final SlimefunItemStack CACTUS_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CACTUS_BOOTS;
public static final SlimefunItemStack DAMASCUS_STEEL_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_HELMET;
public static final SlimefunItemStack DAMASCUS_STEEL_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_CHESTPLATE;
public static final SlimefunItemStack DAMASCUS_STEEL_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_LEGGINGS;
public static final SlimefunItemStack DAMASCUS_STEEL_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_BOOTS;
public static final SlimefunItemStack REINFORCED_ALLOY_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_HELMET;
public static final SlimefunItemStack REINFORCED_ALLOY_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_CHESTPLATE;
public static final SlimefunItemStack REINFORCED_ALLOY_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_LEGGINGS;
public static final SlimefunItemStack REINFORCED_ALLOY_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_BOOTS;
public static final SlimefunItemStack SCUBA_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SCUBA_HELMET;
public static final SlimefunItemStack HAZMATSUIT_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HAZMAT_CHESTPLATE;
public static final SlimefunItemStack HAZMATSUIT_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HAZMAT_LEGGINGS;
public static final SlimefunItemStack RUBBER_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HAZMAT_BOOTS;
public static final SlimefunItemStack GILDED_IRON_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GILDED_IRON_HELMET;
public static final SlimefunItemStack GILDED_IRON_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GILDED_IRON_CHESTPLATE;
public static final SlimefunItemStack GILDED_IRON_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GILDED_IRON_LEGGINGS;
public static final SlimefunItemStack GILDED_IRON_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GILDED_IRON_BOOTS;
public static final SlimefunItemStack GOLD_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLDEN_HELMET_12K;
public static final SlimefunItemStack GOLD_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLDEN_CHESTPLATE_12K;
public static final SlimefunItemStack GOLD_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLDEN_LEGGINGS_12K;
public static final SlimefunItemStack GOLD_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLDEN_BOOTS_12K;
public static final SlimefunItemStack SLIME_HELMET_STEEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_HELMET_STEEL;
public static final SlimefunItemStack SLIME_CHESTPLATE_STEEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_CHESTPLATE_STEEL;
public static final SlimefunItemStack SLIME_LEGGINGS_STEEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_LEGGINGS_STEEL;
public static final SlimefunItemStack SLIME_BOOTS_STEEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SLIME_BOOTS_STEEL;
public static final SlimefunItemStack BOOTS_OF_THE_STOMPER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BOOTS_OF_THE_STOMPER;
public static final ItemStack MAGIC_LUMP_1 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGIC_LUMP_1;
public static final ItemStack MAGIC_LUMP_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGIC_LUMP_2;
public static final ItemStack MAGIC_LUMP_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGIC_LUMP_3;
public static final ItemStack ENDER_LUMP_1 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_LUMP_1;
public static final ItemStack ENDER_LUMP_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_LUMP_2;
public static final ItemStack ENDER_LUMP_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_LUMP_3;
public static final SlimefunItemStack MAGICAL_BOOK_COVER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGICAL_BOOK_COVER;
public static final ItemStack BASIC_CIRCUIT_BOARD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BASIC_CIRCUIT_BOARD;
public static final ItemStack ADVANCED_CIRCUIT_BOARD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ADVANCED_CIRCUIT_BOARD;
public static final ItemStack WHEAT_FLOUR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WHEAT_FLOUR;
public static final ItemStack STEEL_PLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STEEL_PLATE;
public static final ItemStack BATTERY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BATTERY;
public static final ItemStack CARBON = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBON;
public static final ItemStack COMPRESSED_CARBON = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COMPRESSED_CARBON;
public static final ItemStack CARBON_CHUNK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBON_CHUNK;
public static final SlimefunItemStack STEEL_THRUSTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STEEL_THRUSTER;
public static final ItemStack POWER_CRYSTAL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.POWER_CRYSTAL;
public static final SlimefunItemStack CHAIN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHAIN;
public static final ItemStack HOOK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HOOK;
public static final ItemStack SIFTED_ORE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SIFTED_ORE;
public static final ItemStack STONE_CHUNK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STONE_CHUNK;
public static final SlimefunItemStack LAVA_CRYSTAL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LAVA_CRYSTAL;
public static final ItemStack SALT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SALT;
public static final ItemStack CHEESE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHEESE;
public static final ItemStack BUTTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BUTTER;
public static final SlimefunItemStack DUCT_TAPE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DUCT_TAPE;
public static final ItemStack HEAVY_CREAM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HEAVY_CREAM;
public static final SlimefunItemStack CRUSHED_ORE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CRUSHED_ORE;
public static final SlimefunItemStack PULVERIZED_ORE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PULVERIZED_ORE;
public static final SlimefunItemStack PURE_ORE_CLUSTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PURE_ORE_CLUSTER;
public static final SlimefunItemStack SMALL_URANIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SMALL_URANIUM;
public static final SlimefunItemStack TINY_URANIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TINY_URANIUM;
public static final ItemStack MAGNET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGNET;
public static final ItemStack NECROTIC_SKULL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NECROTIC_SKULL;
public static final ItemStack ESSENCE_OF_AFTERLIFE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ESSENCE_OF_AFTERLIFE;
public static final ItemStack ELECTRO_MAGNET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRO_MAGNET;
public static final ItemStack HEATING_COIL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HEATING_COIL;
public static final ItemStack COOLING_UNIT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COOLING_UNIT;
public static final ItemStack ELECTRIC_MOTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_MOTOR;
public static final ItemStack CARGO_MOTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARGO_MOTOR;
public static final SlimefunItemStack SCROLL_OF_DIMENSIONAL_TELEPOSITION = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION;
public static final SlimefunItemStack TOME_OF_KNOWLEDGE_SHARING = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TOME_OF_KNOWLEDGE_SHARING;
public static final ItemStack HARDENED_GLASS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HARDENED_GLASS;
public static final SlimefunItemStack WITHER_PROOF_OBSIDIAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WITHER_PROOF_OBSIDIAN;
public static final SlimefunItemStack WITHER_PROOF_GLASS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WITHER_PROOF_GLASS;
public static final ItemStack REINFORCED_PLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_PLATE;
public static final SlimefunItemStack ANCIENT_PEDESTAL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ANCIENT_PEDESTAL;
public static final SlimefunItemStack ANCIENT_ALTAR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ANCIENT_ALTAR;
public static final SlimefunItemStack COPPER_WIRE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COPPER_WIRE;
public static final SlimefunItemStack RAINBOW_WOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_WOOL;
public static final SlimefunItemStack RAINBOW_GLASS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS;
public static final SlimefunItemStack RAINBOW_CLAY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CLAY;
public static final SlimefunItemStack RAINBOW_GLASS_PANE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_PANE;
public static final SlimefunItemStack RAINBOW_CONCRETE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CONCRETE;
public static final SlimefunItemStack RAINBOW_GLAZED_TERRACOTTA = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLAZED_TERRACOTTA;
public static final SlimefunItemStack RAINBOW_WOOL_XMAS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_WOOL_XMAS;
public static final SlimefunItemStack RAINBOW_GLASS_XMAS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_XMAS;
public static final SlimefunItemStack RAINBOW_CLAY_XMAS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CLAY_XMAS;
public static final SlimefunItemStack RAINBOW_GLASS_PANE_XMAS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_PANE_XMAS;
public static final SlimefunItemStack RAINBOW_CONCRETE_XMAS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CONCRETE_XMAS;
public static final SlimefunItemStack RAINBOW_GLAZED_TERRACOTTA_XMAS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLAZED_TERRACOTTA_XMAS;
public static final SlimefunItemStack RAINBOW_WOOL_VALENTINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_WOOL_VALENTINE;
public static final SlimefunItemStack RAINBOW_GLASS_VALENTINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_VALENTINE;
public static final SlimefunItemStack RAINBOW_CLAY_VALENTINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CLAY_VALENTINE;
public static final SlimefunItemStack RAINBOW_GLASS_PANE_VALENTINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE;
public static final SlimefunItemStack RAINBOW_CONCRETE_VALENTINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CONCRETE_VALENTINE;
public static final SlimefunItemStack RAINBOW_GLAZED_TERRACOTTA_VALENTINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLAZED_TERRACOTTA_VALENTINE;
public static final SlimefunItemStack RAINBOW_WOOL_HALLOWEEN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_WOOL_HALLOWEEN;
public static final SlimefunItemStack RAINBOW_GLASS_HALLOWEEN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_HALLOWEEN;
public static final SlimefunItemStack RAINBOW_CLAY_HALLOWEEN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CLAY_HALLOWEEN;
public static final SlimefunItemStack RAINBOW_GLASS_PANE_HALLOWEEN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLASS_PANE_HALLOWEEN;
public static final SlimefunItemStack RAINBOW_CONCRETE_HALLOWEEN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_CONCRETE_HALLOWEEN;
public static final SlimefunItemStack RAINBOW_GLAZED_TERRACOTTA_HALLOWEEN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_GLAZED_TERRACOTTA_HALLOWEEN;
public static final ItemStack COPPER_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COPPER_INGOT;
public static final ItemStack TIN_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TIN_INGOT;
public static final ItemStack SILVER_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SILVER_INGOT;
public static final ItemStack ALUMINUM_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ALUMINUM_INGOT;
public static final ItemStack LEAD_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LEAD_INGOT;
public static final ItemStack ZINC_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ZINC_INGOT;
public static final ItemStack MAGNESIUM_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGNESIUM_INGOT;
public static final ItemStack STEEL_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STEEL_INGOT;
public static final ItemStack BRONZE_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BRONZE_INGOT;
public static final ItemStack DURALUMIN_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DURALUMIN_INGOT;
public static final ItemStack BILLON_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BILLON_INGOT;
public static final ItemStack BRASS_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BRASS_INGOT;
public static final ItemStack ALUMINUM_BRASS_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ALUMINUM_BRASS_INGOT;
public static final ItemStack ALUMINUM_BRONZE_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ALUMINUM_BRONZE_INGOT;
public static final ItemStack CORINTHIAN_BRONZE_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CORINTHIAN_BRONZE_INGOT;
public static final ItemStack SOLDER_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLDER_INGOT;
public static final ItemStack DAMASCUS_STEEL_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DAMASCUS_STEEL_INGOT;
public static final ItemStack HARDENED_METAL_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HARDENED_METAL_INGOT;
public static final ItemStack REINFORCED_ALLOY_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_ALLOY_INGOT;
public static final ItemStack FERROSILICON = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FERROSILICON;
public static final ItemStack GILDED_IRON = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GILDED_IRON;
public static final ItemStack REDSTONE_ALLOY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REDSTONE_ALLOY;
public static final ItemStack NICKEL_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NICKEL_INGOT;
public static final ItemStack COBALT_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COBALT_INGOT;
public static final ItemStack GOLD_4K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_4K;
public static final ItemStack GOLD_6K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_6K;
public static final ItemStack GOLD_8K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_8K;
public static final ItemStack GOLD_10K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_10K;
public static final ItemStack GOLD_12K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_12K;
public static final ItemStack GOLD_14K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_14K;
public static final ItemStack GOLD_16K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_16K;
public static final ItemStack GOLD_18K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_18K;
public static final ItemStack GOLD_20K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_20K;
public static final ItemStack GOLD_22K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_22K;
public static final ItemStack GOLD_24K = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_24K;
public static final ItemStack IRON_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.IRON_DUST;
public static final ItemStack GOLD_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_DUST;
public static final ItemStack TIN_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TIN_DUST;
public static final ItemStack COPPER_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COPPER_DUST;
public static final ItemStack SILVER_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SILVER_DUST;
public static final ItemStack ALUMINUM_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ALUMINUM_DUST;
public static final ItemStack LEAD_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LEAD_DUST;
public static final ItemStack ZINC_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ZINC_DUST;
public static final ItemStack MAGNESIUM_DUST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGNESIUM_DUST;
public static final ItemStack SULFATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SULFATE;
public static final ItemStack SILICON = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SILICON;
public static final ItemStack GOLD_24K_BLOCK = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GOLD_24K_BLOCK;
public static final ItemStack SYNTHETIC_DIAMOND = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SYNTHETIC_DIAMOND;
public static final ItemStack SYNTHETIC_EMERALD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SYNTHETIC_EMERALD;
public static final ItemStack SYNTHETIC_SAPPHIRE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SYNTHETIC_SAPPHIRE;
public static final ItemStack CARBONADO = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBONADO;
public static final ItemStack RAW_CARBONADO = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAW_CARBONADO;
public static final SlimefunItemStack URANIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.URANIUM;
public static final SlimefunItemStack NEPTUNIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NEPTUNIUM;
public static final SlimefunItemStack PLUTONIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PLUTONIUM;
public static final SlimefunItemStack BOOSTED_URANIUM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BOOSTED_URANIUM;
public static final SlimefunItemStack TALISMAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COMMON_TALISMAN;
public static final SlimefunItemStack ENDER_TALISMAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_TALISMAN;
public static final SlimefunItemStack TALISMAN_ANVIL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_ANVIL;
public static final SlimefunItemStack TALISMAN_MINER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_MINER;
public static final SlimefunItemStack TALISMAN_HUNTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_HUNTER;
public static final SlimefunItemStack TALISMAN_LAVA = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_LAVA;
public static final SlimefunItemStack TALISMAN_WATER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_WATER;
public static final SlimefunItemStack TALISMAN_ANGEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_ANGEL;
public static final SlimefunItemStack TALISMAN_FIRE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_FIRE;
public static final SlimefunItemStack TALISMAN_MAGICIAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_MAGICIAN;
public static final SlimefunItemStack TALISMAN_TRAVELLER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_TRAVELLER;
public static final SlimefunItemStack TALISMAN_WARRIOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_WARRIOR;
public static final SlimefunItemStack TALISMAN_KNIGHT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_KNIGHT;
public static final SlimefunItemStack TALISMAN_WHIRLWIND = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_WHIRLWIND;
public static final SlimefunItemStack TALISMAN_WIZARD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TALISMAN_WIZARD;
public static final SlimefunItemStack STAFF_ELEMENTAL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STAFF_ELEMENTAL;
public static final SlimefunItemStack STAFF_WIND = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STAFF_WIND;
public static final SlimefunItemStack STAFF_FIRE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STAFF_FIRE;
public static final SlimefunItemStack STAFF_WATER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STAFF_WATER;
public static final SlimefunItemStack STAFF_STORM = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.STAFF_STORM;
public static final SlimefunItemStack ENHANCED_CRAFTING_TABLE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_CRAFTING_TABLE;
public static final SlimefunItemStack GRIND_STONE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GRIND_STONE;
public static final SlimefunItemStack ARMOR_FORGE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ARMOR_FORGE;
public static final SlimefunItemStack MAKESHIFT_SMELTERY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAKESHIFT_SMELTERY;
public static final SlimefunItemStack SMELTERY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SMELTERY;
public static final SlimefunItemStack ORE_CRUSHER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ORE_CRUSHER;
public static final SlimefunItemStack COMPRESSOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COMPRESSOR;
public static final SlimefunItemStack PRESSURE_CHAMBER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PRESSURE_CHAMBER;
public static final SlimefunItemStack MAGIC_WORKBENCH = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGIC_WORKBENCH;
public static final SlimefunItemStack ORE_WASHER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ORE_WASHER;
public static final SlimefunItemStack TABLE_SAW = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TABLE_SAW;
public static final SlimefunItemStack JUICER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.JUICER;
public static final SlimefunItemStack AUTOMATED_PANNING_MACHINE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTOMATED_PANNING_MACHINE;
public static final SlimefunItemStack INDUSTRIAL_MINER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.INDUSTRIAL_MINER;
public static final SlimefunItemStack ADVANCED_INDUSTRIAL_MINER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ADVANCED_INDUSTRIAL_MINER;
public static final SlimefunItemStack COMPOSTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COMPOSTER;
public static final SlimefunItemStack CRUCIBLE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CRUCIBLE;
public static final SlimefunItemStack OUTPUT_CHEST = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.OUTPUT_CHEST;
public static final SlimefunItemStack IGNITION_CHAMBER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.IGNITION_CHAMBER;
public static final SlimefunItemStack HOLOGRAM_PROJECTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HOLOGRAM_PROJECTOR;
public static final ItemStack SOLAR_PANEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLAR_PANEL;
public static final SlimefunItemStack ENHANCED_FURNACE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE;
public static final SlimefunItemStack ENHANCED_FURNACE_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_2;
public static final SlimefunItemStack ENHANCED_FURNACE_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_3;
public static final SlimefunItemStack ENHANCED_FURNACE_4 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_4;
public static final SlimefunItemStack ENHANCED_FURNACE_5 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_5;
public static final SlimefunItemStack ENHANCED_FURNACE_6 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_6;
public static final SlimefunItemStack ENHANCED_FURNACE_7 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_7;
public static final SlimefunItemStack ENHANCED_FURNACE_8 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_8;
public static final SlimefunItemStack ENHANCED_FURNACE_9 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_9;
public static final SlimefunItemStack ENHANCED_FURNACE_10 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_10;
public static final SlimefunItemStack ENHANCED_FURNACE_11 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENHANCED_FURNACE_11;
public static final SlimefunItemStack REINFORCED_FURNACE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REINFORCED_FURNACE;
public static final SlimefunItemStack CARBONADO_EDGED_FURNACE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBONADO_EDGED_FURNACE;
public static final SlimefunItemStack BLOCK_PLACER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BLOCK_PLACER;
public static final SlimefunItemStack SOULBOUND_SWORD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_SWORD;
public static final SlimefunItemStack SOULBOUND_BOW = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_BOW;
public static final SlimefunItemStack SOULBOUND_PICKAXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_PICKAXE;
public static final SlimefunItemStack SOULBOUND_AXE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_AXE;
public static final SlimefunItemStack SOULBOUND_SHOVEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_SHOVEL;
public static final SlimefunItemStack SOULBOUND_HOE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_HOE;
public static final SlimefunItemStack SOULBOUND_TRIDENT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_TRIDENT;
public static final SlimefunItemStack SOULBOUND_HELMET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_HELMET;
public static final SlimefunItemStack SOULBOUND_CHESTPLATE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_CHESTPLATE;
public static final SlimefunItemStack SOULBOUND_LEGGINGS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_LEGGINGS;
public static final SlimefunItemStack SOULBOUND_BOOTS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_BOOTS;
public static final SlimefunItemStack BLANK_RUNE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BLANK_RUNE;
public static final ItemStack RUNE_AIR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AIR_RUNE;
public static final ItemStack RUNE_WATER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WATER_RUNE;
public static final ItemStack RUNE_FIRE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FIRE_RUNE;
public static final ItemStack RUNE_EARTH = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EARTH_RUNE;
public static final ItemStack RUNE_ENDER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENDER_RUNE;
public static final SlimefunItemStack RUNE_RAINBOW = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.RAINBOW_RUNE;
public static final SlimefunItemStack RUNE_LIGHTNING = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LIGHTNING_RUNE;
public static final SlimefunItemStack RUNE_SOULBOUND = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_RUNE;
public static final SlimefunItemStack SOLAR_GENERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLAR_GENERATOR;
public static final SlimefunItemStack SOLAR_GENERATOR_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLAR_GENERATOR_2;
public static final SlimefunItemStack SOLAR_GENERATOR_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLAR_GENERATOR_3;
public static final SlimefunItemStack SOLAR_GENERATOR_4 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOLAR_GENERATOR_4;
public static final ItemStack COAL_GENERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COAL_GENERATOR;
public static final ItemStack COAL_GENERATOR_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COAL_GENERATOR_2;
public static final ItemStack LAVA_GENERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LAVA_GENERATOR;
public static final ItemStack LAVA_GENERATOR_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LAVA_GENERATOR_2;
public static final ItemStack ELECTRIC_FURNACE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_FURNACE;
public static final ItemStack ELECTRIC_FURNACE_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_FURNACE_2;
public static final ItemStack ELECTRIC_FURNACE_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_FURNACE_3;
public static final SlimefunItemStack ELECTRIC_ORE_GRINDER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_ORE_GRINDER;
public static final SlimefunItemStack ELECTRIC_ORE_GRINDER_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_ORE_GRINDER_2;
public static final SlimefunItemStack ELECTRIC_INGOT_PULVERIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_INGOT_PULVERIZER;
public static final SlimefunItemStack AUTO_DRIER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTO_DRIER;
public static final SlimefunItemStack AUTO_ENCHANTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTO_ENCHANTER;
public static final SlimefunItemStack AUTO_DISENCHANTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTO_DISENCHANTER;
public static final SlimefunItemStack AUTO_ANVIL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTO_ANVIL;
public static final SlimefunItemStack AUTO_ANVIL_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTO_ANVIL_2;
public static final SlimefunItemStack BIO_REACTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BIO_REACTOR;
public static final SlimefunItemStack MULTIMETER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MULTIMETER;
public static final ItemStack SMALL_CAPACITOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SMALL_CAPACITOR;
public static final ItemStack MEDIUM_CAPACITOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MEDIUM_CAPACITOR;
public static final ItemStack BIG_CAPACITOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BIG_CAPACITOR;
public static final ItemStack LARGE_CAPACITOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.LARGE_CAPACITOR;
public static final ItemStack CARBONADO_EDGED_CAPACITOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBONADO_EDGED_CAPACITOR;
public static final ItemStack PROGRAMMABLE_ANDROID = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID;
public static final ItemStack PROGRAMMABLE_ANDROID_FARMER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_FARMER;
public static final ItemStack PROGRAMMABLE_ANDROID_MINER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_MINER;
public static final ItemStack PROGRAMMABLE_ANDROID_WOODCUTTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER;
public static final ItemStack PROGRAMMABLE_ANDROID_BUTCHER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER;
public static final ItemStack PROGRAMMABLE_ANDROID_FISHERMAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_2;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_2_FISHERMAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_2_FARMER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_2_BUTCHER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_3;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_3_FISHERMAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN;
public static final SlimefunItemStack PROGRAMMABLE_ANDROID_3_BUTCHER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER;
public static final ItemStack GPS_TRANSMITTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_TRANSMITTER;
public static final ItemStack GPS_TRANSMITTER_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_TRANSMITTER_2;
public static final ItemStack GPS_TRANSMITTER_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_TRANSMITTER_3;
public static final ItemStack GPS_TRANSMITTER_4 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_TRANSMITTER_4;
public static final SlimefunItemStack GPS_MARKER_TOOL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_MARKER_TOOL;
public static final SlimefunItemStack GPS_CONTROL_PANEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_CONTROL_PANEL;
public static final SlimefunItemStack GPS_EMERGENCY_TRANSMITTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_EMERGENCY_TRANSMITTER;
public static final SlimefunItemStack ANDROID_INTERFACE_FUEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ANDROID_INTERFACE_FUEL;
public static final SlimefunItemStack ANDROID_INTERFACE_ITEMS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ANDROID_INTERFACE_ITEMS;
public static final SlimefunItemStack GPS_GEO_SCANNER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_GEO_SCANNER;
public static final SlimefunItemStack PORTABLE_GEO_SCANNER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PORTABLE_GEO_SCANNER;
public static final SlimefunItemStack GEO_MINER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GEO_MINER;
public static final SlimefunItemStack OIL_PUMP = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.OIL_PUMP;
public static final SlimefunItemStack BUCKET_OF_OIL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.OIL_BUCKET;
public static final SlimefunItemStack BUCKET_OF_FUEL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FUEL_BUCKET;
public static final SlimefunItemStack REFINERY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REFINERY;
public static final SlimefunItemStack COMBUSTION_REACTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COMBUSTION_REACTOR;
public static final SlimefunItemStack ANDROID_MEMORY_CORE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ANDROID_MEMORY_CORE;
public static final SlimefunItemStack GPS_TELEPORTER_PYLON = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_TELEPORTER_PYLON;
public static final SlimefunItemStack GPS_TELEPORTATION_MATRIX = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_TELEPORTATION_MATRIX;
public static final SlimefunItemStack GPS_ACTIVATION_DEVICE_SHARED = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED;
public static final SlimefunItemStack GPS_ACTIVATION_DEVICE_PERSONAL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL;
public static final SlimefunItemStack ELEVATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELEVATOR_PLATE;
public static final SlimefunItemStack INFUSED_HOPPER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.INFUSED_HOPPER;
public static final ItemStack PLASTIC_SHEET = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.PLASTIC_SHEET;
public static final SlimefunItemStack HEATED_PRESSURE_CHAMBER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HEATED_PRESSURE_CHAMBER;
public static final SlimefunItemStack HEATED_PRESSURE_CHAMBER_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.HEATED_PRESSURE_CHAMBER_2;
public static final SlimefunItemStack ELECTRIC_SMELTERY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_SMELTERY;
public static final SlimefunItemStack ELECTRIC_SMELTERY_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_SMELTERY_2;
public static final SlimefunItemStack ELECTRIC_PRESS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_PRESS;
public static final SlimefunItemStack ELECTRIC_PRESS_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_PRESS_2;
public static final SlimefunItemStack ELECTRIFIED_CRUCIBLE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIFIED_CRUCIBLE;
public static final SlimefunItemStack ELECTRIFIED_CRUCIBLE_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIFIED_CRUCIBLE_2;
public static final SlimefunItemStack ELECTRIFIED_CRUCIBLE_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIFIED_CRUCIBLE_3;
public static final SlimefunItemStack CARBON_PRESS = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBON_PRESS;
public static final SlimefunItemStack CARBON_PRESS_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBON_PRESS_2;
public static final SlimefunItemStack CARBON_PRESS_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARBON_PRESS_3;
public static final ItemStack BLISTERING_INGOT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BLISTERING_INGOT;
public static final ItemStack BLISTERING_INGOT_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BLISTERING_INGOT_2;
public static final ItemStack BLISTERING_INGOT_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BLISTERING_INGOT_3;
public static final SlimefunItemStack ENERGY_REGULATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENERGY_REGULATOR;
public static final SlimefunItemStack DEBUG_FISH = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.DEBUG_FISH;
public static final SlimefunItemStack NETHER_ICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NETHER_ICE;
public static final SlimefunItemStack ENRICHED_NETHER_ICE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ENRICHED_NETHER_ICE;
public static final SlimefunItemStack NETHER_ICE_COOLANT_CELL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NETHER_ICE_COOLANT_CELL;
public static final ItemStack CARGO_MANAGER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARGO_MANAGER;
public static final ItemStack CARGO_NODE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARGO_CONNECTOR_NODE;
public static final ItemStack CARGO_INPUT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARGO_INPUT_NODE;
public static final ItemStack CARGO_OUTPUT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARGO_OUTPUT_NODE;
public static final ItemStack CARGO_OUTPUT_ADVANCED = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARGO_OUTPUT_NODE_2;
public static final SlimefunItemStack AUTO_BREEDER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTO_BREEDER;
public static final SlimefunItemStack ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ORGANIC_FOOD;
public static final SlimefunItemStack WHEAT_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WHEAT_ORGANIC_FOOD;
public static final SlimefunItemStack CARROT_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARROT_ORGANIC_FOOD;
public static final SlimefunItemStack POTATO_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.POTATO_ORGANIC_FOOD;
public static final SlimefunItemStack SEEDS_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SEEDS_ORGANIC_FOOD;
public static final SlimefunItemStack BEETROOT_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BEETROOT_ORGANIC_FOOD;
public static final SlimefunItemStack MELON_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MELON_ORGANIC_FOOD;
public static final SlimefunItemStack APPLE_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.APPLE_ORGANIC_FOOD;
public static final SlimefunItemStack SWEET_BERRIES_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD;
public static final SlimefunItemStack KELP_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.KELP_ORGANIC_FOOD;
public static final SlimefunItemStack COCOA_ORGANIC_FOOD = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COCOA_ORGANIC_FOOD;
public static final SlimefunItemStack FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FERTILIZER;
public static final SlimefunItemStack WHEAT_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WHEAT_FERTILIZER;
public static final SlimefunItemStack CARROT_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CARROT_FERTILIZER;
public static final SlimefunItemStack POTATO_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.POTATO_FERTILIZER;
public static final SlimefunItemStack SEEDS_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SEEDS_FERTILIZER;
public static final SlimefunItemStack BEETROOT_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.BEETROOT_FERTILIZER;
public static final SlimefunItemStack MELON_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MELON_FERTILIZER;
public static final SlimefunItemStack APPLE_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.APPLE_FERTILIZER;
public static final SlimefunItemStack SWEET_BERRIES_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SWEET_BERRIES_FERTILIZER;
public static final SlimefunItemStack KELP_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.KELP_FERTILIZER;
public static final SlimefunItemStack COCOA_FERTILIZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.COCOA_FERTILIZER;
public static final SlimefunItemStack ANIMAL_GROWTH_ACCELERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ANIMAL_GROWTH_ACCELERATOR;
public static final SlimefunItemStack CROP_GROWTH_ACCELERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CROP_GROWTH_ACCELERATOR;
public static final SlimefunItemStack CROP_GROWTH_ACCELERATOR_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CROP_GROWTH_ACCELERATOR_2;
public static final SlimefunItemStack TREE_GROWTH_ACCELERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TREE_GROWTH_ACCELERATOR;
public static final SlimefunItemStack FOOD_FABRICATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FOOD_FABRICATOR;
public static final SlimefunItemStack FOOD_FABRICATOR_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FOOD_FABRICATOR_2;
public static final SlimefunItemStack FOOD_COMPOSTER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FOOD_COMPOSTER;
public static final SlimefunItemStack FOOD_COMPOSTER_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FOOD_COMPOSTER_2;
public static final SlimefunItemStack XP_COLLECTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.EXP_COLLECTOR;
public static final SlimefunItemStack REACTOR_COOLANT_CELL = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REACTOR_COOLANT_CELL;
public static final SlimefunItemStack NUCLEAR_REACTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NUCLEAR_REACTOR;
public static final SlimefunItemStack NETHERSTAR_REACTOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.NETHER_STAR_REACTOR;
public static final SlimefunItemStack REACTOR_ACCESS_PORT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.REACTOR_ACCESS_PORT;
public static final SlimefunItemStack FREEZER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FREEZER;
public static final SlimefunItemStack FREEZER_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FREEZER_2;
public static final SlimefunItemStack ELECTRIC_GOLD_PAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_GOLD_PAN;
public static final SlimefunItemStack ELECTRIC_GOLD_PAN_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_GOLD_PAN_2;
public static final SlimefunItemStack ELECTRIC_GOLD_PAN_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_GOLD_PAN_3;
public static final SlimefunItemStack ELECTRIC_DUST_WASHER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_DUST_WASHER;
public static final SlimefunItemStack ELECTRIC_DUST_WASHER_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_DUST_WASHER_2;
public static final SlimefunItemStack ELECTRIC_DUST_WASHER_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_DUST_WASHER_3;
public static final SlimefunItemStack ELECTRIC_INGOT_FACTORY = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_INGOT_FACTORY;
public static final SlimefunItemStack ELECTRIC_INGOT_FACTORY_2 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_INGOT_FACTORY_2;
public static final SlimefunItemStack ELECTRIC_INGOT_FACTORY_3 = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELECTRIC_INGOT_FACTORY_3;
public static final SlimefunItemStack AUTOMATED_CRAFTING_CHAMBER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.AUTOMATED_CRAFTING_CHAMBER;
public static final SlimefunItemStack FLUID_PUMP = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.FLUID_PUMP;
public static final SlimefunItemStack CHARGING_BENCH = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.CHARGING_BENCH;
public static final SlimefunItemStack WITHER_ASSEMBLER = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.WITHER_ASSEMBLER;
public static final SlimefunItemStack TRASH_CAN = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.TRASH_CAN;
public static final SlimefunItemStack ELYTRA_SCALE = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.ELYTRA_SCALE;
public static final SlimefunItemStack INFUSED_ELYTRA = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.INFUSED_ELYTRA;
public static final SlimefunItemStack SOULBOUND_ELYTRA = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.SOULBOUND_ELYTRA;
public static final SlimefunItemStack MAGNESIUM_SALT = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGNESIUM_SALT;
public static final SlimefunItemStack MAGNESIUM_GENERATOR = io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems.MAGNESIUM_GENERATOR;
}

View File

@ -71,7 +71,6 @@ class TestPluginClass {
@Test
@DisplayName("Test some Listeners being not-null")
void testListenersNotNull() {
Assertions.assertNotNull(SlimefunPlugin.getAncientAltarListener());
Assertions.assertNotNull(SlimefunPlugin.getGrapplingHookListener());
Assertions.assertNotNull(SlimefunPlugin.getBackpackListener());
Assertions.assertNotNull(SlimefunPlugin.getBowListener());

View File

@ -21,7 +21,7 @@ import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.entity.ItemEntityMock;
import be.seeseemelk.mockbukkit.inventory.ChestInventoryMock;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AncientAltarListener;
import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientPedestal;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.ItemPickupListener;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.CSCoreLibPlugin.cscorelib2.item.CustomItem;
@ -83,7 +83,7 @@ class TestItemPickupListener {
ItemStack stack;
if (flag) {
stack = new CustomItem(Material.DIAMOND, AncientAltarListener.ITEM_PREFIX + System.nanoTime());
stack = new CustomItem(Material.DIAMOND, AncientPedestal.ITEM_PREFIX + System.nanoTime());
}
else {
stack = new CustomItem(Material.DIAMOND, "&5Just a normal named diamond");
@ -112,7 +112,7 @@ class TestItemPickupListener {
ItemStack stack;
if (flag) {
stack = new CustomItem(Material.DIAMOND, AncientAltarListener.ITEM_PREFIX + System.nanoTime());
stack = new CustomItem(Material.DIAMOND, AncientPedestal.ITEM_PREFIX + System.nanoTime());
}
else {
stack = new CustomItem(Material.DIAMOND, "&5Just a normal named diamond");