From 9f5a9eae9a7863412cc5eb433bf15e5ee71da616 Mon Sep 17 00:00:00 2001 From: Danielshe Date: Sun, 3 Nov 2019 14:44:52 +0800 Subject: 3.2.1 --- .../shedaniel/rei/impl/BaseBoundsHandlerImpl.java | 30 ++++++++-------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java') diff --git a/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java b/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java index cd7b955ad..f8af275de 100644 --- a/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java @@ -21,14 +21,7 @@ import java.util.function.Function; public class BaseBoundsHandlerImpl implements BaseBoundsHandler { - private static final Function RECTANGLE_LONG_FUNCTION = r -> r.x + 1000l * r.y + 1000000l * r.width + 1000000000l * r.height; - private static final Comparator, Float>, Function>>> LIST_PAIR_COMPARATOR; - private static final Comparator RECTANGLE_COMPARER = Comparator.comparingLong(RECTANGLE_LONG_FUNCTION::apply); - - static { - Comparator, Float>, Function>>> comparator = Comparator.comparingDouble(value -> value.getLeft().getRight()); - LIST_PAIR_COMPARATOR = comparator.reversed(); - } + private static final Comparator RECTANGLE_COMPARER = Comparator.comparingLong(Rectangle::hashCode); private long lastArea = -1; private List, Float>, Function>>> list = Lists.newArrayList(); @@ -63,19 +56,16 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler { @Override public boolean shouldRecalculateArea(boolean isOnRightSide, Rectangle rectangle) { - long current = getStringFromCurrent(isOnRightSide); + long current = currentHashCode(isOnRightSide); if (lastArea == current) return false; lastArea = current; return true; } - private DisplayHelper.DisplayBoundsHandler getHandler() { - return RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); - } - - private long getStringFromCurrent(boolean isOnRightSide) { - return getLongFromAreas(isOnRightSide ? getHandler().getRightBounds(MinecraftClient.getInstance().currentScreen) : getHandler().getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide, false)); + private long currentHashCode(boolean isOnRightSide) { + DisplayHelper.DisplayBoundsHandler handler = RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); + return areasHashCode(isOnRightSide ? handler.getRightBounds(MinecraftClient.getInstance().currentScreen) : handler.getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide, false)); } @Override @@ -103,11 +93,11 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler { list.add(new Pair<>(new Pair<>(screenClass, 0f), supplier)); } - public long getLongFromAreas(Rectangle rectangle, List exclusionZones) { - long a = RECTANGLE_LONG_FUNCTION.apply(rectangle); - for (Rectangle exclusionZone : exclusionZones) - a -= RECTANGLE_LONG_FUNCTION.apply(exclusionZone); - return a; + private long areasHashCode(Rectangle rectangle, List exclusionZones) { + int hashCode = 31 + (rectangle == null ? 0 : rectangle.hashCode()); + for (Rectangle e : exclusionZones) + hashCode = 31 * hashCode + (e == null ? 0 : e.hashCode()); + return hashCode; } } -- cgit