aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-05-07 18:30:54 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-05-07 18:30:54 +0800
commit5357ec90f80768b69b197161e877e3ef884650a4 (patch)
tree23cc18b2e544c5fc609f511a4a18ff3112891262 /src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java
parent6fad30c3819f850f00d2498de69f756571c1fdc3 (diff)
downloadRoughlyEnoughItems-5357ec90f80768b69b197161e877e3ef884650a4.tar.gz
RoughlyEnoughItems-5357ec90f80768b69b197161e877e3ef884650a4.tar.bz2
RoughlyEnoughItems-5357ec90f80768b69b197161e877e3ef884650a4.zip
2.8.2 Build 104
Fixed #81 Close #82 Close #83
Diffstat (limited to 'src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java')
-rw-r--r--src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java40
1 files changed, 22 insertions, 18 deletions
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<DisplayBoundsHandler> 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<DisplayBoundsHandler> screenDisplayBoundsHandlerMap = Lists.newArrayList();
+
+ static {
+ Comparator<DisplayBoundsHandler> comparator = Comparator.comparingDouble(DisplayBoundsHandler::getPriority);
+ BOUNDS_HANDLER_COMPARATOR = comparator.reversed();
+ }
+
+ private List<DisplayBoundsHandler> screenDisplayBoundsHandlers = Lists.newArrayList();
private Map<Class, DisplayBoundsHandler> handlerCache = Maps.newHashMap();
private BaseBoundsHandler baseBoundsHandler;
@Override
public List<DisplayBoundsHandler> getSortedBoundsHandlers(Class screenClass) {
- List<DisplayBoundsHandler> 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<DisplayBoundsHandler> getAllBoundsHandlers() {
+ return screenDisplayBoundsHandlers;
}
@Override
public DisplayBoundsHandler getResponsibleBoundsHandler(Class screenClass) {
- Optional<DisplayBoundsHandler> handler = handlerCache.entrySet().stream().filter(entry -> entry.getKey().equals(screenClass)).map(Map.Entry::getValue).findAny();
- if (handler.isPresent())
- return handler.get();
- List<DisplayBoundsHandler> sortedBoundsHandlers = getSortedBoundsHandlers(screenClass);
- handlerCache.put(screenClass, sortedBoundsHandlers.isEmpty() ? EMPTY : sortedBoundsHandlers.get(0));
+ Optional<DisplayBoundsHandler> 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