From 8bc817fc671308193f3396b128f2a04c3de606ec 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 3cebb0df6..16c0f4f39 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(Point point) { Tooltip tooltip = getCurrentEntry().getTooltip(point); - if (tooltip != null && getTransferHandler() != null - && !(Minecraft.getInstance().screen instanceof DisplayScreen)) { - tooltip.add(new TranslatableComponent("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(new TranslatableComponent("text.auto_craft.move_items.tooltip").withStyle(ChatFormatting.YELLOW)); + tooltip.add((ClientTooltipComponent) displayTooltipComponent.get()); + } } if (tooltip != null) { @@ -533,7 +550,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