From 6f1f3c791fd174c43f1096236e45342c7752c8cb Mon Sep 17 00:00:00 2001 From: GeorgH93 <git@georgh93.eu> Date: Wed, 5 Dec 2018 09:57:00 +0100 Subject: [PATCH] Add proper MC 1.13 support for backpack storage --- pom.xml | 2 +- .../Minepacks/Bukkit/Database/Config.java | 9 +++++++-- .../Bukkit/Database/InventorySerializer.java | 14 ++++++++------ .../Minepacks/Bukkit/Database/MySQL.java | 17 +++++++++++++---- .../Minepacks/Bukkit/Minepacks.java | 2 +- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index b85ef6f..faebce7 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ <dependency> <groupId>at.pcgamingfreaks</groupId> <artifactId>PluginLib</artifactId> - <version>1.0.5-SNAPSHOT</version> + <version>1.0.6-SNAPSHOT</version> </dependency> </dependencies> diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java index 88d1af8..9268d81 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Config.java @@ -27,10 +27,15 @@ import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; import java.io.FileNotFoundException; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +@SuppressWarnings("ConstantConditions") public class Config extends Configuration { private static final int CONFIG_VERSION = 21, UPGRADE_THRESHOLD = 21; @@ -49,7 +54,7 @@ protected void doUpdate() } @Override - protected void doUpgrade(YamlFileManager oldConfig) + protected void doUpgrade(@NotNull YamlFileManager oldConfig) { if(oldConfig.getVersion() < 20) // Pre V2.0 config file { diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/InventorySerializer.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/InventorySerializer.java index eb30adb..abe9fd1 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/InventorySerializer.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/InventorySerializer.java @@ -19,7 +19,7 @@ import at.pcgamingfreaks.Bukkit.ItemStackSerializer.BukkitItemStackSerializer; import at.pcgamingfreaks.Bukkit.ItemStackSerializer.ItemStackSerializer; -import at.pcgamingfreaks.Bukkit.ItemStackSerializer.NBTItemStackSerializer; +import at.pcgamingfreaks.Bukkit.ItemStackSerializer.NBTItemStackSerializerGen2; import at.pcgamingfreaks.ConsoleColor; import org.bukkit.inventory.Inventory; @@ -32,16 +32,16 @@ public class InventorySerializer private static final ItemStackSerializer BUKKIT_ITEM_STACK_SERIALIZER = new BukkitItemStackSerializer(); private final Logger logger; private ItemStackSerializer serializer; - private int usedSerializer = 1; + private int usedSerializer = 2; public InventorySerializer(Logger logger) { this.logger = logger; try { - if(NBTItemStackSerializer.isMCVersionCompatible()) + if(NBTItemStackSerializerGen2.isMCVersionCompatible()) { - serializer = new NBTItemStackSerializer(logger); + serializer = new NBTItemStackSerializerGen2(logger); } } catch(Exception e) @@ -66,9 +66,11 @@ 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); + case 1: + case 2: return serializer.deserialize(data); + default: logger.warning(ConsoleColor.RED + "No compatible serializer for item format available!" + ConsoleColor.RESET); } + return null; } public int getUsedSerializer() diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/MySQL.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/MySQL.java index ef4dd00..ce9172b 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/MySQL.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/MySQL.java @@ -57,13 +57,22 @@ protected void checkDB() { try(Connection connection = getConnection()) { - DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE {TablePlayers} (\n{FieldPlayerID} INT UNSIGNED NOT NULL AUTO_INCREMENT,\n{FieldName} CHAR(16) NOT NULL,\n{FieldUUID} CHAR(36) DEFAULT NULL," + - "\nPRIMARY KEY ({FieldPlayerID}),\nUNIQUE INDEX {FieldUUID}_UNIQUE ({FieldUUID})\n);")); - DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE {TableBackpacks} (\n{FieldBPOwner} INT UNSIGNED NOT NULL,\n{FieldBPITS} BLOB,\n{FieldBPVersion} INT DEFAULT 0,\n" + + if(useUUIDs) + { + DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE IF NOT EXISTS {TablePlayers} (\n{FieldPlayerID} INT UNSIGNED NOT NULL AUTO_INCREMENT,\n{FieldName} VARCHAR(16) NOT NULL,\n" + + "{FieldUUID} CHAR(" + ((useUUIDSeparators) ? "36" : "32") + ") DEFAULT NULL," + "\nPRIMARY KEY ({FieldPlayerID}),\n" + + "UNIQUE INDEX {FieldUUID}_UNIQUE ({FieldUUID})\n);")); + } + else + { + DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE IF NOT EXISTS {TablePlayers} (\n{FieldPlayerID} INT UNSIGNED NOT NULL AUTO_INCREMENT,\n{FieldName} CHAR(16) NOT NULL,\n" + + "\nPRIMARY KEY ({FieldPlayerID}),\nUNIQUE INDEX {FieldUUID}_UNIQUE ({FieldUUID})\n);")); + } + DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE IF NOT EXISTS {TableBackpacks} (\n{FieldBPOwner} INT UNSIGNED NOT NULL,\n{FieldBPITS} BLOB,\n{FieldBPVersion} INT DEFAULT 0,\n" + "{FieldBPLastUpdate} TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n" + "PRIMARY KEY ({FieldBPOwner}),\nCONSTRAINT fk_{TableBackpacks}_{TablePlayers}_{FieldBPOwner} FOREIGN KEY ({FieldBPOwner}) " + "REFERENCES {TablePlayers} ({FieldPlayerID}) ON DELETE CASCADE ON UPDATE CASCADE\n);")); - DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE {TableCooldowns} (\n{FieldCDPlayer} INT UNSIGNED,\n{FieldCDTime} LONG NOT NULL,\nPRIMARY KEY ({FieldCDPlayer}),\n" + + DBTools.updateDB(connection, replacePlaceholders("CREATE TABLE IF NOT EXISTS {TableCooldowns} (\n{FieldCDPlayer} INT UNSIGNED,\n{FieldCDTime} LONG NOT NULL,\nPRIMARY KEY ({FieldCDPlayer}),\n" + "CONSTRAINT fk_{TableCooldowns}_{TablePlayers}_{FieldCDPlayer} FOREIGN KEY ({FieldCDPlayer}) " + "REFERENCES {TablePlayers} ({FieldPlayerID}) ON DELETE CASCADE ON UPDATE CASCADE\n);")); } diff --git a/src/at/pcgamingfreaks/Minepacks/Bukkit/Minepacks.java b/src/at/pcgamingfreaks/Minepacks/Bukkit/Minepacks.java index 3a0a6a3..a041786 100644 --- a/src/at/pcgamingfreaks/Minepacks/Bukkit/Minepacks.java +++ b/src/at/pcgamingfreaks/Minepacks/Bukkit/Minepacks.java @@ -86,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_13_R1)) + if(MCVersion.is(MCVersion.UNKNOWN) || MCVersion.isNewerThan(MCVersion.MC_NMS_1_13_R2)) { String name = Bukkit.getServer().getClass().getPackage().getName(); String[] version = name.substring(name.lastIndexOf('.') + 2).split("_");