Skip to content

Commit

Permalink
Do not add unnecessary materials or entity types to the database
Browse files Browse the repository at this point in the history
  • Loading branch information
Brokkonaut committed Aug 9, 2020
1 parent 6a398a6 commit 0d7a801
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/main/java/de/diddiz/LogBlock/EntityTypeConverter.java
Expand Up @@ -16,6 +16,10 @@ public class EntityTypeConverter {
private static HashMap<EntityType, Integer> 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;
Expand Down
27 changes: 26 additions & 1 deletion src/main/java/de/diddiz/LogBlock/MaterialConverter.java
Expand Up @@ -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());
}
Expand Down Expand Up @@ -76,9 +88,22 @@ public synchronized static int getOrAddMaterialId(Material material) {
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("[");
Expand Down
20 changes: 17 additions & 3 deletions src/main/java/de/diddiz/LogBlock/QueryParams.java
Expand Up @@ -1017,26 +1017,40 @@ private Set<Integer> getTypeIds() {
HashSet<Integer> 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<Material> 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;
}

private Set<Integer> getEntityTypeIds() {
HashSet<Integer> 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;
}

Expand Down

0 comments on commit 0d7a801

Please sign in to comment.