diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-05-07 18:30:54 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-05-07 18:30:54 +0800 |
| commit | 5357ec90f80768b69b197161e877e3ef884650a4 (patch) | |
| tree | 23cc18b2e544c5fc609f511a4a18ff3112891262 /src/main/java | |
| parent | 6fad30c3819f850f00d2498de69f756571c1fdc3 (diff) | |
| download | RoughlyEnoughItems-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')
27 files changed, 328 insertions, 172 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index fbcf11103..657ec3018 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -208,7 +208,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer { }); ClothClientHooks.SCREEN_MOUSE_SCROLLED.register((minecraftClient, screen, v, v1, v2) -> { if (screen instanceof ContainerScreen) - if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().getRectangle().contains(ClientUtils.getMouseLocation()) && ScreenHelper.getLastOverlay().mouseScrolled(v, v1, v2)) + if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().isInside(ClientUtils.getMouseLocation()) && ScreenHelper.getLastOverlay().mouseScrolled(v, v1, v2)) return ActionResult.SUCCESS; return ActionResult.PASS; }); diff --git a/src/main/java/me/shedaniel/rei/api/ClientHelper.java b/src/main/java/me/shedaniel/rei/api/ClientHelper.java new file mode 100644 index 000000000..86c234872 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/api/ClientHelper.java @@ -0,0 +1,47 @@ +package me.shedaniel.rei.api; + +import me.shedaniel.rei.client.ClientHelperImpl; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public interface ClientHelper extends ClientModInitializer { + static ClientHelper getInstance() { + return ClientHelperImpl.instance; + } + + boolean isCheating(); + + void setCheating(boolean cheating); + + List<ItemStack> getInventoryItemsTypes(); + + void registerFabricKeyBinds(); + + boolean tryCheatingStack(ItemStack stack); + + boolean executeRecipeKeyBind(ItemStack stack); + + boolean executeUsageKeyBind(ItemStack stack); + + String getModFromItem(Item item); + + void sendDeletePacket(); + + String getFormattedModFromItem(Item item); + + FabricKeyBinding getRecipeKeyBinding(); + + FabricKeyBinding getUsageKeyBinding(); + + FabricKeyBinding getHideKeyBinding(); + + FabricKeyBinding getPreviousPageKeyBinding(); + + FabricKeyBinding getNextPageKeyBinding(); + + boolean executeViewAllRecipesKeyBind(); +} diff --git a/src/main/java/me/shedaniel/rei/api/DisplayHelper.java b/src/main/java/me/shedaniel/rei/api/DisplayHelper.java index 5d4fda8a4..8234c20b3 100644 --- a/src/main/java/me/shedaniel/rei/api/DisplayHelper.java +++ b/src/main/java/me/shedaniel/rei/api/DisplayHelper.java @@ -12,6 +12,8 @@ public interface DisplayHelper { List<DisplayBoundsHandler> getSortedBoundsHandlers(Class screenClass); + List<DisplayBoundsHandler> getAllBoundsHandlers(); + DisplayBoundsHandler getResponsibleBoundsHandler(Class screenClass); void registerBoundsHandler(DisplayBoundsHandler handler); @@ -19,6 +21,8 @@ public interface DisplayHelper { BaseBoundsHandler getBaseBoundsHandler(); public static interface DisplayBoundsHandler<T> { + public static final Rectangle EMPTY = new Rectangle(); + Class getBaseSupportedClass(); Rectangle getLeftBounds(T screen); @@ -29,6 +33,10 @@ public interface DisplayHelper { return PASS; } + default ActionResult isInZone(boolean isOnRightSide, double mouseX, double mouseY) { + return PASS; + } + default Rectangle getItemListArea(Rectangle rectangle) { return new Rectangle(rectangle.x + 2, rectangle.y + 24, rectangle.width - 4, rectangle.height - (RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField ? 27 + 22 : 27)); } diff --git a/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java b/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java index 231f3efb5..8195d88a0 100644 --- a/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java +++ b/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java @@ -1,5 +1,8 @@ package me.shedaniel.rei.api; public enum DisplayVisibility { - ALWAYS_VISIBLE, CONFIG_OPTIONAL, NEVER_VISIBLE, PASS + ALWAYS_VISIBLE, + CONFIG_OPTIONAL, + NEVER_VISIBLE, + PASS } diff --git a/src/main/java/me/shedaniel/rei/api/ItemCheatingMode.java b/src/main/java/me/shedaniel/rei/api/ItemCheatingMode.java index ba9f73b77..41d5e5ead 100644 --- a/src/main/java/me/shedaniel/rei/api/ItemCheatingMode.java +++ b/src/main/java/me/shedaniel/rei/api/ItemCheatingMode.java @@ -1,5 +1,6 @@ package me.shedaniel.rei.api; public enum ItemCheatingMode { - REI_LIKE, JEI_LIKE; + REI_LIKE, + JEI_LIKE; } diff --git a/src/main/java/me/shedaniel/rei/api/PluginFunction.java b/src/main/java/me/shedaniel/rei/api/PluginFunction.java index f69f347d5..67e460a70 100644 --- a/src/main/java/me/shedaniel/rei/api/PluginFunction.java +++ b/src/main/java/me/shedaniel/rei/api/PluginFunction.java @@ -1,5 +1,10 @@ package me.shedaniel.rei.api; public enum PluginFunction { - REGISTER_ITEMS, REGISTER_CATEGORIES, REGISTER_RECIPE_DISPLAYS, REGISTER_SPEED_CRAFT, REGISTER_BOUNDS, REGISTER_OTHERS; + REGISTER_ITEMS, + REGISTER_CATEGORIES, + REGISTER_RECIPE_DISPLAYS, + REGISTER_SPEED_CRAFT, + REGISTER_BOUNDS, + REGISTER_OTHERS; } diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java index b7e3f2206..4b0fde018 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java @@ -2,6 +2,7 @@ package me.shedaniel.rei.api; import me.shedaniel.rei.RoughlyEnoughItemsCore; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.util.Identifier; @@ -17,6 +18,8 @@ public interface RecipeHelper { int getRecipeCount(); + List<Recipe> getVanillaSortedRecipes(); + List<ItemStack> findCraftableByItems(List<ItemStack> inventoryItems); void registerCategory(RecipeCategory category); diff --git a/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java b/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java index 0567f6e16..9b64a5708 100644 --- a/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java +++ b/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java @@ -38,12 +38,12 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler { @Override public Rectangle getLeftBounds(Screen screen) { - return new Rectangle(); + return DisplayHelper.DisplayBoundsHandler.EMPTY; } @Override public Rectangle getRightBounds(Screen screen) { - return new Rectangle(); + return DisplayHelper.DisplayBoundsHandler.EMPTY; } @Override @@ -52,20 +52,33 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler { } @Override + public ActionResult isInZone(boolean isOnRightSide, double mouseX, double mouseY) { + for(Rectangle zone : getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide)) + if (zone.contains(mouseX, mouseY)) + return ActionResult.FAIL; + return ActionResult.PASS; + } + + @Override public boolean shouldRecalculateArea(boolean isOnRightSide, Rectangle rectangle) { if (lastArea == null) { - DisplayHelper.DisplayBoundsHandler handler = RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); - lastArea = getStringFromAreas(isOnRightSide ? handler.getRightBounds(MinecraftClient.getInstance().currentScreen) : handler.getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide)); + lastArea = getStringFromCurrent(isOnRightSide); return false; } - DisplayHelper.DisplayBoundsHandler handler = RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); - String fromAreas = getStringFromAreas(isOnRightSide ? handler.getRightBounds(MinecraftClient.getInstance().currentScreen) : handler.getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide)); - if (lastArea.contentEquals(fromAreas)) + if (lastArea.contentEquals(getStringFromCurrent(isOnRightSide))) return false; - lastArea = fromAreas; + lastArea = getStringFromCurrent(isOnRightSide); return true; } + private DisplayHelper.DisplayBoundsHandler getHandler() { + return RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); + } + + private String getStringFromCurrent(boolean isOnRightSide) { + return getStringFromAreas(isOnRightSide ? getHandler().getRightBounds(MinecraftClient.getInstance().currentScreen) : getHandler().getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide)); + } + @Override public ActionResult canItemSlotWidgetFit(boolean isOnRightSide, int left, int top, Screen screen, Rectangle fullBounds) { List<Rectangle> currentExclusionZones = getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide); diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java index 0a3484786..febe35b4e 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java @@ -5,11 +5,11 @@ import com.google.common.collect.Maps; import io.netty.buffer.Unpooled; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.RoughlyEnoughItemsNetwork; +import me.shedaniel.rei.api.ClientHelper; import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.api.RecipeDisplay; import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.gui.RecipeViewingScreen; -import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; @@ -34,49 +34,75 @@ import java.util.List; import java.util.Map; import java.util.Optional; -public class ClientHelper implements ClientModInitializer { +public class ClientHelperImpl implements ClientHelper { - private static final Identifier RECIPE_KEYBIND = new Identifier("roughlyenoughitems", "recipe_keybind"); - private static final Identifier USAGE_KEYBIND = new Identifier("roughlyenoughitems", "usage_keybind"); - private static final Identifier HIDE_KEYBIND = new Identifier("roughlyenoughitems", "hide_keybind"); - private static final Map<String, String> MOD_NAME_CACHE = Maps.newHashMap(); - public static FabricKeyBinding RECIPE, USAGE, HIDE; + public static ClientHelperImpl instance; + private final Identifier recipeKeybind = new Identifier("roughlyenoughitems", "recipe_keybind"); + private final Identifier usageKeybind = new Identifier("roughlyenoughitems", "usage_keybind"); + private final Identifier hideKeybind = new Identifier("roughlyenoughitems", "hide_keybind"); + private final Identifier previousPageKeybind = new Identifier("roughlyenoughitems", "previous_page"); + private final Identifier nextPageKeybind = new Identifier("roughlyenoughitems", "next_page"); + private final Map<String, String> modNameCache = Maps.newHashMap(); + public FabricKeyBinding recipe, usage, hide, previousPage, nextPage; - static { - MOD_NAME_CACHE.put("minecraft", "Minecraft"); - MOD_NAME_CACHE.put("c", "Common"); - } - - public static String getFormattedModFromItem(Item item) { + @Override + public String getFormattedModFromItem(Item item) { String mod = getModFromItem(item); if (mod.equalsIgnoreCase("")) return ""; return "§9§o" + mod; } - public static String getModFromItem(Item item) { + @Override + public FabricKeyBinding getRecipeKeyBinding() { + return recipe; + } + + @Override + public FabricKeyBinding getUsageKeyBinding() { + return usage; + } + + @Override + public FabricKeyBinding getHideKeyBinding() { + return hide; + } + + @Override + public FabricKeyBinding getPreviousPageKeyBinding() { + return previousPage; + } + + @Override + public FabricKeyBinding getNextPageKeyBinding() { + return nextPage; + } + + public String getModFromItem(Item item) { if (item.equals(Items.AIR)) return ""; return getModFromIdentifier(Registry.ITEM.getId(item)); } - public static String getModFromIdentifier(Identifier identifier) { + public String getModFromIdentifier(Identifier identifier) { if (identifier == null) return ""; - Optional<String> any = Optional.ofNullable(MOD_NAME_CACHE.getOrDefault(identifier.getNamespace(), null)); + Optional<String> any = Optional.ofNullable(modNameCache.getOrDefault(identifier.getNamespace(), null)); if (any.isPresent()) return any.get(); String modid = identifier.getNamespace(); String s = FabricLoader.getInstance().getModContainer(modid).map(ModContainer::getMetadata).map(ModMetadata::getName).orElse(modid); - MOD_NAME_CACHE.put(modid, s); + modNameCache.put(modid, s); return s; } - public static boolean isCheating() { + @Override + public boolean isCheating() { return RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating; } - public static void setCheating(boolean cheating) { + @Override + public void setCheating(boolean cheating) { RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating = cheating; try { RoughlyEnoughItemsCore.getConfigManager().saveConfig(); @@ -85,7 +111,8 @@ public class ClientHelper implements ClientModInitializer { } } - public static void sendDeletePacket() { + @Override + public void sendDeletePacket() { if (ScreenHelper.getLastContainerScreen() instanceof CreativePlayerInventoryScreen) { MinecraftClient.getInstance().player.inventory.setCursorStack(ItemStack.EMPTY); return; @@ -93,7 +120,8 @@ public class ClientHelper implements ClientModInitializer { ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.DELETE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer())); } - public static boolean tryCheatingStack(ItemStack cheatedStack) { + @Override + public boolean tryCheatingStack(ItemStack cheatedStack) { if (RoughlyEnoughItemsCore.canUsePackets()) { try { ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.CREATE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer()).writeItemStack(cheatedStack.copy())); @@ -108,28 +136,31 @@ public class ClientHelper implements ClientModInitializer { String madeUpCommand = og.replaceAll("\\{player_name}", MinecraftClient.getInstance().player.getEntityName()).replaceAll("\\{item_identifier}", identifier.toString()).replaceAll("\\{nbt}", tagMessage).replaceAll("\\{count}", String.valueOf(cheatedStack.getAmount())); if (madeUpCommand.length() > 256) { madeUpCommand = og.replaceAll("\\{player_name}", MinecraftClient.getInstance().player.getEntityName()).replaceAll("\\{item_identifier}", identifier.toString()).replaceAll("\\{nbt}", "").replaceAll("\\{count}", String.valueOf(cheatedStack.getAmount())); - MinecraftClient.getInstance().player.addChatMessage(new TranslatableTextComponent("text.rei.too_long_nbt"), false); + MinecraftClient.getInstance().player.addChatMessage(new TranslatableTextComponent("text.rei" + ".too_long_nbt"), false); } MinecraftClient.getInstance().player.sendChatMessage(madeUpCommand); return true; } } - public static boolean executeRecipeKeyBind(ItemStack stack) { + @Override + public boolean executeRecipeKeyBind(ItemStack stack) { Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack); if (map.keySet().size() > 0) MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map)); return map.keySet().size() > 0; } - public static boolean executeUsageKeyBind(ItemStack stack) { + @Override + public boolean executeUsageKeyBind(ItemStack stack) { Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack); if (map.keySet().size() > 0) MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map)); return map.keySet().size() > 0; } - public static List<ItemStack> getInventoryItemsTypes() { + @Override + public List<ItemStack> getInventoryItemsTypes() { List<DefaultedList<ItemStack>> field_7543 = ImmutableList.of(MinecraftClient.getInstance().player.inventory.main, MinecraftClient.getInstance().player.inventory.armor, MinecraftClient.getInstance().player.inventory.offHand); List<ItemStack> inventoryStacks = new ArrayList<>(); field_7543.forEach(itemStacks -> itemStacks.forEach(itemStack -> { @@ -139,7 +170,8 @@ public class ClientHelper implements ClientModInitializer { return inventoryStacks; } - public static boolean executeViewAllRecipesKeyBind() { + @Override + public boolean executeViewAllRecipesKeyBind() { Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getAllRecipes(); if (map.keySet().size() > 0) MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map)); @@ -148,15 +180,21 @@ public class ClientHelper implements ClientModInitializer { @Override public void onInitializeClient() { + ClientHelperImpl.instance = (ClientHelperImpl) this; registerFabricKeyBinds(); + modNameCache.put("minecraft", "Minecraft"); + modNameCache.put("c", "Common"); } - private void registerFabricKeyBinds() { + @Override + public void registerFabricKeyBinds() { String category = "key.rei.category"; KeyBindingRegistryImpl.INSTANCE.addCategory(category); - KeyBindingRegistryImpl.INSTANCE.register(RECIPE = FabricKeyBinding.Builder.create(RECIPE_KEYBIND, InputUtil.Type.KEYSYM, 82, category).build()); - KeyBindingRegistryImpl.INSTANCE.register(USAGE = FabricKeyBinding.Builder.create(USAGE_KEYBIND, InputUtil.Type.KEYSYM, 85, category).build()); - KeyBindingRegistryImpl.INSTANCE.register(HIDE = FabricKeyBinding.Builder.create(HIDE_KEYBIND, InputUtil.Type.KEYSYM, 79, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(recipe = FabricKeyBinding.Builder.create(recipeKeybind, InputUtil.Type.KEYSYM, 82, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(usage = FabricKeyBinding.Builder.create(usageKeybind, InputUtil.Type.KEYSYM, 85, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(hide = FabricKeyBinding.Builder.create(hideKeybind, InputUtil.Type.KEYSYM, 79, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(previousPage = FabricKeyBinding.Builder.create(previousPageKeybind, InputUtil.Type.KEYSYM, -1, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(nextPage = FabricKeyBinding.Builder.create(nextPageKeybind, InputUtil.Type.KEYSYM, -1, category).build()); } } diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java index 7ee02b5fe..af100f3fc 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java @@ -11,8 +11,7 @@ public class ConfigObject { @Comment("The ordering of the items on the item panel.") public ItemListOrdering itemListOrdering = ItemListOrdering.registry; - @Comment("The ordering of the items on the item panel.") - public boolean isAscending = true; + @Comment("The ordering of the items on the item panel.") public boolean isAscending = true; @Comment("To toggle the craftable button next to the search field.") public boolean enableCraftableOnlyButton = true; @@ -23,40 +22,34 @@ public class ConfigObject { @Comment("The command used in servers to cheat items") public String giveCommand = "/give {player_name} {item_identifier}{nbt} {count}"; - @Comment("The command used to change gamemode") - public String gamemodeCommand = "/gamemode {gamemode}"; + @Comment("The command used to change gamemode") public String gamemodeCommand = "/gamemode {gamemode}"; - @Comment("The command used to change weather") - public String weatherCommand = "/weather {weather}"; + @Comment("The command used to change weather") public String weatherCommand = "/weather {weather}"; - @Comment("True: item panel on the left, false: on the right") - public boolean mirrorItemPanel = false; + @Comment("True: item panel on the left, false: on the right") public boolean mirrorItemPanel = false; @Comment("To disable REI's default plugin, don't change this unless you understand what you are doing") public boolean loadDefaultPlugin = true; - @Comment("Maximum recipes viewed at one time.") - public int maxRecipePerPage = 3; + @Comment("Maximum recipes viewed at one time.") public int maxRecipePerPage = 3; - @Comment("Toggle utils buttons") - public boolean showUtilsButtons = false; + @Comment("Toggle utils buttons") public boolean showUtilsButtons = false; - @Comment("Disable Recipe Book") - public boolean disableRecipeBook = false; + @Comment("Disable Recipe Book") public boolean disableRecipeBook = false; public boolean preferVisibleRecipes = false; // @Comment("Enable support for old REI plugins which uses registerSpeedCraft") // public boolean enableLegacySpeedCraftSupport = false; - @Comment("Force enable 2019 REI April Fools' joke") - public boolean aprilFoolsFish2019 = false; + @Comment("Force enable 2019 REI April Fools' joke") public boolean aprilFoolsFish2019 = false; public ItemCheatingMode itemCheatingMode = ItemCheatingMode.REI_LIKE; public boolean lightGrayRecipeBorder = false; - @Comment("The location of choose page dialog, will automatically be set to your last location so there is no need to change this.") + @Comment( + "The location of choose page dialog, will automatically be set to your last location so there is no need to change this.") public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5); } 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(); - |
