mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Added ChestManipulator
This commit is contained in:
parent
485319a2f9
commit
b08f5b9892
@ -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();
|
||||||
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user