mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-21 20:25:54 +00:00
124 lines
4.6 KiB
Java
124 lines
4.6 KiB
Java
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
import org.bukkit.Material;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.Damageable;
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
|
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
|
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.OreWasher;
|
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
|
|
|
public abstract class ElectricDustWasher extends AContainer {
|
|
|
|
public ElectricDustWasher(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
|
super(category, item, name, recipeType, recipe);
|
|
}
|
|
|
|
@Override
|
|
public String getInventoryTitle() {
|
|
return "&bElectric Dust Washer";
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getProgressBar() {
|
|
return new ItemStack(Material.GOLDEN_SHOVEL);
|
|
}
|
|
|
|
@Override
|
|
public void registerDefaultRecipes() {}
|
|
|
|
public abstract int getSpeed();
|
|
|
|
@Override
|
|
protected void tick(Block b) {
|
|
if (isProcessing(b)) {
|
|
int timeleft = progress.get(b);
|
|
if (timeleft > 0 && getSpeed() < 10) {
|
|
ItemStack item = getProgressBar().clone();
|
|
ItemMeta im = item.getItemMeta();
|
|
((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
|
|
im.setDisplayName(" ");
|
|
List<String> lore = new ArrayList<>();
|
|
lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
|
|
lore.add("");
|
|
lore.add(MachineHelper.getTimeLeft(timeleft / 2));
|
|
im.setLore(lore);
|
|
item.setItemMeta(im);
|
|
|
|
BlockStorage.getInventory(b).replaceExistingItem(22, item);
|
|
|
|
if (ChargableBlock.isChargable(b)) {
|
|
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
|
progress.put(b, timeleft - 1);
|
|
}
|
|
else progress.put(b, timeleft - 1);
|
|
}
|
|
else if (ChargableBlock.isChargable(b)) {
|
|
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
|
|
|
BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
|
pushItems(b, processing.get(b).getOutput());
|
|
|
|
progress.remove(b);
|
|
processing.remove(b);
|
|
}
|
|
}
|
|
else {
|
|
for (int slot: getInputSlots()) {
|
|
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) {
|
|
if (!SlimefunStartup.instance.getSettings().DUST_WASHER_LEGACY) {
|
|
boolean empty_slot = false;
|
|
for (int output_slot: getOutputSlots()) {
|
|
if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) {
|
|
empty_slot = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!empty_slot) return;
|
|
}
|
|
|
|
ItemStack adding = OreWasher.items[new Random().nextInt(OreWasher.items.length)];
|
|
MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding});
|
|
if (SlimefunStartup.instance.getSettings().DUST_WASHER_LEGACY && !fits(b, r.getOutput())) return;
|
|
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
|
processing.put(b, r);
|
|
progress.put(b, r.getTicks());
|
|
break;
|
|
}
|
|
else if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.PULVERIZED_ORE, true)) {
|
|
MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {SlimefunItems.PURE_ORE_CLUSTER});
|
|
if (!fits(b, r.getOutput())) return;
|
|
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
|
processing.put(b, r);
|
|
progress.put(b, r.getTicks());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getMachineIdentifier() {
|
|
return "ELECTRIC_DUST_WASHER";
|
|
}
|
|
|
|
}
|