mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-22 04:35:53 +00:00
186 lines
6.1 KiB
Java
186 lines
6.1 KiB
Java
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
|
||
|
import org.bukkit.Material;
|
||
|
import org.bukkit.block.Block;
|
||
|
import org.bukkit.entity.Player;
|
||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||
|
import org.bukkit.inventory.ItemStack;
|
||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||
|
import org.bukkit.material.MaterialData;
|
||
|
|
||
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||
|
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
||
|
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.Setup.Messages;
|
||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||
|
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||
|
|
||
|
public abstract class NetherDrill extends AContainer {
|
||
|
|
||
|
private static final int[] border = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44, 9, 10, 11, 12, 18, 21, 27, 28, 29, 30, 19, 20 };
|
||
|
private static final int[] border_out = { 14, 15, 16, 17, 23, 26, 32, 33, 34, 35 };
|
||
|
|
||
|
public NetherDrill(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
||
|
super(category, item, name, recipeType, recipe);
|
||
|
|
||
|
new BlockMenuPreset(name, getInventoryTitle()) {
|
||
|
|
||
|
@Override
|
||
|
public void init() {
|
||
|
this.constructMenu(this);
|
||
|
}
|
||
|
|
||
|
@SuppressWarnings("deprecation")
|
||
|
private void constructMenu(BlockMenuPreset preset) {
|
||
|
for (int i: border) {
|
||
|
preset.addItem(i, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 7), " "),
|
||
|
new MenuClickHandler() {
|
||
|
|
||
|
@Override
|
||
|
public boolean onClick(Player arg0, int arg1, ItemStack arg2, ClickAction arg3) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
}
|
||
|
for (int i: border_out) {
|
||
|
preset.addItem(i, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 1), " "),
|
||
|
new MenuClickHandler() {
|
||
|
|
||
|
@Override
|
||
|
public boolean onClick(Player arg0, int arg1, ItemStack arg2, ClickAction arg3) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
}
|
||
|
|
||
|
preset.addItem(22, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 15), " "),
|
||
|
new MenuClickHandler() {
|
||
|
|
||
|
@Override
|
||
|
public boolean onClick(Player arg0, int arg1, ItemStack arg2, ClickAction arg3) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
for (int i: getOutputSlots()) {
|
||
|
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
|
||
|
|
||
|
@Override
|
||
|
public boolean onClick(Player p, int slot, ItemStack cursor, ClickAction action) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean onClick(InventoryClickEvent e, Player p, int slot, ItemStack cursor, ClickAction action) {
|
||
|
return cursor == null || cursor.getType() == null || cursor.getType() == Material.AIR;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void newInstance(BlockMenu menu, Block b) {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean canOpen(Block b, Player p) {
|
||
|
if (!(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true))) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (!OreGenSystem.wasResourceGenerated(OreGenSystem.getResource("Nether Ice"), b.getChunk())) {
|
||
|
Messages.local.sendTranslation(p, "gps.geo.scan-required", true);
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
||
|
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
||
|
else return getOutputSlots();
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int[] getInputSlots() {
|
||
|
return new int[0];
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getMachineIdentifier() {
|
||
|
return "NETHER_DRILL";
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getInventoryTitle() {
|
||
|
return "&4Nether Drill";
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public ItemStack getProgressBar() {
|
||
|
return new ItemStack(Material.DIAMOND_PICKAXE);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void registerDefaultRecipes() {}
|
||
|
|
||
|
@SuppressWarnings("deprecation")
|
||
|
protected void tick(Block b) {
|
||
|
if (isProcessing(b)) {
|
||
|
int timeleft = progress.get(b);
|
||
|
if (timeleft > 0) {
|
||
|
ItemStack item = getProgressBar().clone();
|
||
|
item.setDurability(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
|
||
|
ItemMeta im = item.getItemMeta();
|
||
|
im.setDisplayName(" ");
|
||
|
List<String> lore = new ArrayList<String>();
|
||
|
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.getCharge(b) < getEnergyConsumption()) return;
|
||
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
||
|
|
||
|
progress.put(b, timeleft - 1);
|
||
|
}
|
||
|
else {
|
||
|
BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 15), " "));
|
||
|
pushItems(b, processing.get(b).getOutput());
|
||
|
|
||
|
progress.remove(b);
|
||
|
processing.remove(b);
|
||
|
}
|
||
|
}
|
||
|
else if (OreGenSystem.getSupplies(OreGenSystem.getResource("Nether Ice"), b.getChunk(), false) > 0) {
|
||
|
MachineRecipe r = new MachineRecipe(24, new ItemStack[0], new ItemStack[] {SlimefunItems.NETHER_ICE});
|
||
|
if (!fits(b, r.getOutput())) return;
|
||
|
processing.put(b, r);
|
||
|
progress.put(b, r.getTicks());
|
||
|
OreGenSystem.setSupplies(OreGenSystem.getResource("Nether Ice"), b.getChunk(), OreGenSystem.getSupplies(OreGenSystem.getResource("Nether Ice"), b.getChunk(), false) - 1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|