From 0d7a8016a128eab3f7cef1bbb53b237514d13b6b Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Sun, 9 Aug 2020 23:25:30 +0200 Subject: [PATCH] Do not add unnecessary materials or entity types to the database --- .../diddiz/LogBlock/EntityTypeConverter.java | 4 +++ .../de/diddiz/LogBlock/MaterialConverter.java | 27 ++++++++++++++++++- .../java/de/diddiz/LogBlock/QueryParams.java | 20 +++++++++++--- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/EntityTypeConverter.java b/src/main/java/de/diddiz/LogBlock/EntityTypeConverter.java index 7b96ca3..8a99d50 100644 --- a/src/main/java/de/diddiz/LogBlock/EntityTypeConverter.java +++ b/src/main/java/de/diddiz/LogBlock/EntityTypeConverter.java @@ -16,6 +16,10 @@ public class EntityTypeConverter { private static HashMap entityTypeToId = new HashMap<>(); private static int nextEntityTypeId; + public synchronized static int getExistingEntityTypeId(EntityType entityType) { + return entityType == null ? null : entityTypeToId.get(entityType); + } + public synchronized static int getOrAddEntityTypeId(EntityType entityType) { Integer key = entityTypeToId.get(entityType); int tries = 0; diff --git a/src/main/java/de/diddiz/LogBlock/MaterialConverter.java b/src/main/java/de/diddiz/LogBlock/MaterialConverter.java index 3f4034c..9dbceac 100644 --- a/src/main/java/de/diddiz/LogBlock/MaterialConverter.java +++ b/src/main/java/de/diddiz/LogBlock/MaterialConverter.java @@ -30,6 +30,18 @@ public class MaterialConverter { } } + public synchronized static Integer getExistingMaterialId(BlockData blockData) { + return blockData == null ? null : getExistingMaterialId(blockData.getMaterial()); + } + + public synchronized static Integer getExistingMaterialId(Material material) { + if (material == null) { + return null; + } + String materialString = material.getKey().toString(); + return materialToID.get(materialString); + } + public synchronized static int getOrAddMaterialId(BlockData blockData) { return getOrAddMaterialId(blockData == null ? Material.AIR : blockData.getMaterial()); } @@ -76,9 +88,22 @@ public class MaterialConverter { return key.intValue(); } + public synchronized static Integer getExistingBlockStateId(BlockData blockData) { + if (blockData == null) { + return -1; + } + String blockDataString = blockData.getAsString(); + int dataPart = blockDataString.indexOf("["); + if (dataPart < 0) { + return -1; + } + String materialString = blockDataString.substring(dataPart); + return blockStateToID.get(materialString); + } + public synchronized static int getOrAddBlockStateId(BlockData blockData) { if (blockData == null) { - blockData = Material.AIR.createBlockData(); + return -1; } String blockDataString = blockData.getAsString(); int dataPart = blockDataString.indexOf("["); diff --git a/src/main/java/de/diddiz/LogBlock/QueryParams.java b/src/main/java/de/diddiz/LogBlock/QueryParams.java index f459ea7..e3a1035 100644 --- a/src/main/java/de/diddiz/LogBlock/QueryParams.java +++ b/src/main/java/de/diddiz/LogBlock/QueryParams.java @@ -1017,16 +1017,26 @@ public final class QueryParams implements Cloneable { HashSet typeIds = new HashSet<>(); for (Material type : types) { if (type != null) { - typeIds.add(MaterialConverter.getOrAddMaterialId(type)); + Integer id = MaterialConverter.getExistingMaterialId(type); + if (id != null) { + typeIds.add(id); + } } } for (Tag tag : typeTags) { if (tag != null) { for (Material type : tag.getValues()) { - typeIds.add(MaterialConverter.getOrAddMaterialId(type)); + Integer id = MaterialConverter.getExistingMaterialId(type); + if (id != null) { + typeIds.add(id); + } } } } + // add invalid id, so the type list is not ignored + if ((!types.isEmpty() || !typeTags.isEmpty()) && typeIds.isEmpty()) { + typeIds.add(-1); + } return typeIds; } @@ -1034,9 +1044,13 @@ public final class QueryParams implements Cloneable { HashSet typeIds = new HashSet<>(); for (EntityType type : entityTypes) { if (type != null) { - typeIds.add(EntityTypeConverter.getOrAddEntityTypeId(type)); + typeIds.add(EntityTypeConverter.getExistingEntityTypeId(type)); } } + // add invalid id, so the type list is not ignored + if (!entityTypes.isEmpty() && typeIds.isEmpty()) { + typeIds.add(-1); + } return typeIds; }