mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Added GEO-Miner
This commit is contained in:
parent
dcee66839f
commit
f4e2c97327
@ -34,9 +34,9 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
|
||||
|
||||
protected List<MachineRecipe> recipes = new ArrayList<>();
|
||||
|
||||
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};
|
||||
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
|
||||
private static final int[] border_out = {14, 15, 16, 17, 23, 26, 32, 33, 34, 35};
|
||||
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};
|
||||
private static final int[] BORDER_IN = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
|
||||
private static final int[] BORDER_OUT = {14, 15, 16, 17, 23, 26, 32, 33, 34, 35};
|
||||
|
||||
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, id, recipeType, recipe);
|
||||
@ -75,15 +75,15 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
|
||||
}
|
||||
|
||||
protected void constructMenu(BlockMenuPreset preset) {
|
||||
for (int i : border) {
|
||||
for (int i : BORDER) {
|
||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||
}
|
||||
|
||||
for (int i : border_in) {
|
||||
for (int i : BORDER_IN) {
|
||||
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||
}
|
||||
|
||||
for (int i : border_out) {
|
||||
for (int i : BORDER_OUT) {
|
||||
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
@ -89,6 +90,7 @@ public final class MachineHelper {
|
||||
public static void updateProgressbar(BlockMenu menu, int slot, int timeleft, int time, ItemStack indicator) {
|
||||
ItemStack item = indicator.clone();
|
||||
ItemMeta im = item.getItemMeta();
|
||||
im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||
((Damageable) im).setDamage(getDurability(item, timeleft, time));
|
||||
im.setDisplayName(" ");
|
||||
List<String> lore = new ArrayList<>();
|
||||
|
@ -14,15 +14,15 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
||||
import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
|
||||
import me.mrCookieSlime.Slimefun.holograms.SimpleHologram;
|
||||
|
||||
public class CargoManagerBlock extends SlimefunItem {
|
||||
|
||||
public CargoManagerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, id, recipeType, recipe);
|
||||
|
||||
SlimefunItem.registerBlockHandler("CARGO_MANAGER", (p, b, tool, reason) -> {
|
||||
CargoHologram.remove(b);
|
||||
registerBlockHandler(getID(), (p, b, tool, reason) -> {
|
||||
SimpleHologram.remove(b);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,197 @@
|
||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Chunk;
|
||||
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 me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
|
||||
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
||||
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.interfaces.InventoryBlock;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
||||
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.holograms.SimpleHologram;
|
||||
|
||||
public abstract class GEOMiner extends AContainer implements InventoryBlock, RecipeDisplayItem {
|
||||
|
||||
private static final int[] BORDER = {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 53};
|
||||
private static final int[] BORDER_OUT = {19, 20, 21, 22, 23, 24, 25, 28, 34, 37, 43, 46, 47, 48, 49, 50, 51, 52};
|
||||
private static final int[] OUTPUT_SLOTS = {29, 30, 31, 32, 33, 38, 39, 40, 41, 42};
|
||||
|
||||
public abstract int getProcessingTime();
|
||||
|
||||
public GEOMiner(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, name, recipeType, recipe);
|
||||
|
||||
registerBlockHandler(getID(), new SlimefunBlockHandler() {
|
||||
|
||||
@Override
|
||||
public void onPlace(Player p, Block b, SlimefunItem item) {
|
||||
// Spawn the hologram
|
||||
SimpleHologram.update(b, "&7Waiting...");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
|
||||
SimpleHologram.remove(b);
|
||||
|
||||
BlockMenu inv = BlockStorage.getInventory(b);
|
||||
if (inv != null) {
|
||||
for (int slot : getInputSlots()) {
|
||||
if (inv.getItemInSlot(slot) != null) {
|
||||
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
||||
inv.replaceExistingItem(slot, null);
|
||||
}
|
||||
}
|
||||
|
||||
for (int slot : getOutputSlots()) {
|
||||
if (inv.getItemInSlot(slot) != null) {
|
||||
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
||||
inv.replaceExistingItem(slot, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
progress.remove(b);
|
||||
processing.remove(b);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInventoryTitle() {
|
||||
return "&6GEO-Miner";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMachineIdentifier() {
|
||||
return "GEO_MINER";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getProgressBar() {
|
||||
return new ItemStack(Material.DIAMOND_PICKAXE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getInputSlots() {
|
||||
return new int[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getOutputSlots() {
|
||||
return OUTPUT_SLOTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> getDisplayRecipes() {
|
||||
List<ItemStack> displayRecipes = new LinkedList<>();
|
||||
for (OreGenResource resource: OreGenSystem.listResources()) {
|
||||
if (!resource.isLiquid()) {
|
||||
displayRecipes.add(resource.getIcon().clone());
|
||||
}
|
||||
}
|
||||
|
||||
if (displayRecipes.size() % 2 != 0) displayRecipes.add(null);
|
||||
return displayRecipes;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void constructMenu(BlockMenuPreset preset) {
|
||||
for (int i : BORDER) {
|
||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||
}
|
||||
|
||||
for (int i : BORDER_OUT) {
|
||||
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||
}
|
||||
|
||||
preset.addItem(4, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> 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
|
||||
protected void tick(Block b) {
|
||||
if (isProcessing(b)) {
|
||||
int timeleft = progress.get(b);
|
||||
if (timeleft > 0) {
|
||||
MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 4, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||
|
||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
||||
|
||||
progress.put(b, timeleft - 1);
|
||||
}
|
||||
else {
|
||||
BlockStorage.getInventory(b).replaceExistingItem(4, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
pushItems(b, processing.get(b).getOutput());
|
||||
|
||||
progress.remove(b);
|
||||
processing.remove(b);
|
||||
}
|
||||
}
|
||||
else if (!BlockStorage.hasChunkInfo(b.getChunk())) {
|
||||
SimpleHologram.update(b, "&4GEO-Scan required!");
|
||||
}
|
||||
else {
|
||||
Chunk chunk = b.getChunk();
|
||||
|
||||
for (OreGenResource resource: OreGenSystem.listResources()) {
|
||||
if (!resource.isLiquid()) {
|
||||
if (!OreGenSystem.wasResourceGenerated(resource, chunk)) {
|
||||
SimpleHologram.update(b, "&4GEO-Scan required!");
|
||||
break;
|
||||
}
|
||||
else {
|
||||
int supplies = OreGenSystem.getSupplies(resource, chunk, false);
|
||||
if (supplies > 0) {
|
||||
MachineRecipe r = new MachineRecipe(getProcessingTime() / getSpeed(), new ItemStack[0], new ItemStack[] {resource.getIcon().clone()});
|
||||
if (!fits(b, r.getOutput())) return;
|
||||
|
||||
processing.put(b, r);
|
||||
progress.put(b, r.getTicks());
|
||||
OreGenSystem.setSupplies(resource, b.getChunk(), supplies - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -31,7 +31,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
|
||||
import me.mrCookieSlime.Slimefun.api.network.Network;
|
||||
import me.mrCookieSlime.Slimefun.api.network.NetworkComponent;
|
||||
import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
|
||||
import me.mrCookieSlime.Slimefun.holograms.SimpleHologram;
|
||||
|
||||
public class CargoNet extends Network {
|
||||
|
||||
@ -142,15 +142,15 @@ public class CargoNet extends Network {
|
||||
|
||||
public void tick(final Block b) {
|
||||
if (!regulator.equals(b.getLocation())) {
|
||||
CargoHologram.update(b, "&4Multiple Cargo Regulators connected");
|
||||
SimpleHologram.update(b, "&4Multiple Cargo Regulators connected");
|
||||
return;
|
||||
}
|
||||
super.tick();
|
||||
if (connectorNodes.isEmpty() && terminusNodes.isEmpty()) {
|
||||
CargoHologram.update(b, "&7Status: &4&lOFFLINE");
|
||||
SimpleHologram.update(b, "&7Status: &4&lOFFLINE");
|
||||
}
|
||||
else {
|
||||
CargoHologram.update(b, "&7Status: &a&lONLINE");
|
||||
SimpleHologram.update(b, "&7Status: &a&lONLINE");
|
||||
|
||||
|
||||
final Map<Integer, List<Location>> output = new HashMap<>();
|
||||
|
@ -33,14 +33,14 @@ public final class EnergyHologram {
|
||||
});
|
||||
}
|
||||
|
||||
private static ArmorStand getArmorStand(Block b, boolean createIfNonExists) {
|
||||
private static ArmorStand getArmorStand(Block b, boolean createIfNoneExists) {
|
||||
Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5);
|
||||
|
||||
for (Entity n : l.getChunk().getEntities()) {
|
||||
if (n instanceof ArmorStand && n.getCustomName() != null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n;
|
||||
}
|
||||
|
||||
if (!createIfNonExists) return null;
|
||||
if (!createIfNoneExists) return null;
|
||||
else return ArmorStandFactory.createHidden(l);
|
||||
}
|
||||
|
||||
|
@ -10,9 +10,9 @@ import org.bukkit.entity.Entity;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.ArmorStandFactory;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
|
||||
public final class CargoHologram {
|
||||
public final class SimpleHologram {
|
||||
|
||||
private CargoHologram() {}
|
||||
private SimpleHologram() {}
|
||||
|
||||
public static void update(final Block b, final String name) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
|
||||
@ -21,19 +21,21 @@ public final class CargoHologram {
|
||||
});
|
||||
}
|
||||
|
||||
public static void remove(Block b) {
|
||||
public static void remove(final Block b) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
|
||||
ArmorStand hologram = getArmorStand(b, false);
|
||||
if (hologram != null) hologram.remove();
|
||||
});
|
||||
}
|
||||
|
||||
private static ArmorStand getArmorStand(Block b, boolean createIfNonExists) {
|
||||
private static ArmorStand getArmorStand(Block b, boolean createIfNoneExists) {
|
||||
Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5);
|
||||
|
||||
for (Entity n : l.getChunk().getEntities()) {
|
||||
if (n instanceof ArmorStand && n.getCustomName() != null && l.distanceSquared(n.getLocation()) < 0.4D) return (ArmorStand) n;
|
||||
}
|
||||
|
||||
if (!createIfNonExists) return null;
|
||||
if (!createIfNoneExists) return null;
|
||||
else return ArmorStandFactory.createHidden(l);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user