From 5357ec90f80768b69b197161e877e3ef884650a4 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 May 2019 18:30:54 +0800 Subject: 2.8.2 Build 104 Fixed #81 Close #82 Close #83 --- .../me/shedaniel/rei/client/DisplayHelperImpl.java | 40 ++++++++++++---------- 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java b/src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java index 28c5f5e43..6ab47f79f 100644 --- a/src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java @@ -14,25 +14,21 @@ import java.util.stream.Collectors; public class DisplayHelperImpl implements DisplayHelper { - private static final Comparator BOUNDS_HANDLER_COMPARATOR = Comparator.comparingDouble(value -> { - if (value instanceof DisplayBoundsHandler) - return (double) ((DisplayBoundsHandler) value).getPriority(); - return -Double.MAX_VALUE; - }).reversed(); + private static final Comparator BOUNDS_HANDLER_COMPARATOR; private static final DisplayBoundsHandler EMPTY = new DisplayBoundsHandler() { @Override public Class getBaseSupportedClass() { - return null; + return Object.class; } @Override public Rectangle getLeftBounds(Object screen) { - return new Rectangle(); + return DisplayBoundsHandler.EMPTY; } @Override public Rectangle getRightBounds(Object screen) { - return new Rectangle(); + return DisplayBoundsHandler.EMPTY; } @Override @@ -40,30 +36,38 @@ public class DisplayHelperImpl implements DisplayHelper { return -10f; } }; - private List screenDisplayBoundsHandlerMap = Lists.newArrayList(); + + static { + Comparator comparator = Comparator.comparingDouble(DisplayBoundsHandler::getPriority); + BOUNDS_HANDLER_COMPARATOR = comparator.reversed(); + } + + private List screenDisplayBoundsHandlers = Lists.newArrayList(); private Map handlerCache = Maps.newHashMap(); private BaseBoundsHandler baseBoundsHandler; @Override public List getSortedBoundsHandlers(Class screenClass) { - List list = Lists.newArrayList(screenDisplayBoundsHandlerMap.stream().filter(handler -> handler.getBaseSupportedClass().isAssignableFrom(screenClass)).collect(Collectors.toList())); - list.sort(BOUNDS_HANDLER_COMPARATOR); - return list; + return screenDisplayBoundsHandlers.stream().filter(handler -> handler.getBaseSupportedClass().isAssignableFrom(screenClass)).sorted(BOUNDS_HANDLER_COMPARATOR).collect(Collectors.toList()); + } + + @Override + public List getAllBoundsHandlers() { + return screenDisplayBoundsHandlers; } @Override public DisplayBoundsHandler getResponsibleBoundsHandler(Class screenClass) { - Optional handler = handlerCache.entrySet().stream().filter(entry -> entry.getKey().equals(screenClass)).map(Map.Entry::getValue).findAny(); - if (handler.isPresent()) - return handler.get(); - List sortedBoundsHandlers = getSortedBoundsHandlers(screenClass); - handlerCache.put(screenClass, sortedBoundsHandlers.isEmpty() ? EMPTY : sortedBoundsHandlers.get(0)); + Optional any = handlerCache.entrySet().stream().filter(entry -> entry.getKey().equals(screenClass)).map(Map.Entry::getValue).findAny(); + if (any.isPresent()) + return any.get(); + handlerCache.put(screenClass, screenDisplayBoundsHandlers.stream().filter(handler -> handler.getBaseSupportedClass().isAssignableFrom(screenClass)).sorted(BOUNDS_HANDLER_COMPARATOR).findAny().orElse(EMPTY)); return handlerCache.get(screenClass); } @Override public void registerBoundsHandler(DisplayBoundsHandler handler) { - screenDisplayBoundsHandlerMap.add(handler); + screenDisplayBoundsHandlers.add(handler); } @Override -- cgit