All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.guizhanss.guizhanlib.slimefun.machines.MenuBlock Maven / Gradle / Ivy

package net.guizhanss.guizhanlib.slimefun.machines;

import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler;
import io.github.thebusybiscuit.slimefun4.core.handlers.BlockPlaceHandler;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.inventory.DirtyChestMenu;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;

import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;

/**
 * A {@link MenuBlock} is a {@link SlimefunItem} with {@link MenuBlockPreset}.
 * 

* Modified from InfinityLib * * @author Mooy1 * @author ybw0014 */ @ParametersAreNonnullByDefault public abstract class MenuBlock extends SlimefunItem { /** * Constructor of {@link MenuBlock}. * Add events on break and place * * @param itemGroup the {@link ItemGroup} of this {@link MenuBlock} * @param item the {@link SlimefunItemStack} of this {@link MenuBlock} * @param recipeType the {@link RecipeType} of this {@link MenuBlock} * @param recipe the recipe of this {@link MenuBlock} */ @ParametersAreNonnullByDefault public MenuBlock(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); addItemHandler( new BlockBreakHandler(false, false) { @Override public void onPlayerBreak(BlockBreakEvent e, ItemStack itemStack, List list) { BlockMenu menu = BlockStorage.getInventory(e.getBlock()); if (menu != null) { onBreak(e, menu); } } }, new BlockPlaceHandler(false) { @Override public void onPlayerPlace(BlockPlaceEvent e) { onPlace(e, e.getBlockPlaced()); } } ); } @Override public final void postRegister() { new MenuBlockPreset(this); } @ParametersAreNonnullByDefault protected abstract void setup(BlockMenuPreset preset); @ParametersAreNonnullByDefault @Nonnull protected final int[] getTransportSlots(DirtyChestMenu menu, ItemTransportFlow flow, ItemStack item) { return switch (flow) { case INSERT -> getInputSlots(menu, item); case WITHDRAW -> getOutputSlots(); }; } @ParametersAreNonnullByDefault protected int[] getInputSlots(DirtyChestMenu menu, ItemStack item) { return getInputSlots(); } protected abstract int[] getInputSlots(); protected abstract int[] getOutputSlots(); @ParametersAreNonnullByDefault protected void onNewInstance(BlockMenu menu, Block b) { } @ParametersAreNonnullByDefault protected void onBreak(BlockBreakEvent e, BlockMenu menu) { Location l = menu.getLocation(); menu.dropItems(l, getInputSlots()); menu.dropItems(l, getOutputSlots()); } @ParametersAreNonnullByDefault protected void onPlace(BlockPlaceEvent e, Block b) { } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy