1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

Added ChestManipulator

This commit is contained in:
TheBusyBiscuit 2017-01-23 12:52:14 +01:00
parent 485319a2f9
commit b08f5b9892
7 changed files with 50 additions and 6 deletions

View File

@ -69,6 +69,7 @@ import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
import me.mrCookieSlime.Slimefun.api.item_transport.ChestManipulator;
import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener;
import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener;
import me.mrCookieSlime.Slimefun.listeners.ArmorListener;
@ -554,6 +555,7 @@ public class SlimefunStartup extends JavaPlugin {
OreGenSystem.map = null;
SlimefunGuide.contributors = null;
GitHubConnector.connectors = null;
ChestManipulator.listeners = null;
for (Player p: Bukkit.getOnlinePlayers()) {
p.closeInventory();

View File

@ -108,9 +108,12 @@ public class BlockMenu extends ChestMenu {
public void replaceExistingItem(int slot, ItemStack item, boolean event) {
final ItemStack previous = getItemInSlot(slot);
if (event && this.event != null) {
item = this.event.onEvent(slot, previous, item);
}
super.replaceExistingItem(slot, item);
if (event && this.event != null) this.event.onEvent(slot, previous, item);
changes++;
}

View File

@ -4,6 +4,6 @@ import org.bukkit.inventory.ItemStack;
public interface ItemManipulationEvent {
public void onEvent(int slot, ItemStack previous, ItemStack next);
public ItemStack onEvent(int slot, ItemStack previous, ItemStack next);
}

View File

@ -79,9 +79,11 @@ public class UniversalBlockMenu extends ChestMenu {
public void replaceExistingItem(int slot, ItemStack item, boolean event) {
final ItemStack previous = getItemInSlot(slot);
super.replaceExistingItem(slot, item);
if (event && this.event != null) this.event.onEvent(slot, previous, item);
if (event && this.event != null) {
item = this.event.onEvent(slot, previous, item);
}
super.replaceExistingItem(slot, item);
changes++;
}

View File

@ -157,13 +157,15 @@ public class CargoManager {
}
else if (target.getState() instanceof InventoryHolder) {
Inventory inv = ((InventoryHolder) target.getState()).getInventory();
for (int slot = 0; slot < inv.getContents().length; slot++) {
ItemStack is = inv.getContents()[slot];
if (is == null) {
inv.setItem(slot, stack.clone());
inv.setItem(slot, ChestManipulator.trigger(target, slot, null, stack.clone()));
return null;
}
else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true, DataType.ALWAYS) && is.getAmount() < is.getType().getMaxStackSize()) {
ItemStack prev = is.clone();
int amount = is.getAmount() + stack.getAmount();
if (amount > is.getType().getMaxStackSize()) {
@ -175,7 +177,7 @@ public class CargoManager {
stack = null;
}
inv.setItem(slot, is);
inv.setItem(slot, ChestManipulator.trigger(target, slot, prev, is));
return stack;
}
}

View File

@ -0,0 +1,10 @@
package me.mrCookieSlime.Slimefun.api.item_transport;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
public interface CargoTransportEvent {
public ItemStack onEvent(Block b, int slot, ItemStack previous, ItemStack next);
}

View File

@ -0,0 +1,25 @@
package me.mrCookieSlime.Slimefun.api.item_transport;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
public class ChestManipulator {
public static List<CargoTransportEvent> listeners = new ArrayList<CargoTransportEvent>();
public static void registerListener(CargoTransportEvent listener) {
listeners.add(listener);
}
public static ItemStack trigger(Block b, int slot, ItemStack prev, ItemStack next) {
for (CargoTransportEvent listener: listeners) {
next = listener.onEvent(b, slot, prev, next);
}
return next;
}
}