From c1d910f1a980c150c9cf4a88e220d883230dfb89 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 20 Jun 2022 20:29:39 +0800 Subject: Improve performance of entry tooltip by delaying calculation --- .../rei/impl/client/gui/widget/EntryWidget.java | 31 +++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'runtime/src/main/java/me') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index f9040a694..94523a83b 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java @@ -101,6 +101,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { public boolean removeTagMatch = true; private long lastCheckTime = -1; + private long lastCheckedTime = -1; private Display display; private Supplier displayTooltipComponent; @@ -323,7 +324,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { return null; } - private TransferHandler getTransferHandler() { + private TransferHandler getTransferHandler(boolean query) { if (PluginManager.areAnyReloading()) { return null; } @@ -345,7 +346,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { return null; } - return _getTransferHandler(); + return query ? _getTransferHandler() : null; } @Override @@ -413,10 +414,26 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { public Tooltip getCurrentTooltip(TooltipContext context) { Tooltip tooltip = getCurrentEntry().getTooltip(context); - if (tooltip != null && getTransferHandler() != null - && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { - tooltip.add(Component.translatable("text.auto_craft.move_items.tooltip").withStyle(ChatFormatting.YELLOW)); - tooltip.add((ClientTooltipComponent) displayTooltipComponent.get()); + if (tooltip != null && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { + boolean exists = getTransferHandler(false) != null; + + if (!exists) { + if (lastCheckedTime == -1 || Util.getMillis() - lastCheckedTime > 400) { + lastCheckedTime = Util.getMillis(); + } + + if (Util.getMillis() - lastCheckedTime > 200) { + lastCheckedTime = -1; + exists = getTransferHandler(true) != null; + } + } else { + lastCheckedTime = -1; + } + + if (exists) { + tooltip.add(Component.translatable("text.auto_craft.move_items.tooltip").withStyle(ChatFormatting.YELLOW)); + tooltip.add((ClientTooltipComponent) displayTooltipComponent.get()); + } } if (tooltip != null) { @@ -551,7 +568,7 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { if (!(Minecraft.getInstance().screen instanceof DisplayScreen) && Screen.hasControlDown()) { try { - TransferHandler handler = getTransferHandler(); + TransferHandler handler = getTransferHandler(true); if (handler != null) { AbstractContainerScreen containerScreen = REIRuntime.getInstance().getPreviousContainerScreen(); -- cgit