aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/impl
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-02-21 22:12:48 +0800
committershedaniel <daniel@shedaniel.me>2020-02-21 22:13:05 +0800
commit490a2e3fdd124562ed09f048beec5178555a36a4 (patch)
tree35ae6c80dcde25fd829ef8c7ecbde71367947656 /src/main/java/me/shedaniel/rei/impl
parent4987103190a8bea7c8954512c389f9e768b8d5b3 (diff)
downloadRoughlyEnoughItems-490a2e3fdd124562ed09f048beec5178555a36a4.tar.gz
RoughlyEnoughItems-490a2e3fdd124562ed09f048beec5178555a36a4.tar.bz2
RoughlyEnoughItems-490a2e3fdd124562ed09f048beec5178555a36a4.zip
4.0.4
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl')
-rw-r--r--src/main/java/me/shedaniel/rei/impl/DisplayHelperImpl.java25
-rw-r--r--src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java20
2 files changed, 33 insertions, 12 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/DisplayHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/DisplayHelperImpl.java
index 77fa4fe80..fd73aa6bd 100644
--- a/src/main/java/me/shedaniel/rei/impl/DisplayHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/DisplayHelperImpl.java
@@ -10,8 +10,11 @@ import com.google.common.collect.Maps;
import me.shedaniel.math.api.Rectangle;
import me.shedaniel.rei.api.BaseBoundsHandler;
import me.shedaniel.rei.api.DisplayHelper;
+import me.shedaniel.rei.api.OverlayDecider;
+import me.shedaniel.rei.utils.CollectionUtils;
import org.jetbrains.annotations.ApiStatus;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -20,7 +23,7 @@ import java.util.stream.Collectors;
@ApiStatus.Internal
public class DisplayHelperImpl implements DisplayHelper {
- private static final Comparator<DisplayBoundsHandler<?>> BOUNDS_HANDLER_COMPARATOR;
+ private static final Comparator<OverlayDecider> BOUNDS_HANDLER_COMPARATOR;
private static final DisplayBoundsHandler<Object> EMPTY = new DisplayBoundsHandler<Object>() {
@Override
public Class<Object> getBaseSupportedClass() {
@@ -44,29 +47,30 @@ public class DisplayHelperImpl implements DisplayHelper {
};
static {
- Comparator<DisplayBoundsHandler<?>> comparator = Comparator.comparingDouble(DisplayBoundsHandler::getPriority);
+ Comparator<OverlayDecider> comparator = Comparator.comparingDouble(OverlayDecider::getPriority);
BOUNDS_HANDLER_COMPARATOR = comparator.reversed();
}
- private List<DisplayBoundsHandler<?>> screenDisplayBoundsHandlers = Lists.newArrayList();
+ private List<OverlayDecider> screenDisplayBoundsHandlers = Lists.newArrayList();
private Map<Class<?>, DisplayBoundsHandler<?>> handlerCache = Maps.newHashMap();
private Map<Class<?>, List<DisplayBoundsHandler<?>>> handlerSortedCache = Maps.newHashMap();
private BaseBoundsHandler baseBoundsHandler;
private Class<?> tempScreen;
+ @SuppressWarnings("rawtypes")
@Override
public List<DisplayBoundsHandler<?>> getSortedBoundsHandlers(Class<?> screenClass) {
List<DisplayBoundsHandler<?>> possibleCached = handlerSortedCache.get(screenClass);
if (possibleCached != null)
return possibleCached;
tempScreen = screenClass;
- handlerSortedCache.put(screenClass, screenDisplayBoundsHandlers.stream().filter(this::filterResponsible).sorted(BOUNDS_HANDLER_COMPARATOR).collect(Collectors.toList()));
+ handlerSortedCache.put(screenClass, (List) CollectionUtils.castAndMap(CollectionUtils.filter(screenDisplayBoundsHandlers, this::filterResponsible), DisplayBoundsHandler.class));
return handlerSortedCache.get(screenClass);
}
@Override
- public List<DisplayBoundsHandler<?>> getAllBoundsHandlers() {
- return screenDisplayBoundsHandlers;
+ public List<OverlayDecider> getAllOverlayDeciders() {
+ return Collections.unmodifiableList(screenDisplayBoundsHandlers);
}
@Override
@@ -79,13 +83,14 @@ public class DisplayHelperImpl implements DisplayHelper {
return handlerCache.get(screenClass);
}
- private boolean filterResponsible(DisplayBoundsHandler<?> handler) {
- return handler.getBaseSupportedClass().isAssignableFrom(tempScreen);
+ private boolean filterResponsible(OverlayDecider handler) {
+ return handler.isHandingScreen(tempScreen);
}
@Override
- public void registerBoundsHandler(DisplayBoundsHandler<?> handler) {
- screenDisplayBoundsHandlers.add(handler);
+ public void registerHandler(OverlayDecider decider) {
+ screenDisplayBoundsHandlers.add(decider);
+ screenDisplayBoundsHandlers.sort(BOUNDS_HANDLER_COMPARATOR);
}
@Override
diff --git a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
index d559c1157..a1074b836 100644
--- a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java
@@ -264,7 +264,7 @@ public class RecipeHelperImpl implements RecipeHelper {
((DisplayHelperImpl) DisplayHelper.getInstance()).resetData();
((DisplayHelperImpl) DisplayHelper.getInstance()).resetCache();
BaseBoundsHandler baseBoundsHandler = new BaseBoundsHandlerImpl();
- DisplayHelper.getInstance().registerBoundsHandler(baseBoundsHandler);
+ DisplayHelper.getInstance().registerHandler(baseBoundsHandler);
((DisplayHelperImpl) DisplayHelper.getInstance()).setBaseBoundsHandler(baseBoundsHandler);
List<REIPluginEntry> plugins = RoughlyEnoughItemsCore.getPlugins();
plugins.sort(Comparator.comparingInt(REIPluginEntry::getPriority).reversed());
@@ -328,6 +328,22 @@ public class RecipeHelperImpl implements RecipeHelper {
return -1f;
}
});
+ DisplayHelper.getInstance().registerHandler(new OverlayDecider() {
+ @Override
+ public boolean isHandingScreen(Class<?> screen) {
+ return true;
+ }
+
+ @Override
+ public ActionResult shouldScreenBeOverlayed(Class<?> screen) {
+ return ContainerScreen.class.isAssignableFrom(screen) ? ActionResult.SUCCESS : ActionResult.PASS;
+ }
+
+ @Override
+ public float getPriority() {
+ return -10;
+ }
+ });
// Clear Cache
((DisplayHelperImpl) DisplayHelper.getInstance()).resetCache();
@@ -344,7 +360,7 @@ public class RecipeHelperImpl implements RecipeHelper {
displayVisibilityHandlers.sort(VISIBILITY_HANDLER_COMPARATOR);
long usedTime = System.currentTimeMillis() - startTime;
- RoughlyEnoughItemsCore.LOGGER.info("[REI] Registered %d stack entries, %d recipes displays, %d exclusion zones suppliers, %d bounds handler, %d visibility handlers and %d categories (%s) in %d ms.", EntryRegistry.getInstance().getStacksList().size(), recipeCount[0], DisplayHelper.getInstance().getBaseBoundsHandler().supplierSize(), DisplayHelper.getInstance().getAllBoundsHandlers().size(), getDisplayVisibilityHandlers().size(), categories.size(), categories.keySet().stream().map(RecipeCategory::getCategoryName).collect(Collectors.joining(", ")), usedTime);
+ RoughlyEnoughItemsCore.LOGGER.info("[REI] Registered %d stack entries, %d recipes displays, %d exclusion zones suppliers, %d overlay decider, %d visibility handlers and %d categories (%s) in %d ms.", EntryRegistry.getInstance().getStacksList().size(), recipeCount[0], BaseBoundsHandler.getInstance().supplierSize(), DisplayHelper.getInstance().getAllOverlayDeciders().size(), getDisplayVisibilityHandlers().size(), categories.size(), categories.keySet().stream().map(RecipeCategory::getCategoryName).collect(Collectors.joining(", ")), usedTime);
}
@Override