1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-22 04:35:53 +00:00
Slimefun4/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/OreWasher.java

120 lines
4.7 KiB
Java
Raw Normal View History

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;
2019-08-30 10:47:22 +00:00
import org.bukkit.entity.Player;
2019-08-27 19:46:50 +00:00
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
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.Setup.Messages;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
2019-08-30 10:47:22 +00:00
public class OreWasher extends MultiBlockMachine {
2019-08-27 19:46:50 +00:00
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},
2019-08-30 10:47:22 +00:00
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
},
2019-08-27 19:46:50 +00:00
Material.OAK_FENCE
);
}
@Override
2019-08-30 10:47:22 +00:00
public void onInteract(Player p, Block b) {
Block dispBlock = b.getRelative(BlockFace.UP);
Dispenser disp = (Dispenser) dispBlock.getState();
Inventory inv = disp.getInventory();
2019-08-29 20:04:31 +00:00
2019-08-30 10:47:22 +00:00
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;
2019-08-29 20:04:31 +00:00
2019-08-30 21:21:34 +00:00
if (!SlimefunStartup.instance.getSettings().legacyOreWasher) {
2019-08-30 10:47:22 +00:00
// 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 = findOutputInventory(dummyAdding, dispBlock, inv);
}
else outputInv = findOutputInventory(adding, dispBlock, inv);
2019-08-29 20:04:31 +00:00
2019-08-30 10:47:22 +00:00
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;
}
else if (SlimefunManager.isItemSimiliar(current, new ItemStack(Material.SAND, 4), false)) {
ItemStack adding = SlimefunItems.SALT;
Inventory outputInv = findOutputInventory(adding, dispBlock, inv);
2019-08-29 20:04:31 +00:00
2019-08-30 10:47:22 +00:00
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);
}
else Messages.local.sendTranslation(p, "machines.full-inventory", true);
2019-08-29 20:04:31 +00:00
2019-08-30 10:47:22 +00:00
return;
}
else if (SlimefunManager.isItemSimiliar(current, SlimefunItems.PULVERIZED_ORE, true)) {
ItemStack adding = SlimefunItems.PURE_ORE_CLUSTER;
Inventory outputInv = findOutputInventory(adding, dispBlock, inv);
2019-08-29 20:04:31 +00:00
2019-08-30 10:47:22 +00:00
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-30 10:47:22 +00:00
else Messages.local.sendTranslation(p, "machines.full-inventory", true);
return;
2019-08-27 19:46:50 +00:00
}
}
2019-08-30 10:47:22 +00:00
}
Messages.local.sendTranslation(p, "machines.unknown-material", true);
2019-08-27 19:46:50 +00:00
}
}