mirror of
https://github.com/CarmJos/UltraDepository.git
synced 2024-09-19 19:55:45 +00:00
[v1.1.5] 版本修复
- [F] 修复自动收集时仓库容量不生效的问题。 - [F] 修复GUI在从其他界面中打开时功能失效的问题。 - [U] 支持按组拿取物品时不关闭界面并实时更新物品数量。
This commit is contained in:
parent
c5230c0fbd
commit
f98a7ce025
2
pom.xml
2
pom.xml
@ -14,7 +14,7 @@
|
|||||||
<groupId>cc.carm.plugin</groupId>
|
<groupId>cc.carm.plugin</groupId>
|
||||||
<artifactId>ultradepository</artifactId>
|
<artifactId>ultradepository</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>1.1.4</version>
|
<version>1.1.5</version>
|
||||||
|
|
||||||
<name>UltraDepository</name>
|
<name>UltraDepository</name>
|
||||||
<description>超级仓库插件,支持设定不同物品的存储仓库。</description>
|
<description>超级仓库插件,支持设定不同物品的存储仓库。</description>
|
||||||
|
@ -3,7 +3,6 @@ package cc.carm.plugin.ultradepository.configuration.depository;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -45,9 +44,8 @@ public class DepositoryCapacity {
|
|||||||
public int getPlayerCapacity(Player player) {
|
public int getPlayerCapacity(Player player) {
|
||||||
return getPermissions().entrySet().stream()
|
return getPermissions().entrySet().stream()
|
||||||
.filter(entry -> player.hasPermission(entry.getKey()))
|
.filter(entry -> player.hasPermission(entry.getKey()))
|
||||||
.map(Map.Entry::getValue)
|
.mapToInt(Map.Entry::getValue)
|
||||||
.min(Comparator.comparingInt(Integer::intValue))
|
.max().orElse(defaultCapacity);
|
||||||
.orElse(defaultCapacity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,6 @@ package cc.carm.plugin.ultradepository.listener;
|
|||||||
|
|
||||||
import cc.carm.plugin.ultradepository.Main;
|
import cc.carm.plugin.ultradepository.Main;
|
||||||
import cc.carm.plugin.ultradepository.configuration.PluginConfig;
|
import cc.carm.plugin.ultradepository.configuration.PluginConfig;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -26,9 +24,7 @@ public class CollectListener implements Listener {
|
|||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (!Main.getUserManager().isCollectEnabled(player)) return;
|
if (!Main.getUserManager().isCollectEnabled(player)) return;
|
||||||
if (event.getBlock().getType() == Material.CHEST || event.getBlock().getType() == Material.TRAPPED_CHEST) {
|
if (event.getBlock().getType().isOccluding()) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Item> droppedItems = event.getItems();
|
List<Item> droppedItems = event.getItems();
|
||||||
if (droppedItems.isEmpty()) return;
|
if (droppedItems.isEmpty()) return;
|
||||||
|
@ -7,7 +7,6 @@ import cc.carm.plugin.ultradepository.configuration.depository.Depository;
|
|||||||
import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem;
|
import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem;
|
||||||
import cc.carm.plugin.ultradepository.data.UserData;
|
import cc.carm.plugin.ultradepository.data.UserData;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import org.bukkit.DyeColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
@ -112,12 +111,10 @@ public class DepositoryManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Set<Depository> getPlayerUsableDepository(Player player, ItemStack itemStack) {
|
public Set<Depository> getPlayerUsableDepository(Player player, ItemStack itemStack) {
|
||||||
String typeID = getItemTypeID(itemStack);
|
|
||||||
return getItemDepositories(itemStack).stream().filter(configuration -> {
|
return getItemDepositories(itemStack).stream().filter(configuration -> {
|
||||||
int currentAmount = Optional.ofNullable(Main.getUserManager().getData(player)
|
int used = Main.getUserManager().getData(player).getDepositoryData(configuration).getUsedCapacity();
|
||||||
.getItemAmount(configuration.getIdentifier(), typeID)).orElse(0);
|
int max = configuration.getCapacity().getPlayerCapacity(player);
|
||||||
int depositoryCapacity = configuration.getCapacity().getPlayerCapacity(player);
|
return used + itemStack.getAmount() <= max;
|
||||||
return currentAmount + itemStack.getAmount() <= depositoryCapacity;
|
|
||||||
}).collect(Collectors.toSet());
|
}).collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,18 +65,13 @@ public class DepositoryGUI extends GUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == ClickType.LEFT) {
|
if (type == ClickType.LEFT) {
|
||||||
player.closeInventory();
|
if (remain >= 1) {
|
||||||
if (itemData.getAmount() >= 1) {
|
SellItemGUI.open(player, userData, itemData, depository, item);
|
||||||
if (remain >= 1) {
|
|
||||||
SellItemGUI.open(player, userData, itemData, depository, item);
|
|
||||||
} else {
|
|
||||||
PluginMessages.ITEM_SOLD_LIMIT.send(player, new Object[]{remain, item.getLimit()});
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
PluginMessages.NO_ENOUGH_ITEM.send(player);
|
PluginMessages.ITEM_SOLD_LIMIT.send(player, new Object[]{remain, item.getLimit()});
|
||||||
}
|
}
|
||||||
} else if (type == ClickType.RIGHT) {
|
} else if (type == ClickType.RIGHT) {
|
||||||
player.closeInventory();
|
|
||||||
if (hasEmptySlot(player)) {
|
if (hasEmptySlot(player)) {
|
||||||
int pickupAmount = Math.min(itemData.getAmount(), item.getMaterial().getMaxStackSize());
|
int pickupAmount = Math.min(itemData.getAmount(), item.getMaterial().getMaxStackSize());
|
||||||
userData.removeItemAmount(item.getDepository().getIdentifier(), item.getTypeID(), pickupAmount);
|
userData.removeItemAmount(item.getDepository().getIdentifier(), item.getTypeID(), pickupAmount);
|
||||||
@ -84,8 +79,11 @@ public class DepositoryGUI extends GUI {
|
|||||||
PluginMessages.PICKUP.send(player, new Object[]{
|
PluginMessages.PICKUP.send(player, new Object[]{
|
||||||
item.getName(), pickupAmount
|
item.getName(), pickupAmount
|
||||||
});
|
});
|
||||||
|
setupItems(); //刷新GUI
|
||||||
|
updateView();
|
||||||
} else {
|
} else {
|
||||||
PluginMessages.NO_SPACE.send(player);
|
PluginMessages.NO_SPACE.send(player);
|
||||||
|
player.closeInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -99,6 +97,7 @@ public class DepositoryGUI extends GUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void open(@NotNull Player player, @NotNull Depository depository) {
|
public static void open(@NotNull Player player, @NotNull Depository depository) {
|
||||||
|
player.closeInventory();
|
||||||
DepositoryGUI gui = new DepositoryGUI(player, depository);
|
DepositoryGUI gui = new DepositoryGUI(player, depository);
|
||||||
gui.openGUI(player);
|
gui.openGUI(player);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package cc.carm.plugin.ultradepository.ui;
|
|||||||
|
|
||||||
import cc.carm.plugin.ultradepository.Main;
|
import cc.carm.plugin.ultradepository.Main;
|
||||||
import cc.carm.plugin.ultradepository.configuration.PluginConfig;
|
import cc.carm.plugin.ultradepository.configuration.PluginConfig;
|
||||||
|
import cc.carm.plugin.ultradepository.configuration.PluginMessages;
|
||||||
import cc.carm.plugin.ultradepository.configuration.depository.Depository;
|
import cc.carm.plugin.ultradepository.configuration.depository.Depository;
|
||||||
import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem;
|
import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem;
|
||||||
import cc.carm.plugin.ultradepository.data.DepositoryItemData;
|
import cc.carm.plugin.ultradepository.data.DepositoryItemData;
|
||||||
@ -177,7 +178,12 @@ public class SellItemGUI extends GUI {
|
|||||||
|
|
||||||
public static void open(Player player, UserData userData, DepositoryItemData itemData,
|
public static void open(Player player, UserData userData, DepositoryItemData itemData,
|
||||||
Depository configuration, DepositoryItem item) {
|
Depository configuration, DepositoryItem item) {
|
||||||
if (!Main.getEconomyManager().isInitialized()) return;
|
player.closeInventory();
|
||||||
|
if (!Main.getEconomyManager().isInitialized()) {
|
||||||
|
PluginMessages.NO_ECONOMY.send(player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SellItemGUI gui = new SellItemGUI(player, userData, itemData, configuration, item);
|
SellItemGUI gui = new SellItemGUI(player, userData, itemData, configuration, item);
|
||||||
gui.openGUI(player);
|
gui.openGUI(player);
|
||||||
}
|
}
|
||||||
|
@ -6,16 +6,18 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.IntStream;
|
|
||||||
|
|
||||||
public class GUI {
|
public class GUI {
|
||||||
|
|
||||||
@ -26,13 +28,13 @@ public class GUI {
|
|||||||
public GUIItem[] items;
|
public GUIItem[] items;
|
||||||
public Inventory inv;
|
public Inventory inv;
|
||||||
|
|
||||||
boolean cancelOnTarget = true;
|
boolean setCancelledIfClickOnTarget = true;
|
||||||
boolean cancelOnSelf = true;
|
boolean setCancelledIfClickOnSelf = true;
|
||||||
boolean cancelOnOuter = true;
|
boolean setCancelledIfClickOnOuter = true;
|
||||||
|
|
||||||
Map<String, Object> flags;
|
Map<String, Object> flags;
|
||||||
|
|
||||||
public GUIListener listener;
|
public Listener listener;
|
||||||
|
|
||||||
public GUI(GUIType type, String name) {
|
public GUI(GUIType type, String name) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@ -71,18 +73,10 @@ public class GUI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量添加GUI Item
|
|
||||||
*
|
|
||||||
* @param item 物品
|
|
||||||
* @param index 对应格
|
|
||||||
*/
|
|
||||||
public void setItem(GUIItem item, int... index) {
|
public void setItem(GUIItem item, int... index) {
|
||||||
Arrays.stream(index).forEach(i -> setItem(i, item));
|
for (int i : index) {
|
||||||
}
|
setItem(i, item);
|
||||||
|
}
|
||||||
public void setItem(GUIItem item, int start, int end) {
|
|
||||||
IntStream.rangeClosed(start, end).forEach(i -> setItem(i, item));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GUIItem getItem(int index) {
|
public GUIItem getItem(int index) {
|
||||||
@ -95,18 +89,14 @@ public class GUI {
|
|||||||
public void updateView() {
|
public void updateView() {
|
||||||
if (this.inv != null) {
|
if (this.inv != null) {
|
||||||
List<HumanEntity> viewers = this.inv.getViewers();
|
List<HumanEntity> viewers = this.inv.getViewers();
|
||||||
IntStream.range(0, this.items.length).forEach(index -> {
|
for (int index = 0; index < this.items.length; index++) {
|
||||||
GUIItem item = items[index];
|
if (items[index] == null) {
|
||||||
if (item == null) {
|
|
||||||
inv.setItem(index, new ItemStack(Material.AIR));
|
inv.setItem(index, new ItemStack(Material.AIR));
|
||||||
} else {
|
} else {
|
||||||
inv.setItem(index, items[index].display);
|
inv.setItem(index, items[index].display);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
for (HumanEntity p : viewers) {
|
|
||||||
((Player) p).updateInventory();
|
|
||||||
}
|
}
|
||||||
|
viewers.forEach(p -> ((Player) p).updateInventory());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +107,7 @@ public class GUI {
|
|||||||
* @param b 是否取消
|
* @param b 是否取消
|
||||||
*/
|
*/
|
||||||
public void setCancelledIfClickOnTarget(boolean b) {
|
public void setCancelledIfClickOnTarget(boolean b) {
|
||||||
this.cancelOnTarget = b;
|
this.setCancelledIfClickOnTarget = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,7 +117,7 @@ public class GUI {
|
|||||||
* @param b 是否取消
|
* @param b 是否取消
|
||||||
*/
|
*/
|
||||||
public void setCancelledIfClickOnSelf(boolean b) {
|
public void setCancelledIfClickOnSelf(boolean b) {
|
||||||
this.cancelOnSelf = b;
|
this.setCancelledIfClickOnSelf = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -137,7 +127,7 @@ public class GUI {
|
|||||||
* @param b 是否取消
|
* @param b 是否取消
|
||||||
*/
|
*/
|
||||||
public void setCancelledIfClickOnOuter(boolean b) {
|
public void setCancelledIfClickOnOuter(boolean b) {
|
||||||
this.cancelOnOuter = b;
|
this.setCancelledIfClickOnOuter = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addFlag(String flag, Object obj) {
|
public void addFlag(String flag, Object obj) {
|
||||||
@ -182,14 +172,78 @@ public class GUI {
|
|||||||
this.inv = inv;
|
this.inv = inv;
|
||||||
player.openInventory(inv);
|
player.openInventory(inv);
|
||||||
|
|
||||||
if (listener == null) {
|
if (listener == null)
|
||||||
Main.regListener(listener = new GUIListener(this, player));
|
Bukkit.getPluginManager().registerEvents(listener = new Listener() {
|
||||||
}
|
@EventHandler
|
||||||
|
public void onInventoryClickEvent(InventoryClickEvent event) {
|
||||||
|
if (!(event.getWhoClicked() instanceof Player)) return;
|
||||||
|
Player player = (Player) event.getWhoClicked();
|
||||||
|
if (!hasOpenedGUI(player)) return;
|
||||||
|
|
||||||
|
rawClickListener(event);
|
||||||
|
if (event.getSlot() != -999) {
|
||||||
|
try {
|
||||||
|
if (getOpenedGUI(player) == GUI.this
|
||||||
|
&& event.getClickedInventory() != null
|
||||||
|
&& event.getClickedInventory().equals(GUI.this.inv)
|
||||||
|
&& GUI.this.items[event.getSlot()] != null) {
|
||||||
|
GUI.this.items[event.getSlot()].realRawClickAction(event);
|
||||||
|
}
|
||||||
|
} catch (ArrayIndexOutOfBoundsException e) {
|
||||||
|
System.err.print("err cause by GUI(" + GUI.this + "), name=" + name);
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (setCancelledIfClickOnOuter) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getOpenedGUI(player) == GUI.this
|
||||||
|
&& event.getClickedInventory() != null) {
|
||||||
|
if (event.getClickedInventory().equals(GUI.this.inv)) {
|
||||||
|
if (setCancelledIfClickOnTarget) event.setCancelled(true);
|
||||||
|
|
||||||
|
if (event.getSlot() != -999 && GUI.this.items[event.getSlot()] != null) {
|
||||||
|
GUIItem clickedItem = GUI.this.items[event.getSlot()];
|
||||||
|
if (clickedItem.isActionActive()) {
|
||||||
|
clickedItem.onClick(event.getClick());
|
||||||
|
clickedItem.rawClickAction(event);
|
||||||
|
clickedItem.actions.forEach(action -> action.run(event.getClick(), player));
|
||||||
|
}
|
||||||
|
clickedItem.actionsIgnoreActive.forEach(action -> action.run(event.getClick(), player));
|
||||||
|
}
|
||||||
|
} else if (event.getClickedInventory().equals(player.getInventory()) && setCancelledIfClickOnSelf) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onDrag(InventoryDragEvent e) {
|
||||||
|
if (!(e.getWhoClicked() instanceof Player)) return;
|
||||||
|
if (e.getInventory().equals(inv)
|
||||||
|
|| e.getInventory().equals(e.getWhoClicked().getInventory())) {
|
||||||
|
GUI.this.onDrag(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryCloseEvent(InventoryCloseEvent event) {
|
||||||
|
if (!(event.getPlayer() instanceof Player)) return;
|
||||||
|
if (!event.getInventory().equals(inv)) return;
|
||||||
|
|
||||||
|
HandlerList.unregisterAll(this);
|
||||||
|
listener = null;
|
||||||
|
removeOpenedGUI((Player) event.getPlayer());
|
||||||
|
onClose();
|
||||||
|
|
||||||
|
}
|
||||||
|
}, Main.getInstance());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拖动GUI内物品时执行的代码
|
* 拖动GUI内物品是执行的代码
|
||||||
*
|
*
|
||||||
* @param event InventoryDragEvent
|
* @param event InventoryDragEvent
|
||||||
*/
|
*/
|
||||||
|
@ -1,109 +0,0 @@
|
|||||||
package cc.carm.plugin.ultradepository.util.gui;
|
|
||||||
|
|
||||||
import cc.carm.plugin.ultradepository.Main;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
|
||||||
|
|
||||||
public class GUIListener implements Listener {
|
|
||||||
|
|
||||||
final GUI currentGUI;
|
|
||||||
final Player player;
|
|
||||||
|
|
||||||
public GUIListener(GUI gui, Player player) {
|
|
||||||
this.currentGUI = gui;
|
|
||||||
this.player = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GUI getCurrentGUI() {
|
|
||||||
return currentGUI;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onInventoryClickEvent(InventoryClickEvent event) {
|
|
||||||
if (!(event.getWhoClicked() instanceof Player)) return;
|
|
||||||
getCurrentGUI().rawClickListener(event);
|
|
||||||
|
|
||||||
Player p = (Player) event.getWhoClicked();
|
|
||||||
if (event.getSlot() != -999) {
|
|
||||||
try {
|
|
||||||
if (GUI.getOpenedGUI(p) == getCurrentGUI()
|
|
||||||
&& event.getClickedInventory() != null
|
|
||||||
&& event.getClickedInventory().equals(getCurrentGUI().inv)
|
|
||||||
&& getCurrentGUI().items[event.getSlot()] != null) {
|
|
||||||
getCurrentGUI().items[event.getSlot()].realRawClickAction(event);
|
|
||||||
}
|
|
||||||
} catch (ArrayIndexOutOfBoundsException e) {
|
|
||||||
Main.error("error cause by GUI(" + getCurrentGUI() + "), name=" + getCurrentGUI().name);
|
|
||||||
e.printStackTrace();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else if (getCurrentGUI().cancelOnOuter) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GUI.hasOpenedGUI(p)
|
|
||||||
&& GUI.getOpenedGUI(p) == getCurrentGUI()
|
|
||||||
&& event.getClickedInventory() != null) {
|
|
||||||
|
|
||||||
if (event.getClickedInventory().equals(getCurrentGUI().inv)) {
|
|
||||||
if (getCurrentGUI().cancelOnTarget) event.setCancelled(true);
|
|
||||||
|
|
||||||
if (event.getSlot() != -999 && getCurrentGUI().items[event.getSlot()] != null) {
|
|
||||||
|
|
||||||
GUIItem item = getCurrentGUI().items[event.getSlot()];
|
|
||||||
|
|
||||||
if (item.isActionActive()) {
|
|
||||||
item.onClick(event.getClick());
|
|
||||||
item.rawClickAction(event);
|
|
||||||
item.actions.forEach(action -> action.run(event.getClick(), player));
|
|
||||||
}
|
|
||||||
|
|
||||||
item.actionsIgnoreActive.forEach(action -> action.run(event.getClick(), player));
|
|
||||||
|
|
||||||
}
|
|
||||||
} else if (event.getClickedInventory().equals(p.getInventory()) && getCurrentGUI().cancelOnSelf) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onDrag(InventoryDragEvent e) {
|
|
||||||
if (!(e.getWhoClicked() instanceof Player)) return;
|
|
||||||
Player p = (Player) e.getWhoClicked();
|
|
||||||
if (e.getInventory().equals(getCurrentGUI().inv) || e.getInventory().equals(p.getInventory())) {
|
|
||||||
getCurrentGUI().onDrag(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onInventoryCloseEvent(InventoryCloseEvent event) {
|
|
||||||
Player p = (Player) event.getPlayer();
|
|
||||||
if (event.getInventory().equals(getCurrentGUI().inv)) {
|
|
||||||
HandlerList.unregisterAll(this);
|
|
||||||
getCurrentGUI().listener = null;
|
|
||||||
getCurrentGUI().onClose();
|
|
||||||
GUI.removeOpenedGUI(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onOpen(InventoryOpenEvent event) {
|
|
||||||
Player p = (Player) event.getPlayer();
|
|
||||||
//开启新界面后 结束旧界面
|
|
||||||
if (!event.getInventory().equals(getCurrentGUI().inv)) {
|
|
||||||
HandlerList.unregisterAll(this);
|
|
||||||
getCurrentGUI().listener = null;
|
|
||||||
getCurrentGUI().onClose();
|
|
||||||
GUI.removeOpenedGUI(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user