Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
824cf62e4c | ||
|
|
8f5c90557f | ||
|
|
7e6cb9910c | ||
|
|
0e6f35804d | ||
|
|
fbcfbceaa4 | ||
|
|
4a6d46d1da | ||
|
|
8779653211 | ||
|
|
c4c511315a | ||
|
|
bcc0bbdd2a | ||
|
|
ffe1bb8b44 | ||
|
|
64cdccc2d1 | ||
|
|
920a055f02 | ||
|
|
4d524244d6 | ||
|
|
429e4a597c |
No files matched your search
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>me.dadus33</groupId>
|
||||
<artifactId>ChatItem</artifactId>
|
||||
<version>2.5</version>
|
||||
<version>2.5.1</version>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
@@ -28,11 +28,13 @@ import me.dadus33.chatitem.commands.ChatItemCommand;
|
||||
import me.dadus33.chatitem.hook.ChatControlSupport;
|
||||
import me.dadus33.chatitem.hook.ChatManagerSupport;
|
||||
import me.dadus33.chatitem.hook.ecoenchants.EcoEnchantsSupport;
|
||||
import me.dadus33.chatitem.invsee.InvShower;
|
||||
import me.dadus33.chatitem.itemnamer.NamerManager;
|
||||
import me.dadus33.chatitem.listeners.InventoryListener;
|
||||
import me.dadus33.chatitem.listeners.JoinListener;
|
||||
import me.dadus33.chatitem.listeners.TranslationInventoryListener;
|
||||
import me.dadus33.chatitem.playernamer.PlayerNamerManager;
|
||||
import me.dadus33.chatitem.utils.ReflectionUtils;
|
||||
import me.dadus33.chatitem.utils.SemVer;
|
||||
import me.dadus33.chatitem.utils.Utils;
|
||||
import me.dadus33.chatitem.utils.Version;
|
||||
@@ -55,6 +57,7 @@ public class ChatItem extends JavaPlugin {
|
||||
pl.storage = new Storage(pl.getConfig());
|
||||
pl.chooseManagers();
|
||||
Translation.load(pl);
|
||||
InvShower.getInvShower().clear();
|
||||
if(sender != null) {
|
||||
if (!pl.storage.messageReload.isEmpty())
|
||||
sender.sendMessage(pl.storage.messageReload);
|
||||
@@ -159,11 +162,11 @@ public class ChatItem extends JavaPlugin {
|
||||
discordSrvSupport = true;
|
||||
plugins.add("DiscordSRV");
|
||||
}
|
||||
if (pm.isPluginEnabled("ChatControl")) {
|
||||
if (pm.isPluginEnabled("ChatControl") && ReflectionUtils.isClassExist("org.mineacademy.chatcontrol.settings.Settings")) {
|
||||
ChatControlSupport.init(this);
|
||||
plugins.add("ChatControl");
|
||||
}
|
||||
if (pm.isPluginEnabled("ChatManager")) {
|
||||
if (pm.isPluginEnabled("ChatManager") && ReflectionUtils.isClassExist("me.h1dd3nxn1nja.chatmanager.Main")) {
|
||||
ChatManagerSupport.init(this);
|
||||
plugins.add("ChatManager");
|
||||
}
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
package me.dadus33.chatitem;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import me.dadus33.chatitem.listeners.holder.CustomInventoryHolder;
|
||||
import me.dadus33.chatitem.utils.ItemUtils;
|
||||
import me.dadus33.chatitem.utils.Messages;
|
||||
|
||||
public class InventoryShower {
|
||||
|
||||
public static void showInventory(Player p, Player cible) {
|
||||
Inventory inv = Bukkit.createInventory(new CustomInventoryHolder(), 54, Messages.getMessage("inventory.name", "%cible%", cible.getName()));
|
||||
|
||||
for(int i = 0; i < 18; i++)
|
||||
inv.setItem(i, ItemUtils.createItem(ItemUtils.getMaterialWithCompatibility("BROWN_STAINED_GLASS_PANE", "STAINED_GLASS_PANE"), ""));
|
||||
|
||||
inv.setItem(2, ItemUtils.createItem(ItemUtils.getMaterialWithCompatibility("EXPERIENCE_BOTTLE", "EXP_BOTTLE"), "", cible.getLevel() == 0 ? 1 : (cible.getLevel() >= 64 ? 64 : cible.getLevel())));
|
||||
|
||||
PlayerInventory pi = cible.getInventory();
|
||||
inv.setItem(4, pi.getHelmet());
|
||||
inv.setItem(5, pi.getChestplate());
|
||||
inv.setItem(6, pi.getLeggings());
|
||||
inv.setItem(7, pi.getBoots());
|
||||
|
||||
for(int i = 0; i < pi.getContents().length && i < (54 - 18); i++)
|
||||
inv.setItem(i + 18, pi.getContents()[i]);
|
||||
|
||||
p.openInventory(inv);
|
||||
}
|
||||
|
||||
public static void showEnderchest(Player p, Player cible) {
|
||||
Inventory ec = cible.getEnderChest();
|
||||
Inventory inv = Bukkit.createInventory(new CustomInventoryHolder(), ec.getSize(), Messages.getMessage("enderchest.name", "%cible%", cible.getName()));
|
||||
ItemStack[] items = ec.getContents();
|
||||
for(int i = 0; i < ec.getSize(); i++)
|
||||
inv.setItem(i, items[i]);
|
||||
p.openInventory(inv);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package me.dadus33.chatitem.chatmanager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@@ -9,18 +10,25 @@ import javax.annotation.Nullable;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.ShulkerBox;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
import org.bukkit.inventory.meta.BookMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import me.dadus33.chatitem.ChatItem;
|
||||
import me.dadus33.chatitem.ItemSlot;
|
||||
import me.dadus33.chatitem.Storage;
|
||||
import me.dadus33.chatitem.hook.ecoenchants.EcoEnchantsSupport;
|
||||
import me.dadus33.chatitem.invsee.InvShower;
|
||||
import me.dadus33.chatitem.invsee.hook.EnderChestShower;
|
||||
import me.dadus33.chatitem.invsee.hook.PlayerInventoryShower;
|
||||
import me.dadus33.chatitem.itemnamer.NamerManager;
|
||||
import me.dadus33.chatitem.utils.ItemUtils;
|
||||
import me.dadus33.chatitem.utils.Utils;
|
||||
import me.dadus33.chatitem.utils.Version;
|
||||
|
||||
public abstract class ChatManager {
|
||||
|
||||
@@ -94,18 +102,41 @@ public abstract class ChatManager {
|
||||
public static ItemStack getUsableItem(Player p, ItemSlot slot) {
|
||||
if(slot == null)
|
||||
return null;
|
||||
ItemStack item = HandItem.getBetterItem(p, slot).clone();
|
||||
ItemStack betterItem = HandItem.getBetterItem(p, slot);
|
||||
if(betterItem == null)
|
||||
return null;
|
||||
|
||||
ItemStack item = betterItem.clone();
|
||||
if(slot.isDenyIfNoItem() && ItemUtils.isEmpty(item))
|
||||
return null;
|
||||
if (EcoEnchantsSupport.hasSupport()) {
|
||||
item = EcoEnchantsSupport.manageItem(item);
|
||||
} else if (item.hasItemMeta()) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta instanceof BookMeta) { // filtering written books
|
||||
BookMeta bm = (BookMeta) item.getItemMeta();
|
||||
bm.setPages(Collections.emptyList());
|
||||
item.setItemMeta(bm);
|
||||
} else if (meta instanceof BlockStateMeta && Version.getVersion().isNewerOrEquals(Version.V1_9)) { // if it's a block
|
||||
BlockStateMeta bsm = (BlockStateMeta) item.getItemMeta();
|
||||
if (bsm.hasBlockState() && bsm.getBlockState() instanceof ShulkerBox) {
|
||||
ShulkerBox sb = (ShulkerBox) bsm.getBlockState();
|
||||
for (ItemStack itemInv : sb.getInventory()) {
|
||||
ItemUtils.stripData(itemInv);
|
||||
}
|
||||
bsm.setBlockState(sb);
|
||||
}
|
||||
item.setItemMeta(bsm);
|
||||
}
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
public static ChatAction getChatAction(ItemSlot slot, Player p) {
|
||||
if(slot.isCommand()) {
|
||||
return new ChatAction(slot, "/chatitem seeinv " + slot.name().toLowerCase() + " " + p.getUniqueId());
|
||||
UUID uuid = UUID.randomUUID();
|
||||
InvShower.add(uuid.toString(), slot == ItemSlot.INVENTORY ? new PlayerInventoryShower(p) : new EnderChestShower(p));
|
||||
return new ChatAction(slot, "/chatitem seeinv " + uuid.toString());
|
||||
}
|
||||
return new ChatAction(slot, getUsableItem(p, slot));
|
||||
}
|
||||
|
||||
@@ -61,8 +61,20 @@ public class PacketEditingChatManager extends ChatManager {
|
||||
public boolean supportsChatComponentApi() {
|
||||
return baseComponentAvailable;
|
||||
}
|
||||
|
||||
private static String checkPacketSize(String packet, int maxSize) {
|
||||
int size = packet.getBytes().length;
|
||||
while(size > maxSize) {
|
||||
packet = packet.replaceFirst(" ", " ");
|
||||
if(size == packet.getBytes().length)
|
||||
break; // could not fix myself
|
||||
size = packet.getBytes().length;
|
||||
}
|
||||
return packet;
|
||||
}
|
||||
|
||||
public static Object createSystemChatPacket(String json) throws Exception {
|
||||
json = checkPacketSize(json, 150000);
|
||||
Object packet = internalCreateSystemChatPacket(json);
|
||||
if(packet != null)
|
||||
return packet;
|
||||
|
||||
+6
-7
@@ -22,6 +22,7 @@ import me.dadus33.chatitem.chatmanager.v1.packets.PacketContent.ContentModifier;
|
||||
import me.dadus33.chatitem.hook.DiscordSrvSupport;
|
||||
import me.dadus33.chatitem.utils.Messages;
|
||||
import me.dadus33.chatitem.utils.PacketUtils;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import net.kyori.adventure.nbt.api.BinaryTagHolder;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@@ -33,7 +34,7 @@ import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
|
||||
public class AdventureComponentManager implements IComponentManager {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean hasConditions() {
|
||||
try {
|
||||
@@ -108,14 +109,12 @@ public class AdventureComponentManager implements IComponentManager {
|
||||
comp = checkComponent(comp, hover, click, replacement, chat);
|
||||
if(ChatItem.discordSrvSupport && DiscordSrvSupport.isSendingMessage())
|
||||
DiscordSrvSupport.sendChatMessage(p, comp, null);
|
||||
ChatItem.debug("Result: " + GsonComponentSerializer.gson().serialize(comp));
|
||||
packet.getContent().getSpecificModifier(Component.class).write(0, comp);
|
||||
/*try {
|
||||
packet.setPacket(PacketEditingChatManager.createSystemChatPacket(GsonComponentSerializer.gson().serialize(comp)));
|
||||
try {
|
||||
((Audience) Audience.class.getDeclaredMethod("audience", Audience.class).invoke(null, p)).sendMessage(comp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}*/
|
||||
return packet.getPacket();
|
||||
}
|
||||
return null; // send by manager
|
||||
}
|
||||
|
||||
private Component checkComponent(Component comp, HoverEvent<?> hover, ClickEvent click, String itemName, Chat chat) {
|
||||
|
||||
+4
-3
@@ -2,9 +2,11 @@ package me.dadus33.chatitem.chatmanager.v1.basecomp.hook;
|
||||
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
import me.dadus33.chatitem.ChatItem;
|
||||
import me.dadus33.chatitem.chatmanager.v1.PacketEditingChatManager;
|
||||
import me.dadus33.chatitem.chatmanager.v1.basecomp.IComponentManager;
|
||||
import me.dadus33.chatitem.chatmanager.v1.packets.ChatItemPacket;
|
||||
import me.dadus33.chatitem.hook.DiscordSrvSupport;
|
||||
import me.dadus33.chatitem.utils.PacketUtils;
|
||||
|
||||
public class ComponentNMSManager implements IComponentManager {
|
||||
@@ -33,11 +35,10 @@ public class ComponentNMSManager implements IComponentManager {
|
||||
@Override
|
||||
public void writeJson(ChatItemPacket packet, String json) {
|
||||
// Not compatible with that for now
|
||||
//if(ChatItem.discordSrvSupport && DiscordSrvSupport.isSendingMessage())
|
||||
if(ChatItem.discordSrvSupport && DiscordSrvSupport.isSendingMessage())
|
||||
ChatItem.debug("(v1 ComponentNMS) Can't send message to discord");
|
||||
// DiscordSrvSupport.sendChatMessage(p, comp, null);
|
||||
try {
|
||||
PacketUtils.printPacketToDebug(packet.getPacket());
|
||||
PacketUtils.printPacketToDebug(PacketEditingChatManager.createSystemChatPacket(json));
|
||||
packet.setPacket(PacketEditingChatManager.createSystemChatPacket(json));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -67,7 +67,7 @@ public class JSONManipulator {
|
||||
|
||||
// Get the JSON representation of the item (well, not really JSON, but rather a
|
||||
// string representation of NBT data)
|
||||
hover.addProperty("value", parseEmpty(json, replacement, Arrays.asList(Messages.getMessage(action.getSlot().name().toLowerCase() + ".hover")), chat.getPlayer()));
|
||||
hover.addProperty("value", parseEmpty(json, replacement, Arrays.asList(Messages.getMessage(action.getSlot().name().toLowerCase() + ".hover", "%cible%", chat.getItemPlayer().getPlayer().getName())), chat.getPlayer()));
|
||||
|
||||
JsonObject click = new JsonObject();
|
||||
click.addProperty("action", "run_command");
|
||||
|
||||
@@ -8,8 +8,6 @@ import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.ShulkerBox;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -174,7 +172,7 @@ public class ChatPacketManager extends PacketHandler {
|
||||
if (bsm.hasBlockState() && bsm.getBlockState() instanceof ShulkerBox) {
|
||||
ShulkerBox sb = (ShulkerBox) bsm.getBlockState();
|
||||
for (ItemStack itemInv : sb.getInventory()) {
|
||||
stripData(itemInv);
|
||||
ItemUtils.stripData(itemInv);
|
||||
}
|
||||
bsm.setBlockState(sb);
|
||||
}
|
||||
@@ -187,7 +185,7 @@ public class ChatPacketManager extends PacketHandler {
|
||||
lastSentPacket = getter.manageEmpty(p, chat, e, fjson, getStorage());
|
||||
}
|
||||
}
|
||||
if (lastSentPacket == null)
|
||||
if (lastSentPacket == null) // maybe sent by the manager directly
|
||||
ChatItem.debug("(v1) No packet to sent with manager " + getter.getClass().getName());
|
||||
else
|
||||
PacketUtils.sendPacket(p, lastSentPacket);
|
||||
@@ -197,24 +195,6 @@ public class ChatPacketManager extends PacketHandler {
|
||||
});
|
||||
}
|
||||
|
||||
private void stripData(ItemStack i) {
|
||||
if (i == null) {
|
||||
return;
|
||||
}
|
||||
if (i.getType().equals(Material.AIR)) {
|
||||
return;
|
||||
}
|
||||
if (!i.hasItemMeta()) {
|
||||
return;
|
||||
}
|
||||
ItemMeta im = Bukkit.getItemFactory().getItemMeta(i.getType());
|
||||
ItemMeta original = i.getItemMeta();
|
||||
if (original.hasDisplayName()) {
|
||||
im.setDisplayName(original.getDisplayName());
|
||||
}
|
||||
i.setItemMeta(im);
|
||||
}
|
||||
|
||||
public Storage getStorage() {
|
||||
return manager.getStorage();
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class ChatListener implements Listener {
|
||||
return manage.getStorage();
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onChat(AsyncPlayerChatEvent e) {
|
||||
if(ChatManager.isTestingEnabled() && !ChatManager.isTesting("chat"))
|
||||
return;
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@@ -17,12 +16,12 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.dadus33.chatitem.ChatItem;
|
||||
import me.dadus33.chatitem.InventoryShower;
|
||||
import me.dadus33.chatitem.ItemSlot;
|
||||
import me.dadus33.chatitem.Storage;
|
||||
import me.dadus33.chatitem.chatmanager.ChatAction;
|
||||
import me.dadus33.chatitem.chatmanager.ChatManager;
|
||||
import me.dadus33.chatitem.chatmanager.v2.ChatListener;
|
||||
import me.dadus33.chatitem.invsee.InvShower;
|
||||
import me.dadus33.chatitem.listeners.InventoryListener;
|
||||
import me.dadus33.chatitem.utils.Messages;
|
||||
import me.dadus33.chatitem.utils.Utils;
|
||||
@@ -115,16 +114,12 @@ public class ChatItemCommand implements CommandExecutor, TabExecutor {
|
||||
}
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("seeinv")) {
|
||||
if(args.length == 3 && Utils.isUUID(args[2])) {
|
||||
Player cible = Bukkit.getPlayer(UUID.fromString(args[2]));
|
||||
if(cible == null || !cible.isOnline()) {
|
||||
Messages.sendMessage(p, "player-not-found", "%arg%", args[2]);
|
||||
return false;
|
||||
}
|
||||
if(args[1].equalsIgnoreCase("inventory")) {
|
||||
InventoryShower.showInventory(p, cible);
|
||||
} else if(args[1].equalsIgnoreCase("enderchest")) {
|
||||
InventoryShower.showEnderchest(p, cible);
|
||||
if(args.length == 2 && Utils.isUUID(args[1])) {
|
||||
InvShower inv = InvShower.get(args[1]);
|
||||
if(inv == null) {
|
||||
Messages.sendMessage(p, "seeinv_not_found");
|
||||
} else {
|
||||
inv.open(p);
|
||||
}
|
||||
} // else just ignore
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package me.dadus33.chatitem.invsee;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import me.dadus33.chatitem.ChatItem;
|
||||
|
||||
public abstract class InvShower {
|
||||
|
||||
private static final HashMap<String, InvShower> INV_SHOWER = new HashMap<>();
|
||||
public static InvShower get(String s) {
|
||||
return INV_SHOWER.get(s);
|
||||
}
|
||||
public static void add(String s, InvShower shower) {
|
||||
INV_SHOWER.put(s, shower);
|
||||
}
|
||||
public static HashMap<String, InvShower> getInvShower() {
|
||||
return INV_SHOWER;
|
||||
}
|
||||
|
||||
static {
|
||||
Bukkit.getScheduler().runTaskTimer(ChatItem.getInstance(), () -> {
|
||||
for(Entry<String, InvShower> entries : new HashMap<>(INV_SHOWER).entrySet())
|
||||
if(entries.getValue().hasExpired())
|
||||
INV_SHOWER.remove(entries.getKey());
|
||||
}, 200, 200);
|
||||
}
|
||||
|
||||
protected final long time;
|
||||
protected final UUID uuid;
|
||||
protected final String name;
|
||||
|
||||
public InvShower(String id, Player cible) {
|
||||
this.time = System.currentTimeMillis() + ChatItem.getInstance().getConfig().getInt("general.other-placeholders." + id + ".time-expire", 1800) * 1000;
|
||||
this.uuid = cible.getUniqueId();
|
||||
this.name = cible.getName();
|
||||
}
|
||||
|
||||
public UUID getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public long getTimeExpire() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public boolean hasExpired() {
|
||||
return System.currentTimeMillis() > time || Bukkit.getPlayer(uuid) == null || !Bukkit.getPlayer(uuid).isOnline();
|
||||
}
|
||||
|
||||
public abstract void open(Player p);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package me.dadus33.chatitem.invsee.hook;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.dadus33.chatitem.invsee.InvShower;
|
||||
import me.dadus33.chatitem.listeners.holder.CustomInventoryHolder;
|
||||
import me.dadus33.chatitem.utils.ItemUtils;
|
||||
import me.dadus33.chatitem.utils.Messages;
|
||||
|
||||
public class EnderChestShower extends InvShower {
|
||||
|
||||
private final ItemStack[] items;
|
||||
|
||||
public EnderChestShower(Player cible) {
|
||||
super("enderchest", cible);
|
||||
|
||||
Inventory ec = cible.getEnderChest();
|
||||
ItemStack[] tmp = ec.getContents();
|
||||
items = new ItemStack[tmp.length];
|
||||
for(int i = 0; i < ec.getSize(); i++)
|
||||
items[i] = ItemUtils.copyIfExist(tmp[i]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(Player p) {
|
||||
Inventory inv = Bukkit.createInventory(new CustomInventoryHolder(), items.length, Messages.getMessage("enderchest.name", "%cible%", name));
|
||||
|
||||
for(int i = 0; i < items.length; i++)
|
||||
inv.setItem(i, items[i]);
|
||||
|
||||
p.openInventory(inv);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package me.dadus33.chatitem.invsee.hook;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import me.dadus33.chatitem.invsee.InvShower;
|
||||
import me.dadus33.chatitem.listeners.holder.CustomInventoryHolder;
|
||||
import me.dadus33.chatitem.utils.ItemUtils;
|
||||
import me.dadus33.chatitem.utils.Messages;
|
||||
|
||||
public class PlayerInventoryShower extends InvShower {
|
||||
|
||||
private final HashMap<Integer, ItemStack> items = new HashMap<>();
|
||||
private final int level;
|
||||
|
||||
public PlayerInventoryShower(Player cible) {
|
||||
super("inventory", cible);
|
||||
this.level = cible.getLevel();
|
||||
|
||||
PlayerInventory pi = cible.getInventory();
|
||||
items.put(4, ItemUtils.copyIfExist(pi.getHelmet()));
|
||||
items.put(5, ItemUtils.copyIfExist(pi.getChestplate()));
|
||||
items.put(6, ItemUtils.copyIfExist(pi.getLeggings()));
|
||||
items.put(7, ItemUtils.copyIfExist(pi.getBoots()));
|
||||
|
||||
for(int i = 0; i < pi.getContents().length && i < (54 - 18); i++)
|
||||
items.put(i + 18, ItemUtils.copyIfExist(pi.getContents()[i]));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(Player p) {
|
||||
Inventory inv = Bukkit.createInventory(new CustomInventoryHolder(), 54, Messages.getMessage("inventory.name", "%cible%", name));
|
||||
|
||||
for(int i = 0; i < 18; i++)
|
||||
inv.setItem(i, ItemUtils.createItem(ItemUtils.getMaterialWithCompatibility("BROWN_STAINED_GLASS_PANE", "STAINED_GLASS_PANE"), ""));
|
||||
|
||||
inv.setItem(2, new ItemStack(ItemUtils.getMaterialWithCompatibility("EXPERIENCE_BOTTLE", "EXP_BOTTLE"), level == 0 ? 1 : (level >= 64 ? 64 : level)));
|
||||
|
||||
items.forEach(inv::setItem);
|
||||
|
||||
p.openInventory(inv);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import me.dadus33.chatitem.ChatItem;
|
||||
import me.dadus33.chatitem.Storage;
|
||||
import me.dadus33.chatitem.Translation;
|
||||
import me.dadus33.chatitem.listeners.holder.AdminHolder;
|
||||
import me.dadus33.chatitem.listeners.holder.ChatItemHolder;
|
||||
import me.dadus33.chatitem.listeners.holder.CustomInventoryHolder;
|
||||
import me.dadus33.chatitem.utils.ItemUtils;
|
||||
import me.dadus33.chatitem.utils.Messages;
|
||||
@@ -27,11 +28,20 @@ public class InventoryListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent e) {
|
||||
if(e.getClickedInventory() == null || !(e.getWhoClicked() instanceof Player) || e.getCurrentItem() == null)
|
||||
Player p = (Player) e.getWhoClicked();
|
||||
|
||||
if(e.getClickedInventory() == null || !(e.getWhoClicked() instanceof Player))
|
||||
return;
|
||||
InventoryHolder holder = e.getClickedInventory().getHolder();
|
||||
if(holder == null)
|
||||
if(holder == null || !(holder instanceof ChatItemHolder)) {
|
||||
if(e.getClick().equals(ClickType.DOUBLE_CLICK) && p.getOpenInventory() != null && p.getOpenInventory().getTopInventory() != null) {
|
||||
Inventory top = p.getOpenInventory().getTopInventory();
|
||||
if(top.getHolder() != null && top.getHolder() instanceof ChatItemHolder) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(holder instanceof CustomInventoryHolder) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
@@ -39,7 +49,8 @@ public class InventoryListener implements Listener {
|
||||
if(!(holder instanceof AdminHolder))
|
||||
return;
|
||||
e.setCancelled(true);
|
||||
Player p = (Player) e.getWhoClicked();
|
||||
if(e.getCurrentItem() == null)
|
||||
return;
|
||||
ItemStack item = e.getCurrentItem();
|
||||
Material type = item.getType();
|
||||
Storage c = ChatItem.getInstance().getStorage();
|
||||
|
||||
@@ -2,16 +2,8 @@ package me.dadus33.chatitem.listeners.holder;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
public class AdminHolder implements InventoryHolder {
|
||||
public class AdminHolder extends ChatItemHolder {
|
||||
|
||||
public final HashMap<Integer, String> keyBySlot = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package me.dadus33.chatitem.listeners.holder;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
public abstract class ChatItemHolder implements InventoryHolder {
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,5 @@
|
||||
package me.dadus33.chatitem.listeners.holder;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
public class CustomInventoryHolder implements InventoryHolder {
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return null;
|
||||
}
|
||||
public class CustomInventoryHolder extends ChatItemHolder {
|
||||
|
||||
}
|
||||
@@ -2,10 +2,7 @@ package me.dadus33.chatitem.listeners.holder;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
public class TranslationHolder implements InventoryHolder {
|
||||
public class TranslationHolder extends ChatItemHolder {
|
||||
|
||||
public final HashMap<Integer, String> langBySlot = new HashMap<>();
|
||||
private final int page;
|
||||
@@ -17,9 +14,4 @@ public class TranslationHolder implements InventoryHolder {
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package me.dadus33.chatitem.utils;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
@@ -86,7 +87,29 @@ public class ItemUtils {
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack copyIfExist(ItemStack item) {
|
||||
return isEmpty(item) ? null : item.clone();
|
||||
}
|
||||
|
||||
public static boolean isEmpty(ItemStack item) {
|
||||
return item == null || item.getType().equals(Material.AIR);
|
||||
}
|
||||
|
||||
public static void stripData(ItemStack i) {
|
||||
if (i == null) {
|
||||
return;
|
||||
}
|
||||
if (i.getType().equals(Material.AIR)) {
|
||||
return;
|
||||
}
|
||||
if (!i.hasItemMeta()) {
|
||||
return;
|
||||
}
|
||||
ItemMeta im = Bukkit.getItemFactory().getItemMeta(i.getType());
|
||||
ItemMeta original = i.getItemMeta();
|
||||
if (original.hasDisplayName()) {
|
||||
im.setDisplayName(original.getDisplayName());
|
||||
}
|
||||
i.setItemMeta(im);
|
||||
}
|
||||
}
|
||||
@@ -182,4 +182,13 @@ public class ReflectionUtils {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isClassExist(String name) {
|
||||
try {
|
||||
Class.forName(name);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,12 +62,16 @@ general:
|
||||
inventory:
|
||||
enabled: true
|
||||
deny-if-no-item: true
|
||||
# Time in minute before the placeholder expire
|
||||
time-expire: 1800
|
||||
keys:
|
||||
- "[inv]"
|
||||
- "{inv}"
|
||||
enderchest:
|
||||
enabled: true
|
||||
deny-if-no-item: true
|
||||
# Time in minute before the placeholder expire
|
||||
time-expire: 1800
|
||||
keys:
|
||||
- "[ec]"
|
||||
- "{ec}"
|
||||
@@ -259,6 +263,7 @@ messages:
|
||||
hours: " hours"
|
||||
enabled: "&aEnabled"
|
||||
disabled: "&cDisabled"
|
||||
seeinv_not_found: "&cImpossible to find this inventory. Are you coming too late ?"
|
||||
inventory:
|
||||
name: "%cible%'s inventory"
|
||||
chat: "%cible%'s inventory"
|
||||
|
||||
Reference in new issue
Block a user