aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel
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
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')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java2
-rw-r--r--src/main/java/me/shedaniel/rei/api/ClientHelper.java47
-rw-r--r--src/main/java/me/shedaniel/rei/api/DisplayHelper.java8
-rw-r--r--src/main/java/me/shedaniel/rei/api/DisplayVisibility.java5
-rw-r--r--src/main/java/me/shedaniel/rei/api/ItemCheatingMode.java3
-rw-r--r--src/main/java/me/shedaniel/rei/api/PluginFunction.java7
-rw-r--r--src/main/java/me/shedaniel/rei/api/RecipeHelper.java3
-rw-r--r--src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java29
-rw-r--r--src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java (renamed from src/main/java/me/shedaniel/rei/client/ClientHelper.java)98
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigObject.java27
-rw-r--r--src/main/java/me/shedaniel/rei/client/DisplayHelperImpl.java40
-rw-r--r--src/main/java/me/shedaniel/rei/client/ItemListOrdering.java4
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java37
-rw-r--r--src/main/java/me/shedaniel/rei/client/SearchArgument.java7
-rw-r--r--src/main/java/me/shedaniel/rei/client/Weather.java4
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java50
-rw-r--r--src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java16
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingConfig.java7
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java37
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java16
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/LabelWidget.java1
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SearchFieldWidget.java11
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java15
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java3
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinRecipeBookGui.java11
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java9
-rw-r--r--src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java3
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();
- 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.g