From 5c22beb2e52d72dcd0e45e681100b26e39a6e4a8 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Mon, 20 Jul 2020 06:02:23 +0200 Subject: [PATCH] Make MaterialConverter type safe --- .../java/de/diddiz/LogBlock/Consumer.java | 14 +++++------- .../java/de/diddiz/LogBlock/LogBlock.java | 2 +- .../de/diddiz/LogBlock/MaterialConverter.java | 20 +++++++++-------- .../java/de/diddiz/LogBlock/QueryParams.java | 8 +++---- src/main/java/de/diddiz/LogBlock/Updater.java | 22 +++++++++---------- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/Consumer.java b/src/main/java/de/diddiz/LogBlock/Consumer.java index 4be454a..572fcb5 100644 --- a/src/main/java/de/diddiz/LogBlock/Consumer.java +++ b/src/main/java/de/diddiz/LogBlock/Consumer.java @@ -230,7 +230,7 @@ public class Consumer extends Thread { * true if the item was removed */ public void queueChestAccess(Actor actor, Location loc, BlockData type, ItemStack itemStack, boolean remove) { - queueBlock(actor, loc, type, type, null, null, new ChestAccess(itemStack, remove, MaterialConverter.getOrAddMaterialId(itemStack.getType().getKey()))); + queueBlock(actor, loc, type, type, null, null, new ChestAccess(itemStack, remove, MaterialConverter.getOrAddMaterialId(itemStack.getType()))); } /** @@ -327,7 +327,7 @@ public class Consumer extends Thread { if (victim == null || !isLogged(location.getWorld())) { return; } - addQueueLast(new KillRow(location, killer == null ? null : killer, victim, weapon == null ? 0 : MaterialConverter.getOrAddMaterialId(weapon.getType().getKey().toString()))); + addQueueLast(new KillRow(location, killer == null ? null : killer, victim, weapon == null ? 0 : MaterialConverter.getOrAddMaterialId(weapon.getType()))); } /** @@ -718,12 +718,10 @@ public class Consumer extends Thread { return; } - String replacedString = typeBefore.getAsString(); - int replacedMaterialId = MaterialConverter.getOrAddMaterialId(replacedString); - int replacedStateId = MaterialConverter.getOrAddBlockStateId(replacedString); - String typeString = typeAfter.getAsString(); - int typeMaterialId = MaterialConverter.getOrAddMaterialId(typeString); - int typeStateId = MaterialConverter.getOrAddBlockStateId(typeString); + int replacedMaterialId = MaterialConverter.getOrAddMaterialId(typeBefore); + int replacedStateId = MaterialConverter.getOrAddBlockStateId(typeBefore); + int typeMaterialId = MaterialConverter.getOrAddMaterialId(typeAfter); + int typeStateId = MaterialConverter.getOrAddBlockStateId(typeAfter); addQueueLast(new BlockRow(loc, actor, replacedMaterialId, replacedStateId, Utils.serializeYamlConfiguration(stateBefore), typeMaterialId, typeStateId, Utils.serializeYamlConfiguration(stateAfter), ca)); } diff --git a/src/main/java/de/diddiz/LogBlock/LogBlock.java b/src/main/java/de/diddiz/LogBlock/LogBlock.java index 98ad84c..36a849e 100644 --- a/src/main/java/de/diddiz/LogBlock/LogBlock.java +++ b/src/main/java/de/diddiz/LogBlock/LogBlock.java @@ -91,7 +91,7 @@ public class LogBlock extends JavaPlugin { Updater updater = new Updater(this); updater.checkTables(); MaterialConverter.initializeMaterials(getConnection()); - MaterialConverter.getOrAddMaterialId(Material.AIR.getKey()); // AIR must be the first entry + MaterialConverter.getOrAddMaterialId(Material.AIR); // AIR must be the first entry EntityTypeConverter.initializeEntityTypes(getConnection()); if (updater.update()) { load(this); diff --git a/src/main/java/de/diddiz/LogBlock/MaterialConverter.java b/src/main/java/de/diddiz/LogBlock/MaterialConverter.java index c462a25..dbafc51 100644 --- a/src/main/java/de/diddiz/LogBlock/MaterialConverter.java +++ b/src/main/java/de/diddiz/LogBlock/MaterialConverter.java @@ -11,7 +11,6 @@ import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; public class MaterialConverter { @@ -31,16 +30,15 @@ public class MaterialConverter { } } - public static int getOrAddMaterialId(NamespacedKey nameSpaceKey) { - return getOrAddMaterialId(nameSpaceKey.toString()); + public static int getOrAddMaterialId(BlockData blockData) { + return getOrAddMaterialId(blockData == null ? Material.AIR : blockData.getMaterial()); } - public static int getOrAddMaterialId(String blockDataString) { - String materialString = blockDataString; - int dataPart = blockDataString.indexOf("["); - if (dataPart >= 0) { - materialString = blockDataString.substring(0, dataPart); + public static int getOrAddMaterialId(Material material) { + if (material == null) { + material = Material.AIR; } + String materialString = material.getKey().toString(); Integer key = materialToID.get(materialString); int tries = 0; while (key == null && tries < 10) { @@ -78,7 +76,11 @@ public class MaterialConverter { return key.intValue(); } - public static int getOrAddBlockStateId(String blockDataString) { + public static int getOrAddBlockStateId(BlockData blockData) { + if (blockData == null) { + blockData = Material.AIR.createBlockData(); + } + String blockDataString = blockData.getAsString(); int dataPart = blockDataString.indexOf("["); if (dataPart < 0) { return -1; diff --git a/src/main/java/de/diddiz/LogBlock/QueryParams.java b/src/main/java/de/diddiz/LogBlock/QueryParams.java index feb9d27..288e740 100644 --- a/src/main/java/de/diddiz/LogBlock/QueryParams.java +++ b/src/main/java/de/diddiz/LogBlock/QueryParams.java @@ -756,7 +756,7 @@ public final class QueryParams implements Cloneable { throw new IllegalArgumentException("No material matching: '" + weaponName + "'"); } types.add(mat); - typeIds.add(MaterialConverter.getOrAddMaterialId(mat.getKey())); + typeIds.add(MaterialConverter.getOrAddMaterialId(mat)); } needWeapon = true; } else if (param.equals("block") || param.equals("type")) { @@ -778,7 +778,7 @@ public final class QueryParams implements Cloneable { } } for (Material mat : tag.getValues()) { - typeIds.add(MaterialConverter.getOrAddMaterialId(mat.getKey())); + typeIds.add(MaterialConverter.getOrAddMaterialId(mat)); } typeTags.add(tag); } else if (blockName.contains("*")) { @@ -807,7 +807,7 @@ public final class QueryParams implements Cloneable { } for (Material mat : matched) { types.add(mat); - typeIds.add(MaterialConverter.getOrAddMaterialId(mat.getKey())); + typeIds.add(MaterialConverter.getOrAddMaterialId(mat)); } } else { final Material mat = Material.matchMaterial(blockName); @@ -815,7 +815,7 @@ public final class QueryParams implements Cloneable { throw new IllegalArgumentException("No material matching: '" + blockName + "'"); } types.add(mat); - typeIds.add(MaterialConverter.getOrAddMaterialId(mat.getKey())); + typeIds.add(MaterialConverter.getOrAddMaterialId(mat)); } } } else if (param.equals("area")) { diff --git a/src/main/java/de/diddiz/LogBlock/Updater.java b/src/main/java/de/diddiz/LogBlock/Updater.java index dcdfec3..562d81d 100644 --- a/src/main/java/de/diddiz/LogBlock/Updater.java +++ b/src/main/java/de/diddiz/LogBlock/Updater.java @@ -454,8 +454,8 @@ class Updater { } try { - String replacedBlockData = materialUpdater.getBlockData(replaced, data).getAsString(); - String setBlockData = materialUpdater.getBlockData(type, data).getAsString(); + BlockData replacedBlockData = materialUpdater.getBlockData(replaced, data); + BlockData setBlockData = materialUpdater.getBlockData(type, data); int newReplacedId = MaterialConverter.getOrAddMaterialId(replacedBlockData); int newReplacedData = MaterialConverter.getOrAddBlockStateId(replacedBlockData); @@ -536,7 +536,7 @@ class Updater { insertChestData.setInt(1, id); insertChestData.setBytes(2, Utils.saveItemStack(stack)); insertChestData.setInt(3, amount >= 0 ? 0 : 1); - insertChestData.setInt(4, MaterialConverter.getOrAddMaterialId(weaponMaterial.getKey())); + insertChestData.setInt(4, MaterialConverter.getOrAddMaterialId(weaponMaterial)); insertChestData.addBatch(); deleteChest.setInt(1, id); @@ -592,7 +592,7 @@ class Updater { if (weaponMaterial == null) { weaponMaterial = Material.AIR; } - int newWeapon = MaterialConverter.getOrAddMaterialId(weaponMaterial.getKey()); + int newWeapon = MaterialConverter.getOrAddMaterialId(weaponMaterial); if (newWeapon != weapon) { anyUpdate = true; updateWeaponStatement.setInt(1, newWeapon); @@ -860,19 +860,19 @@ class Updater { if (comparablePreviousMinecraftVersion.compareTo("1.14") < 0 && comparableCurrentMinecraftVersion.compareTo("1.14") >= 0) { logblock.getLogger().info("[Updater] Upgrading Materials to 1.14"); - renameMaterial("minecraft:sign", "minecraft:oak_sign"); - renameMaterial("minecraft:wall_sign", "minecraft:oak_wall_sign"); - renameMaterial("minecraft:stone_slab", "minecraft:smooth_stone_slab"); - renameMaterial("minecraft:rose_red", "minecraft:red_dye"); - renameMaterial("minecraft:dandelion_yellow", "minecraft:yellow_dye"); - renameMaterial("minecraft:cactus_green", "minecraft:green_dye"); + renameMaterial("minecraft:sign", Material.OAK_SIGN); + renameMaterial("minecraft:wall_sign", Material.OAK_WALL_SIGN); + renameMaterial("minecraft:stone_slab", Material.SMOOTH_STONE_SLAB); + renameMaterial("minecraft:rose_red", Material.RED_DYE); + renameMaterial("minecraft:dandelion_yellow", Material.YELLOW_DYE); + renameMaterial("minecraft:cactus_green", Material.GREEN_DYE); } config.set("previousMinecraftVersion", currentMinecraftVersion); logblock.saveConfig(); } - private void renameMaterial(String oldName, String newName) { + private void renameMaterial(String oldName, Material newName) { final Connection conn = logblock.getConnection(); try { conn.setAutoCommit(false);