1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45: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.energy.ItemEnergy;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; 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.AncientAltarListener;
import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener; import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener;
import me.mrCookieSlime.Slimefun.listeners.ArmorListener; import me.mrCookieSlime.Slimefun.listeners.ArmorListener;
@ -554,6 +555,7 @@ public class SlimefunStartup extends JavaPlugin {
OreGenSystem.map = null; OreGenSystem.map = null;
SlimefunGuide.contributors = null; SlimefunGuide.contributors = null;
GitHubConnector.connectors = null; GitHubConnector.connectors = null;
ChestManipulator.listeners = null;
for (Player p: Bukkit.getOnlinePlayers()) { for (Player p: Bukkit.getOnlinePlayers()) {
p.closeInventory(); p.closeInventory();

View File

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

View File

@ -4,6 +4,6 @@ import org.bukkit.inventory.ItemStack;
public interface ItemManipulationEvent { 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) { public void replaceExistingItem(int slot, ItemStack item, boolean event) {
final ItemStack previous = getItemInSlot(slot); 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++; changes++;
} }

View File

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