1
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:
TheBusyBiscuit 2019-09-25 14:17:06 +02:00
parent dcee66839f
commit f4e2c97327
7 changed files with 225 additions and 24 deletions

View File

@ -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);
}

View File

@ -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<>();

View File

@ -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;
});
}

View File

@ -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;
}
}
}
}
}
}
}

View File

@ -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<>();

View File

@ -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);
}

View File

@ -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);
}