diff --git a/src/main/java/dev/micle/xptools/events/common/OnBlockBreakEventHandler.java b/src/main/java/dev/micle/xptools/events/common/OnBlockBreakEventHandler.java index 950ab56..8edae82 100644 --- a/src/main/java/dev/micle/xptools/events/common/OnBlockBreakEventHandler.java +++ b/src/main/java/dev/micle/xptools/events/common/OnBlockBreakEventHandler.java @@ -20,7 +20,6 @@ public class OnBlockBreakEventHandler { @SubscribeEvent public void OnBlockBreakEvent(BlockEvent.BreakEvent event) { Instant start = Instant.now(); - boolean usedCache = true; float xpToDrop = event.getExpToDrop(); // Get Block id @@ -30,27 +29,13 @@ public class OnBlockBreakEventHandler { block_id = block_rl.toString(); } - // Collect operations - List operations = null; - if (Config.Server.optimizationUseCache.get()) { - operations = cache.getEntry(block_id); - } - - if (operations == null) { - usedCache = false; - - // Calculate operations - operations = OperationUtils.calculateOperationList( - block_id, - event.getState().getTags().toList(), - Config.Server.blockBreakOperationItems - ); - - // Save operations to cache - if (Config.Server.optimizationUseCache.get()) { - cache.addEntry(block_id, operations); - } - } + // Get operations + List operations = OperationUtils.getOperationList( + block_id, + event.getState().getTags().toList(), + Config.Server.blockBreakOperationItems, + cache + ); // Add global operations before all others operations.addAll(0, Config.Server.blockBreakGlobalOperationItems); @@ -62,7 +47,6 @@ public class OnBlockBreakEventHandler { if (Config.Server.debugExtra.get()) { XpTools.LOGGER.debug("Completed block break event:"); XpTools.LOGGER.debug("\tOperations: {}", operations); - XpTools.LOGGER.debug("\tUsed cache: {}", usedCache); XpTools.LOGGER.debug("\tCache entries: {}", cache.size()); XpTools.LOGGER.debug("\tTime taken (nano seconds): {}", Duration.between(start, Instant.now()).toNanos()); XpTools.LOGGER.debug("\tXP: {} -> {}", event.getExpToDrop(), xpToDrop); diff --git a/src/main/java/dev/micle/xptools/events/common/OnLivingExperienceDropEventHandler.java b/src/main/java/dev/micle/xptools/events/common/OnLivingExperienceDropEventHandler.java index 08874d5..f7620d6 100644 --- a/src/main/java/dev/micle/xptools/events/common/OnLivingExperienceDropEventHandler.java +++ b/src/main/java/dev/micle/xptools/events/common/OnLivingExperienceDropEventHandler.java @@ -20,7 +20,6 @@ public class OnLivingExperienceDropEventHandler { @SubscribeEvent public void onLivingExperienceDropEvent(LivingExperienceDropEvent event) { Instant start = Instant.now(); - boolean usedCache = true; float xpToDrop = event.getDroppedExperience(); // Get Entity id @@ -30,27 +29,13 @@ public class OnLivingExperienceDropEventHandler { entity_id = entity_rl.toString(); } - // Collect operations - List operations = null; - if (Config.Server.optimizationUseCache.get()) { - operations = cache.getEntry(entity_id); - } - - if (operations == null) { - usedCache = false; - - // Calculate operations - operations = OperationUtils.calculateOperationList( - entity_id, - event.getEntity().getType().getTags().toList(), - Config.Server.entityKillOperationItems - ); - - // Save operations to cache - if (Config.Server.optimizationUseCache.get()) { - cache.addEntry(entity_id, operations); - } - } + // Get operations + List operations = OperationUtils.getOperationList( + entity_id, + event.getEntity().getType().getTags().toList(), + Config.Server.entityKillOperationItems, + cache + ); // Add global operations before all others operations.addAll(0, Config.Server.entityKillGlobalOperationItems); @@ -62,7 +47,6 @@ public class OnLivingExperienceDropEventHandler { if (Config.Server.debugExtra.get()) { XpTools.LOGGER.debug("Completed entity kill event:"); XpTools.LOGGER.debug("\tOperations: {}", operations); - XpTools.LOGGER.debug("\tUsed cache: {}", usedCache); XpTools.LOGGER.debug("\tCache entries: {}", cache.size()); XpTools.LOGGER.debug("\tTime taken (nano seconds): {}", Duration.between(start, Instant.now()).toNanos()); XpTools.LOGGER.debug("\tXP: {} -> {}", event.getDroppedExperience(), xpToDrop); diff --git a/src/main/java/dev/micle/xptools/operation/OperationUtils.java b/src/main/java/dev/micle/xptools/operation/OperationUtils.java index f0ed28e..8ecfbed 100644 --- a/src/main/java/dev/micle/xptools/operation/OperationUtils.java +++ b/src/main/java/dev/micle/xptools/operation/OperationUtils.java @@ -1,5 +1,6 @@ package dev.micle.xptools.operation; +import dev.micle.xptools.config.Config; import net.minecraft.tags.TagKey; import java.util.ArrayList; @@ -8,36 +9,50 @@ import java.util.List; import java.util.concurrent.ThreadLocalRandom; public class OperationUtils { - public static > List calculateOperationList(String id, List tagList, List operationItems) { - List operations = new ArrayList<>(); + public static > List getOperationList(String id, List tagList, List operationItems, OperationCache cache) { + List operations = null; - // Collect operations on relevant id - if (!id.isEmpty()) { - for (OperationItem operationItem : operationItems) { - if (!operationItem.isTag() && operationItem.getId().equals(id)) { - operations.add(operationItem); - } - } + // Get from cache if possible + if (Config.Server.optimizationUseCache.get()) { + operations = cache.getEntry(id); } - // Collect operations on relevant tag_id - for (T tagKey : tagList) { - String tag_id = tagKey.location().toString(); - for (OperationItem operationItem : operationItems) { - if (operationItem.isTag() && operationItem.getId().equals(tag_id)) { - operations.add(operationItem); + if (operations == null) { + operations = new ArrayList<>(); + + // Collect operations on relevant id + if (!id.isEmpty()) { + for (OperationItem operationItem : operationItems) { + if (!operationItem.isTag() && operationItem.getId().equals(id)) { + operations.add(operationItem); + } } } - } - // Sort operations based on priority - operations.sort(Comparator.comparingInt(OperationItem::getPriority)); + // Collect operations on relevant tag_id + for (T tagKey : tagList) { + String tag_id = tagKey.location().toString(); + for (OperationItem operationItem : operationItems) { + if (operationItem.isTag() && operationItem.getId().equals(tag_id)) { + operations.add(operationItem); + } + } + } - // Remove any operations after last operation - for (OperationItem operationItem : operations) { - if (operationItem.isLast()) { - operations = operations.subList(0, operations.indexOf(operationItem) + 1); - break; + // Sort operations based on priority + operations.sort(Comparator.comparingInt(OperationItem::getPriority)); + + // Remove any operations after last operation + for (OperationItem operationItem : operations) { + if (operationItem.isLast()) { + operations = operations.subList(0, operations.indexOf(operationItem) + 1); + break; + } + } + + // Save to cache if possible + if (Config.Server.optimizationUseCache.get()) { + cache.addEntry(id, operations); } }