2019-08-30 09:28:27 +00:00
|
|
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
|
2019-08-27 19:46:50 +00:00
|
|
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
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.block.Dispenser;
|
|
|
|
import org.bukkit.inventory.Inventory;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
2019-08-29 08:26:36 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
2019-08-27 19:46:50 +00:00
|
|
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
|
|
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
|
|
|
|
import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
|
|
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
|
|
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
|
|
|
|
|
|
|
public class OreWasher extends SlimefunMachine {
|
|
|
|
|
|
|
|
public static ItemStack[] items;
|
|
|
|
|
|
|
|
public OreWasher() {
|
|
|
|
super(
|
|
|
|
Categories.MACHINES_1,
|
|
|
|
SlimefunItems.ORE_WASHER,
|
|
|
|
"ORE_WASHER",
|
|
|
|
new ItemStack[] {null, new ItemStack(Material.DISPENSER), null, null, new ItemStack(Material.OAK_FENCE), null, null, new ItemStack(Material.CAULDRON), null},
|
|
|
|
new ItemStack[] {SlimefunItems.SIFTED_ORE, SlimefunItems.IRON_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.GOLD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.COPPER_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.TIN_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ZINC_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.LEAD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.SILVER_DUST},
|
|
|
|
Material.OAK_FENCE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void register() {
|
|
|
|
register(true, onInteract());
|
|
|
|
}
|
|
|
|
|
|
|
|
private MultiBlockInteractionHandler onInteract() {
|
|
|
|
return (p, mb, b) -> {
|
|
|
|
if (mb.isMultiBlock(this)) {
|
2019-08-30 09:28:27 +00:00
|
|
|
if (!isDisabled() && CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, getItem(), true)) {
|
2019-08-29 20:04:31 +00:00
|
|
|
Block dispBlock = b.getRelative(BlockFace.UP);
|
|
|
|
Dispenser disp = (Dispenser) dispBlock.getState();
|
|
|
|
Inventory inv = disp.getInventory();
|
|
|
|
|
|
|
|
for (ItemStack current: inv.getContents()) {
|
|
|
|
if (current != null) {
|
|
|
|
if (SlimefunManager.isItemSimiliar(current, SlimefunItems.SIFTED_ORE, true)) {
|
|
|
|
ItemStack adding = items[new Random().nextInt(items.length)];
|
|
|
|
Inventory outputInv = null;
|
|
|
|
|
|
|
|
if (!SlimefunStartup.instance.getSettings().ORE_WASHER_LEGACY) {
|
|
|
|
// This is a fancy way of checking if there is empty space in the inv; by checking if an unobtainable item could fit in it.
|
|
|
|
// However, due to the way the method findValidOutputInv() functions, the dummyAdding will never actually be added to the real inventory,
|
|
|
|
// so it really doesn't matter what item the ItemStack is made by. SlimefunItems.DEBUG_FISH however, signals that it's
|
|
|
|
// not supposed to be given to the player.
|
|
|
|
ItemStack dummyAdding = SlimefunItems.DEBUG_FISH;
|
|
|
|
outputInv = SlimefunMachine.findValidOutputInv(dummyAdding, dispBlock, inv);
|
2019-08-27 19:46:50 +00:00
|
|
|
}
|
2019-08-29 20:04:31 +00:00
|
|
|
else outputInv = SlimefunMachine.findValidOutputInv(adding, dispBlock, inv);
|
|
|
|
|
|
|
|
if (outputInv != null) {
|
|
|
|
ItemStack removing = current.clone();
|
|
|
|
removing.setAmount(1);
|
|
|
|
inv.removeItem(removing);
|
|
|
|
outputInv.addItem(adding);
|
|
|
|
p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1);
|
|
|
|
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER);
|
|
|
|
if (InvUtils.fits(outputInv, SlimefunItems.STONE_CHUNK)) outputInv.addItem(SlimefunItems.STONE_CHUNK);
|
|
|
|
}
|
|
|
|
else Messages.local.sendTranslation(p, "machines.full-inventory", true);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (SlimefunManager.isItemSimiliar(current, new ItemStack(Material.SAND, 4), false)) {
|
|
|
|
ItemStack adding = SlimefunItems.SALT;
|
|
|
|
Inventory outputInv = SlimefunMachine.findValidOutputInv(adding, dispBlock, inv);
|
|
|
|
|
|
|
|
if (outputInv != null) {
|
|
|
|
ItemStack removing = current.clone();
|
|
|
|
removing.setAmount(4);
|
|
|
|
inv.removeItem(removing);
|
|
|
|
outputInv.addItem(adding);
|
|
|
|
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER);
|
|
|
|
p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1);
|
2019-08-27 19:46:50 +00:00
|
|
|
}
|
2019-08-29 20:04:31 +00:00
|
|
|
else Messages.local.sendTranslation(p, "machines.full-inventory", true);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else if (SlimefunManager.isItemSimiliar(current, SlimefunItems.PULVERIZED_ORE, true)) {
|
|
|
|
ItemStack adding = SlimefunItems.PURE_ORE_CLUSTER;
|
|
|
|
Inventory outputInv = SlimefunMachine.findValidOutputInv(adding, dispBlock, inv);
|
|
|
|
|
|
|
|
if (outputInv != null) {
|
|
|
|
ItemStack removing = current.clone();
|
|
|
|
removing.setAmount(1);
|
|
|
|
inv.removeItem(removing);
|
|
|
|
outputInv.addItem(adding);
|
|
|
|
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER);
|
|
|
|
p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1);
|
2019-08-27 19:46:50 +00:00
|
|
|
}
|
2019-08-29 20:04:31 +00:00
|
|
|
else Messages.local.sendTranslation(p, "machines.full-inventory", true);
|
|
|
|
|
|
|
|
return true;
|
2019-08-27 19:46:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-08-29 20:04:31 +00:00
|
|
|
Messages.local.sendTranslation(p, "machines.unknown-material", true);
|
2019-08-27 19:46:50 +00:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else return false;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|