mirror of
https://github.com/GeorgH93/Minepacks.git
synced 2025-02-27 03:32:22 +01:00
Update to MC 1.13
This commit is contained in:
parent
f697c728c1
commit
af875737d7
4
ToDo.txt
4
ToDo.txt
@ -1,7 +1,5 @@
|
||||
Multi Page
|
||||
Port to message API
|
||||
DB Migration
|
||||
API
|
||||
BungeeCord Sync
|
||||
Item filter - test
|
||||
custom backpack name in api
|
||||
Item filter - test
|
2
pom.xml
2
pom.xml
@ -57,7 +57,7 @@
|
||||
<dependency>
|
||||
<groupId>at.pcgamingfreaks</groupId>
|
||||
<artifactId>PluginLib</artifactId>
|
||||
<version>1.0.4-SNAPSHOT</version>
|
||||
<version>1.0.5-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -19,6 +19,7 @@ permissions:
|
||||
backpack.admin: true
|
||||
backpack.disable:
|
||||
description: This permission group can be used to disable the plugin for certian users/groups/worlds.
|
||||
default: false
|
||||
children:
|
||||
backpack.use: false
|
||||
backpack.others: false
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
package at.pcgamingfreaks.Minepacks.Bukkit;
|
||||
|
||||
import at.pcgamingfreaks.Bukkit.MCVersion;
|
||||
import at.pcgamingfreaks.Bukkit.NMSReflection;
|
||||
import at.pcgamingfreaks.StringUtils;
|
||||
|
||||
@ -31,23 +32,51 @@
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class Backpack implements at.pcgamingfreaks.Minepacks.Bukkit.API.Backpack
|
||||
{
|
||||
private final static Method METHOD_GET_INVENTORY = NMSReflection.getOBCMethod("inventory.CraftInventory", "getInventory");
|
||||
private final static Method METHOD_CRAFT_CHAT_MESSAGE_FROM_STRING = MCVersion.isNewerOrEqualThan(MCVersion.MC_1_13) ? NMSReflection.getOBCMethod("util.CraftChatMessage", "wrapOrNull", String.class) : null;
|
||||
private final static Field FIELD_TITLE = NMSReflection.getOBCField("inventory.CraftInventoryCustom$MinecraftInventory", "title");
|
||||
|
||||
private static Object titleOwn;
|
||||
private static String titleOtherFormat, titleOther;
|
||||
private final OfflinePlayer owner;
|
||||
private final String titleOther;
|
||||
private final Object titleOtherOBC;
|
||||
private final HashMap<Player, Boolean> opened = new HashMap<>();
|
||||
private Inventory bp;
|
||||
private int size, ownerID;
|
||||
private boolean hasChanged;
|
||||
|
||||
|
||||
public static void setTitle(final @NotNull String title, final @NotNull String titleOther)
|
||||
{
|
||||
titleOwn = prepareTitle(title);
|
||||
titleOtherFormat = titleOther;
|
||||
}
|
||||
|
||||
private static Object prepareTitle(final @NotNull String title)
|
||||
{
|
||||
if(MCVersion.isNewerOrEqualThan(MCVersion.MC_1_13))
|
||||
{
|
||||
try
|
||||
{
|
||||
//noinspection ConstantConditions
|
||||
return METHOD_CRAFT_CHAT_MESSAGE_FROM_STRING.invoke(null, title);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return StringUtils.limitLength(title, 32);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Backpack(OfflinePlayer owner)
|
||||
{
|
||||
this(owner, 9);
|
||||
@ -61,8 +90,19 @@ public Backpack(OfflinePlayer owner, int size)
|
||||
public Backpack(OfflinePlayer owner, int size, int ID)
|
||||
{
|
||||
this.owner = owner;
|
||||
titleOther = StringUtils.limitLength(String.format(Minepacks.getInstance().backpackTitleOther, owner.getName()), 32);
|
||||
titleOther = StringUtils.limitLength(String.format(titleOtherFormat, owner.getName()), 32);
|
||||
bp = Bukkit.createInventory(this, size, titleOther);
|
||||
Object titleOtherOBC = null;
|
||||
try
|
||||
{
|
||||
//noinspection ConstantConditions
|
||||
titleOtherOBC = FIELD_TITLE.get(METHOD_GET_INVENTORY.invoke(bp));
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
this.titleOtherOBC = titleOtherOBC;
|
||||
this.size = size;
|
||||
ownerID = ID;
|
||||
}
|
||||
@ -96,7 +136,7 @@ public void open(@NotNull Player player, boolean editable)
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(@NotNull Player player, boolean editable, @Nullable String title)
|
||||
public void open(@NotNull Player player, boolean editable, final @Nullable String title)
|
||||
{
|
||||
if(owner.isOnline())
|
||||
{
|
||||
@ -119,22 +159,24 @@ public void open(@NotNull Player player, boolean editable, @Nullable String titl
|
||||
}
|
||||
opened.put(player, editable);
|
||||
|
||||
if(title == null) title = player.equals(owner) ? Minepacks.getInstance().backpackTitle : titleOther;
|
||||
//region Set backpack title
|
||||
// It's not perfect, but it is the only way of doing this.
|
||||
// This sets the title of the inventory based on the person who is opening it.
|
||||
// The owner will see an other title, then everyone else.
|
||||
// This way we can add owner name to the tile for everyone else.
|
||||
try
|
||||
final Object usedTitle = (title == null) ? (player.equals(owner) ? titleOwn : titleOtherOBC) : prepareTitle(title);
|
||||
if(usedTitle != null && FIELD_TITLE != null && METHOD_GET_INVENTORY != null)
|
||||
{
|
||||
//noinspection ConstantConditions
|
||||
FIELD_TITLE.setAccessible(true);
|
||||
//noinspection ConstantConditions
|
||||
FIELD_TITLE.set(METHOD_GET_INVENTORY.invoke(bp), title);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
try
|
||||
{
|
||||
FIELD_TITLE.set(METHOD_GET_INVENTORY.invoke(bp), usedTitle);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
//endregion
|
||||
|
||||
player.openInventory(bp);
|
||||
}
|
||||
@ -169,13 +211,10 @@ public int getSize()
|
||||
return size;
|
||||
}
|
||||
|
||||
public List<ItemStack> setSize(int newSize)
|
||||
public @NotNull List<ItemStack> setSize(int newSize)
|
||||
{
|
||||
for(Entry<Player, Boolean> e : opened.entrySet())
|
||||
{
|
||||
e.getKey().closeInventory();
|
||||
}
|
||||
List<ItemStack> removedItems = new ArrayList<>();
|
||||
opened.forEach((key, value) -> key.closeInventory()); // Close all open views of the inventory
|
||||
List<ItemStack> removedItems = new LinkedList<>();
|
||||
ItemStack[] itemStackArray;
|
||||
if(bp.getSize() > newSize)
|
||||
{
|
||||
@ -185,15 +224,8 @@ public List<ItemStack> setSize(int newSize)
|
||||
{
|
||||
if(i != null)
|
||||
{
|
||||
if(count < newSize)
|
||||
{
|
||||
itemStackArray[count] = i;
|
||||
count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
removedItems.add(i);
|
||||
}
|
||||
if(count < newSize) itemStackArray[count++] = i;
|
||||
else removedItems.add(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -209,10 +241,7 @@ public List<ItemStack> setSize(int newSize)
|
||||
setChanged();
|
||||
save(); // Make sure the new inventory is saved
|
||||
size = newSize;
|
||||
for(Entry<Player, Boolean> e : opened.entrySet())
|
||||
{
|
||||
e.getKey().openInventory(bp);
|
||||
}
|
||||
opened.forEach((key, value) -> key.openInventory(bp));
|
||||
return removedItems;
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,7 @@ public abstract class Database implements Listener
|
||||
protected static final String START_UUID_UPDATE = "Start updating database to UUIDs ...", UUIDS_UPDATED = "Updated %d accounts to UUIDs.";
|
||||
|
||||
protected final Minepacks plugin;
|
||||
protected final InventorySerializer itsSerializer = new InventorySerializer();
|
||||
protected final InventorySerializer itsSerializer;
|
||||
protected final boolean useUUIDs, bungeeCordMode;
|
||||
protected boolean useUUIDSeparators;
|
||||
protected long maxAge;
|
||||
@ -61,6 +61,7 @@ public abstract class Database implements Listener
|
||||
public Database(Minepacks mp)
|
||||
{
|
||||
plugin = mp;
|
||||
itsSerializer = new InventorySerializer(plugin.getLogger());
|
||||
useUUIDSeparators = plugin.getConfiguration().getUseUUIDSeparators();
|
||||
useUUIDs = plugin.getConfiguration().getUseUUIDs();
|
||||
bungeeCordMode = plugin.getConfiguration().isBungeeCordModeEnabled();
|
||||
|
@ -20,23 +20,28 @@
|
||||
import at.pcgamingfreaks.Bukkit.ItemStackSerializer.BukkitItemStackSerializer;
|
||||
import at.pcgamingfreaks.Bukkit.ItemStackSerializer.ItemStackSerializer;
|
||||
import at.pcgamingfreaks.Bukkit.ItemStackSerializer.NBTItemStackSerializer;
|
||||
import at.pcgamingfreaks.ConsoleColor;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class InventorySerializer
|
||||
{
|
||||
private static final ItemStackSerializer BUKKIT_ITEM_STACK_SERIALIZER = new BukkitItemStackSerializer();
|
||||
private final Logger logger;
|
||||
private ItemStackSerializer serializer;
|
||||
private int usedSerializer = 1;
|
||||
|
||||
public InventorySerializer()
|
||||
public InventorySerializer(Logger logger)
|
||||
{
|
||||
this.logger = logger;
|
||||
try
|
||||
{
|
||||
if(NBTItemStackSerializer.isMCVersionCompatible())
|
||||
{
|
||||
serializer = new NBTItemStackSerializer();
|
||||
serializer = new NBTItemStackSerializer(logger);
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
@ -61,6 +66,7 @@ public ItemStack[] deserialize(byte[] data, int usedSerializer)
|
||||
switch(usedSerializer)
|
||||
{
|
||||
case 0: return BUKKIT_ITEM_STACK_SERIALIZER.deserialize(data);
|
||||
case 1: if(usedSerializer != this.usedSerializer) { logger.warning(ConsoleColor.RED + "No compatible serializer for item format available!" + ConsoleColor.RESET); return null; }
|
||||
default: return serializer.deserialize(data);
|
||||
}
|
||||
}
|
||||
|
@ -28,12 +28,12 @@
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.API.MinepacksPlugin;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Command.CommandManager;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Database.Config;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Database.Database;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Database.Helper.WorldBlacklistMode;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Database.Language;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Listener.DisableShulkerboxes;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Database.Database;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Listener.DropOnDeath;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Listener.BackpackEventListener;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Listener.DisableShulkerboxes;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Listener.DropOnDeath;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Listener.ItemFilter;
|
||||
import at.pcgamingfreaks.PluginLib.Bukkit.PluginLib;
|
||||
import at.pcgamingfreaks.StringUtils;
|
||||
@ -66,7 +66,6 @@ public class Minepacks extends JavaPlugin implements MinepacksPlugin
|
||||
private Language lang;
|
||||
private Database database;
|
||||
|
||||
public String backpackTitleOther = "%s Backpack", backpackTitle = "Backpack";
|
||||
public Message messageNoPermission, messageInvalidBackpack, messageWorldDisabled, messageNotFromConsole;
|
||||
|
||||
private int maxSize;
|
||||
@ -87,7 +86,7 @@ public void onEnable()
|
||||
{
|
||||
Utils.warnOnJava_1_7(getLogger());
|
||||
//region Check compatibility with used minecraft version
|
||||
if(MCVersion.is(MCVersion.UNKNOWN) || MCVersion.isNewerThan(MCVersion.MC_NMS_1_12_R1))
|
||||
if(MCVersion.is(MCVersion.UNKNOWN) || MCVersion.isNewerThan(MCVersion.MC_NMS_1_13_R1))
|
||||
{
|
||||
String name = Bukkit.getServer().getClass().getPackage().getName();
|
||||
String[] version = name.substring(name.lastIndexOf('.') + 2).split("_");
|
||||
@ -97,7 +96,7 @@ public void onEnable()
|
||||
}
|
||||
//endregion
|
||||
|
||||
if(PluginLib.getInstance().getVersion().olderThan(new Version("1.0.4-SNAPSHOT")))
|
||||
if(PluginLib.getInstance().getVersion().olderThan(new Version("1.0.5-SNAPSHOT")))
|
||||
{
|
||||
getLogger().warning("You are using an outdated version of the PCGF PluginLib! Please update it!");
|
||||
setEnabled(false);
|
||||
@ -122,7 +121,7 @@ public void onEnable()
|
||||
load();
|
||||
|
||||
if(config.getAutoUpdate()) update(null);
|
||||
StringUtils.getPluginEnabledMessage(getDescription().getName());
|
||||
getLogger().info(StringUtils.getPluginEnabledMessage(getDescription().getName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -133,7 +132,7 @@ public void onDisable()
|
||||
if(config.getAutoUpdate()) updater = update(null);
|
||||
unload();
|
||||
if(updater != null) updater.waitForAsyncOperation();
|
||||
StringUtils.getPluginDisabledMessage(getDescription().getName());
|
||||
getLogger().info(StringUtils.getPluginDisabledMessage(getDescription().getName()));
|
||||
instance = null;
|
||||
}
|
||||
|
||||
@ -158,8 +157,7 @@ private void load()
|
||||
lang.load(config.getLanguage(), config.getLanguageUpdateMode());
|
||||
database = Database.getDatabase(this);
|
||||
maxSize = config.getBackpackMaxSize();
|
||||
backpackTitleOther = config.getBPTitleOther();
|
||||
backpackTitle = StringUtils.limitLength(config.getBPTitle(), 32);
|
||||
at.pcgamingfreaks.Minepacks.Bukkit.Backpack.setTitle(config.getBPTitle(), config.getBPTitleOther());
|
||||
messageNotFromConsole = lang.getMessage("NotFromConsole");
|
||||
messageNoPermission = lang.getMessage("Ingame.NoPermission");
|
||||
messageInvalidBackpack = lang.getMessage("Ingame.InvalidBackpack");
|
||||
|
Loading…
Reference in New Issue
Block a user