aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-03-31 16:35:32 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-03-31 16:35:32 +0800
commit10f18abeb7734eaf45c7b66296b37b6b4b7c289b (patch)
tree01db069006329263cc71c402d3844d4eda789eb4 /src/main/java
parent16e35bc7ddb5924008be5be1b60db29d461d72b5 (diff)
downloadRoughlyEnoughItems-10f18abeb7734eaf45c7b66296b37b6b4b7c289b.tar.gz
RoughlyEnoughItems-10f18abeb7734eaf45c7b66296b37b6b4b7c289b.tar.bz2
RoughlyEnoughItems-10f18abeb7734eaf45c7b66296b37b6b4b7c289b.zip
v2.5.2.76
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/api/DisplaySettings.java8
-rw-r--r--src/main/java/me/shedaniel/rei/api/DisplayVisibility.java5
-rw-r--r--src/main/java/me/shedaniel/rei/api/DisplayVisibilityHandler.java11
-rw-r--r--src/main/java/me/shedaniel/rei/api/PluginFunction.java2
-rw-r--r--src/main/java/me/shedaniel/rei/api/REIPlugin.java11
-rw-r--r--src/main/java/me/shedaniel/rei/api/RecipeCategory.java8
-rw-r--r--src/main/java/me/shedaniel/rei/api/RecipeHelper.java10
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigObject.java3
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java77
-rw-r--r--src/main/java/me/shedaniel/rei/client/ScreenHelper.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java20
-rw-r--r--src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java4
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/DetailedButtonWidget.java41
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java12
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java20
-rw-r--r--src/main/java/me/shedaniel/rei/utils/ClothRegistry.java24
18 files changed, 204 insertions, 58 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/DisplaySettings.java b/src/main/java/me/shedaniel/rei/api/DisplaySettings.java
index 6eb5ef5a6..334d6cc6f 100644
--- a/src/main/java/me/shedaniel/rei/api/DisplaySettings.java
+++ b/src/main/java/me/shedaniel/rei/api/DisplaySettings.java
@@ -12,12 +12,4 @@ public interface DisplaySettings<T extends RecipeDisplay> {
return -1;
}
- default VisableType canDisplay(T display) {
- return VisableType.ALWAYS;
- }
-
- public static enum VisableType {
- ALWAYS, PASS, NEVER;
- }
-
}
diff --git a/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java b/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java
new file mode 100644
index 000000000..231f3efb5
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java
@@ -0,0 +1,5 @@
+package me.shedaniel.rei.api;
+
+public enum DisplayVisibility {
+ ALWAYS_VISIBLE, CONFIG_OPTIONAL, NEVER_VISIBLE, PASS
+}
diff --git a/src/main/java/me/shedaniel/rei/api/DisplayVisibilityHandler.java b/src/main/java/me/shedaniel/rei/api/DisplayVisibilityHandler.java
new file mode 100644
index 000000000..813cfaad6
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/DisplayVisibilityHandler.java
@@ -0,0 +1,11 @@
+package me.shedaniel.rei.api;
+
+public interface DisplayVisibilityHandler {
+
+ default float getPriority() {
+ return 0f;
+ }
+
+ DisplayVisibility handleDisplay(RecipeCategory category, RecipeDisplay display);
+
+}
diff --git a/src/main/java/me/shedaniel/rei/api/PluginFunction.java b/src/main/java/me/shedaniel/rei/api/PluginFunction.java
index bef757db1..098b2293d 100644
--- a/src/main/java/me/shedaniel/rei/api/PluginFunction.java
+++ b/src/main/java/me/shedaniel/rei/api/PluginFunction.java
@@ -1,5 +1,5 @@
package me.shedaniel.rei.api;
public enum PluginFunction {
- REGISTER_ITEMS, REGISTER_CATEGORIES, REGISTER_RECIPE_DISPLAYS, REGISTER_SPEED_CRAFT;
+ REGISTER_ITEMS, REGISTER_CATEGORIES, REGISTER_RECIPE_DISPLAYS, REGISTER_SPEED_CRAFT, REGISTER_OTHERS;
}
diff --git a/src/main/java/me/shedaniel/rei/api/REIPlugin.java b/src/main/java/me/shedaniel/rei/api/REIPlugin.java
index 8dba79269..99c397b85 100644
--- a/src/main/java/me/shedaniel/rei/api/REIPlugin.java
+++ b/src/main/java/me/shedaniel/rei/api/REIPlugin.java
@@ -4,13 +4,16 @@ public interface REIPlugin {
default void onFirstLoad(PluginDisabler pluginDisabler) {}
- void registerItems(ItemRegistry itemRegistry);
+ default void registerItems(ItemRegistry itemRegistry) {}
- void registerPluginCategories(RecipeHelper recipeHelper);
+ default void registerPluginCategories(RecipeHelper recipeHelper) {}
- void registerRecipeDisplays(RecipeHelper recipeHelper);
+ default void registerRecipeDisplays(RecipeHelper recipeHelper) {}
- void registerSpeedCraft(RecipeHelper recipeHelper);
+ @Deprecated
+ default void registerSpeedCraft(RecipeHelper recipeHelper) {}
+
+ default void registerOthers(RecipeHelper recipeHelper) {}
default int getPriority() {
return 0;
diff --git a/src/main/java/me/shedaniel/rei/api/RecipeCategory.java b/src/main/java/me/shedaniel/rei/api/RecipeCategory.java
index 3ddbf84cb..467e74558 100644
--- a/src/main/java/me/shedaniel/rei/api/RecipeCategory.java
+++ b/src/main/java/me/shedaniel/rei/api/RecipeCategory.java
@@ -51,14 +51,6 @@ public interface RecipeCategory<T extends RecipeDisplay> {
};
}
- default boolean canDisplay(RecipeDisplay display) {
- if (getDisplaySettings().canDisplay(display) == DisplaySettings.VisableType.ALWAYS)
- return true;
- if (getDisplaySettings().canDisplay(display) == DisplaySettings.VisableType.NEVER)
- return false;
- return RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes;
- }
-
default int getDisplayHeight() {
return getDisplaySettings().getDisplayHeight(this);
}
diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java
index ac77c241f..42836444f 100644
--- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java
+++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java
@@ -35,10 +35,20 @@ public interface RecipeHelper {
void registerSpeedCraftButtonArea(Identifier category, ButtonAreaSupplier rectangle);
+ void registerDefaultSpeedCraftButtonArea(Identifier category);
+
List<SpeedCraftFunctional> getSpeedCraftFunctional(RecipeCategory category);
void registerSpeedCraftFunctional(Identifier category, SpeedCraftFunctional functional);
Map<RecipeCategory, List<RecipeDisplay>> getAllRecipes();
+ void registerRecipeVisibilityHandler(DisplayVisibilityHandler visibilityHandler);
+
+ void unregisterRecipeVisibilityHandler(DisplayVisibilityHandler visibilityHandler);
+
+ List<DisplayVisibilityHandler> getDisplayVisibilityHandlers();
+
+ boolean isDisplayVisible(RecipeDisplay display, boolean respectConfig);
+
}
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java
index 67d81b5d4..692110c73 100644
--- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java
+++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java
@@ -45,6 +45,9 @@ public class ConfigObject {
public boolean preferVisibleRecipes = false;
+ @Comment("Enable support for old REI plugins which uses registerSpeedCraft")
+ public boolean enableLegacySpeedCraftSupport = false;
+
@Comment("The location of choose page dialog")
public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5);
diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
index 52f5721a8..8e156d85a 100644
--- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
@@ -16,11 +16,17 @@ import java.util.stream.Collectors;
public class RecipeHelperImpl implements RecipeHelper {
+ private static final Comparator VISIBILITY_HANDLER_COMPARATOR = Comparator.comparingDouble(value -> {
+ if (value instanceof DisplayVisibilityHandler)
+ return (double) ((DisplayVisibilityHandler) value).getPriority();
+ return -Double.MAX_VALUE;
+ }).reversed();
private final AtomicInteger recipeCount = new AtomicInteger();
private final Map<Identifier, List<RecipeDisplay>> recipeCategoryListMap = Maps.newHashMap();
private final List<RecipeCategory> categories = Lists.newArrayList();
private final Map<Identifier, ButtonAreaSupplier> speedCraftAreaSupplierMap = Maps.newHashMap();
private final Map<Identifier, List<SpeedCraftFunctional>> speedCraftFunctionalMap = Maps.newHashMap();
+ private final List<DisplayVisibilityHandler> displayVisibilityHandlers = Lists.newArrayList();
private RecipeManager recipeManager;
@Override
@@ -81,8 +87,11 @@ public class RecipeHelperImpl implements RecipeHelper {
Map<RecipeCategory, List<RecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
categories.forEach(category -> {
if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty())
- recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> category.canDisplay(display)).collect(Collectors.toList()));
+ recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList()));
});
+ for(RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet()))
+ if (recipeCategoryListMap.get(category).isEmpty())
+ recipeCategoryListMap.remove(category);
return recipeCategoryListMap;
}
@@ -119,8 +128,11 @@ public class RecipeHelperImpl implements RecipeHelper {
Map<RecipeCategory, List<RecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
categories.forEach(category -> {
if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty())
- recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> category.canDisplay(display)).collect(Collectors.toList()));
+ recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList()));
});
+ for(RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet()))
+ if (recipeCategoryListMap.get(category).isEmpty())
+ recipeCategoryListMap.remove(category);
return recipeCategoryListMap;
}
@@ -132,7 +144,7 @@ public class RecipeHelperImpl implements RecipeHelper {
@Override
public Optional<ButtonAreaSupplier> getSpeedCraftButtonArea(RecipeCategory category) {
if (!speedCraftAreaSupplierMap.containsKey(category.getIdentifier()))
- return Optional.of(bounds -> new Rectangle((int) bounds.getMaxX() - 16, (int) bounds.getMaxY() - 16, 10, 10));
+ return Optional.empty();
return Optional.ofNullable(speedCraftAreaSupplierMap.get(category.getIdentifier()));
}
@@ -142,6 +154,11 @@ public class RecipeHelperImpl implements RecipeHelper {
}
@Override
+ public void registerDefaultSpeedCraftButtonArea(Identifier category) {
+ registerSpeedCraftButtonArea(category, bounds -> new Rectangle((int) bounds.getMaxX() - 16, (int) bounds.getMaxY() - 16, 10, 10));
+ }
+
+ @Override
public List<SpeedCraftFunctional> getSpeedCraftFunctional(RecipeCategory category) {
if (speedCraftFunctionalMap.get(category.getIdentifier()) == null)
return Lists.newArrayList();
@@ -163,6 +180,8 @@ public class RecipeHelperImpl implements RecipeHelper {
this.categories.clear();
this.speedCraftAreaSupplierMap.clear();
this.speedCraftFunctionalMap.clear();
+ this.displayVisibilityHandlers.clear();
+
List<REIPlugin> plugins = new LinkedList<>(RoughlyEnoughItemsCore.getPlugins());
plugins.sort((first, second) -> {
return second.getPriority() - first.getPriority();
@@ -181,9 +200,23 @@ public class RecipeHelperImpl implements RecipeHelper {
plugin.registerPluginCategories(this);
if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_RECIPE_DISPLAYS))
plugin.registerRecipeDisplays(this);
- if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_SPEED_CRAFT))
+ if (RoughlyEnoughItemsCore.getConfigManager().getConfig().enableLegacySpeedCraftSupport && pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_SPEED_CRAFT))
plugin.registerSpeedCraft(this);
+ if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_OTHERS))
+ plugin.registerOthers(this);
});
+ if (getDisplayVisibilityHandlers().size() == 0)
+ registerRecipeVisibilityHandler(new DisplayVisibilityHandler() {
+ @Override
+ public DisplayVisibility handleDisplay(RecipeCategory category, RecipeDisplay display) {
+ return DisplayVisibility.ALWAYS_VISIBLE;
+ }
+
+ @Override
+ public float getPriority() {
+ return -1f;
+ }
+ });
RoughlyEnoughItemsCore.LOGGER.info("[REI] Registered Categories: " + String.join(", ", categories.stream().map(RecipeCategory::getCategoryName).collect(Collectors.toList())));
RoughlyEnoughItemsCore.LOGGER.info("[REI] Registered %d recipes.", recipeCount.get());
}
@@ -200,9 +233,43 @@ public class RecipeHelperImpl implements RecipeHelper {
recipeCategoryListMap.forEach((identifier, recipeDisplays) -> tempMap.put(identifier, new LinkedList<>(recipeDisplays)));
categories.forEach(category -> {
if (tempMap.containsKey(category.getIdentifier()))
- map.put(category, tempMap.get(category.getIdentifier()).stream().filter(display -> category.canDisplay(display)).collect(Collectors.toList()));
+ map.put(category, tempMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList()));
});
+ for(RecipeCategory category : Lists.newArrayList(map.keySet()))
+ if (map.get(category).isEmpty())
+ map.remove(category);
return map;
}
+ @Override
+ public void registerRecipeVisibilityHandler(DisplayVisibilityHandler visibilityHandler) {
+ displayVisibilityHandlers.add(visibilityHandler);
+ }
+
+ @Override
+ public void unregisterRecipeVisibilityHandler(DisplayVisibilityHandler visibilityHandler) {
+ displayVisibilityHandlers.remove(visibilityHandler);
+ }
+
+ @Override
+ public List<DisplayVisibilityHandler> getDisplayVisibilityHandlers() {
+ return Collections.unmodifiableList(displayVisibilityHandlers);
+ }
+
+ @Override
+ public boolean isDisplayVisible(RecipeDisplay display, boolean respectConfig) {
+ RecipeCategory category = getCategory(display.getRecipeCategory());
+ List<DisplayVisibilityHandler> list = Lists.newArrayList(getDisplayVisibilityHandlers());
+ list.sort((o1, o2) -> VISIBILITY_HANDLER_COMPARATOR.compare(o1, o2));
+ for(DisplayVisibilityHandler displayVisibilityHandler : list) {
+ DisplayVisibility visibility = displayVisibilityHandler.handleDisplay(category, display);
+ if (visibility != DisplayVisibility.PASS) {
+ if (visibility == DisplayVisibility.CONFIG_OPTIONAL)
+ return RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes || !respectConfig;
+ return visibility == DisplayVisibility.ALWAYS_VISIBLE;
+ }
+ }
+ return true;
+ }
+
}
diff --git a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java
index a0bb52ae4..4f7f62156 100644
--- a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java
@@ -34,7 +34,7 @@ public class ScreenHelper implements ClientModInitializer {
public static ContainerScreenOverlay getLastOverlay(boolean reset, boolean setPage) {
if (overlay == null || reset) {
overlay = new ContainerScreenOverlay();
- overlay.onInitialized(setPage);
+ overlay.init(setPage);
}
return overlay;
}
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index 1963f7f4c..6f47615c0 100644
--- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -36,7 +36,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
public static String searchTerm = "";
private static int page = 0;
private static ItemListOverlay itemListOverlay;
- private final List<Widget> widgets = Lists.newArrayList();
+ private final List<Widget> widgets = Lists.newLinkedList();
private Rectangle rectangle;
private Window window;
private ButtonWidget buttonLeft, buttonRight;
@@ -46,18 +46,18 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
return itemListOverlay;
}
- public void onInitialized() {
- onInitialized(false);
+ public void init() {
+ init(false);
}
- public void onInitialized(boolean setPage) {
+ public void init(boolean setPage) {
//Update Variables
- this.widgets.clear();
+ this.children().clear();
this.window = MinecraftClient.getInstance().window;
this.rectangle = calculateBoundary();
this.lastLeft = getLeft();
widgets.add(this.itemListOverlay = new ItemListOverlay(page));
- this.itemListOverlay.updateList(getItemListArea(), page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
widgets.add(buttonLeft = new ButtonWidget(rectangle.x, rectangle.y + 5, 16, 16, new TranslatableTextComponent("text.rei.left_arrow")) {
@Override
@@ -313,7 +313,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
public void render(int mouseX, int mouseY, float partialTicks) {
List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes();
if (getLeft() != lastLeft)
- onInitialized(true);
+ init(true);
else if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && (!hasSameListContent(new LinkedList<>(ScreenHelper.inventoryStacks), currentStacks) || (currentStacks.size() != ScreenHelper.inventoryStacks.size()))) {
ScreenHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes();
itemListOverlay.updateList(getItemListArea(), page, searchTerm);
@@ -441,10 +441,10 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
public boolean charTyped(char char_1, int int_1) {
if (!ScreenHelper.isOverlayVisible())
return false;
- for(Element listener : children())
+ for(Element listener : widgets)
if (listener.charTyped(char_1, int_1))
return true;
- return super.charTyped(char_1, int_1);
+ return false;
}
@Override
@@ -456,7 +456,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
public boolean mouseClicked(double double_1, double double_2, int int_1) {
if (!ScreenHelper.isOverlayVisible())
return false;
- for(Element element : this.children()) {
+ for(Element element : widgets) {
if (element.mouseClicked(double_1, double_2, int_1)) {
this.method_20084(element);
if (int_1 == 0)
diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
index 06ed3f6ec..71c509d2e 100644
--- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
+++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
@@ -83,7 +83,7 @@ public class RecipeViewingScreen extends Screen {
}
if ((int_1 == 256 || this.minecraft.options.keyInventory.matchesKey(int_1, int_2)) && this.shouldCloseOnEsc()) {
MinecraftClient.getInstance().openScreen(ScreenHelper.getLastContainerScreen());
- ScreenHelper.getLastOverlay().onInitialized();
+ ScreenHelper.getLastOverlay().init();
return true;
}
if (int_1 == 258) {
diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
index 56eeceb4e..f4df73aad 100644
--- a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
+++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
@@ -23,7 +23,7 @@ public class CreditsScreen extends Screen {
if (int_1 == 256 && this.shouldCloseOnEsc()) {
this.minecraft.openScreen(parent);
if (parent instanceof ContainerScreen)
- ScreenHelper.getLastOverlay().onInitialized();
+ ScreenHelper.getLastOverlay().init();
return true;
}
return super.keyPressed(int_1, int_2, int_3);
@@ -40,7 +40,7 @@ public class CreditsScreen extends Screen {
@Override
public void onPressed() {
CreditsScreen.this.minecraft.openScreen(parent);
- ScreenHelper.getLastOverlay().onInitialized();
+ ScreenHelper.getLastOverlay().init();
}
});
}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/DetailedButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/DetailedButtonWidget.java
new file mode 100644
index 000000000..a3f4308e8
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/widget/DetailedButtonWidget.java
@@ -0,0 +1,41 @@
+package me.shedaniel.rei.gui.widget;
+
+import net.minecraft.text.TextComponent;
+
+import java.awt.*;
+
+public class DetailedButtonWidget extends ButtonWidget {
+
+ private DetailedButtonWidget.PressAction pressAction;
+
+ public DetailedButtonWidget(Rectangle rectangle, TextComponent text, PressAction pressAction) {
+ super(rectangle, text);
+ this.pressAction = pressAction;
+ }
+
+ public DetailedButtonWidget(Rectangle rectangle, String text, PressAction pressAction) {
+ super(rectangle, text);
+ this.pressAction = pressAction;
+ }
+
+ public DetailedButtonWidget(int x, int y, int width, int height, String text, PressAction pressAction) {
+ super(x, y, width, height, text);
+ this.pressAction = pressAction;
+ }
+
+ public DetailedButtonWidget(int x, int y, int width, int height, TextComponent text, PressAction pressAction) {
+ super(x, y, width, height, text);
+ this.pressAction = pressAction;
+ }
+
+ @Override
+ public void onPressed() {
+ if (pressAction != null)
+ pressAction.onPress(this);
+ }
+
+ public interface PressAction {
+ void onPress(ButtonWidget var1);
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
index 4f4ee1280..3edb82f1b 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
@@ -80,10 +80,10 @@ public class ItemListOverlay extends Widget {
public void updateList(Rectangle bounds, int page, String searchTerm) {
this.rectangle = bounds;
- this.widgets = Lists.newLinkedList();
- currentDisplayed = processSearchTerm(searchTerm, RoughlyEnoughItemsCore.getItemRegisterer().getItemList(), ScreenHelper.inventoryStacks);
this.page = page;
+ this.widgets = Lists.newLinkedList();
calculateListSize(rectangle);
+ currentDisplayed = processSearchTerm(searchTerm, RoughlyEnoughItemsCore.getItemRegisterer().getItemList(), ScreenHelper.inventoryStacks);
double startX = rectangle.getCenterX() - width * 9;
double startY = rectangle.getCenterY() - height * 9;
this.listArea = new Rectangle((int) startX, (int) startY, width * 18, height * 18);
@@ -91,7 +91,7 @@ public class ItemListOverlay extends Widget {
int j = i + page * getTotalSlotsPerPage();
if (j >= currentDisplayed.size())
break;
- ItemSlotWidget slotWidget = new ItemSlotWidget((int) (startX + (i % width) * 18), (int) (startY + MathHelper.floor(i / width) * 18), Collections.singletonList(currentDisplayed.get(j)), false, true, true) {
+ widgets.add(new ItemSlotWidget((int) (startX + (i % width) * 18), (int) (startY + MathHelper.floor(i / width) * 18), Collections.singletonList(currentDisplayed.get(j)), false, true, true) {
@Override
protected void drawToolTip(ItemStack itemStack, float delta) {
ClientPlayerEntity player = minecraft.player;
@@ -115,9 +115,7 @@ public class ItemListOverlay extends Widget {
}
return false;
}
- };
- if (true || this.rectangle.contains(slotWidget.getBounds()))
- widgets.add(slotWidget);
+ });
}
}
@@ -220,7 +218,7 @@ public class ItemListOverlay extends Widget {
return true;
}
- private void calculateListSize(Rectangle rect) {
+ public void calculateListSize(Rectangle rect) {
int xOffset = 0, yOffset = 0;
width = 0;
height = 0;
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
index 163051989..27af72a3a 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
@@ -23,7 +23,7 @@ public class SpeedCraftingButtonWidget extends ButtonWidget {
@Override
public void onPressed() {
minecraft.openScreen(ScreenHelper.getLastContainerScreen());
- ScreenHelper.getLastOverlay().onInitialized();
+ ScreenHelper.getLastOverlay().init();
functional.performAutoCraft(ScreenHelper.getLastContainerScreen(), displaySupplier.get());
}
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index 139d46485..07d2506ee 100644
--- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
@@ -122,10 +122,22 @@ public class DefaultPlugin implements REIPlugin {
}
@Override
- public void registerSpeedCraft(RecipeHelper recipeHelper) {
- recipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.CAMPFIRE, null);
- recipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.STONE_CUTTING, null);
- recipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.BREWING, null);
+ public void registerOthers(RecipeHelper recipeHelper) {
+ recipeHelper.registerRecipeVisibilityHandler(new DisplayVisibilityHandler() {
+ @Override
+ public DisplayVisibility handleDisplay(RecipeCategory category, RecipeDisplay display) {
+ return DisplayVisibility.ALWAYS_VISIBLE;
+ }
+
+ @Override
+ public float getPriority() {
+ return -1f;
+ }
+ });
+ recipeHelper.registerDefaultSpeedCraftButtonArea(DefaultPlugin.CRAFTING);
+ recipeHelper.registerDefaultSpeedCraftButtonArea(DefaultPlugin.SMELTING);
+ recipeHelper.registerDefaultSpeedCraftButtonArea(DefaultPlugin.SMOKING);
+ recipeHelper.registerDefaultSpeedCraftButtonArea(DefaultPlugin.BLASTING);
recipeHelper.registerSpeedCraftFunctional(DefaultPlugin.CRAFTING, new SpeedCraftFunctional<DefaultCraftingDisplay>() {
@Override
public Class[] getFunctioningFor() {
diff --git a/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java b/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
index c8450200c..611a62811 100644
--- a/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
+++ b/src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
@@ -1,5 +1,6 @@
package me.shedaniel.rei.utils;
+import com.google.common.collect.Lists;
import javafx.util.Pair;
import me.shedaniel.cloth.api.ClientUtils;
import me.shedaniel.cloth.api.ConfigScreenBuilder;
@@ -16,8 +17,10 @@ import me.shedaniel.rei.gui.config.ItemListOrderingEntry;
import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Screen;
import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
+import net.minecraft.client.gui.ingame.PlayerInventoryScreen;
import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.item.ItemGroup;
@@ -38,13 +41,21 @@ public class ClothRegistry {
});
ClothClientHooks.SCREEN_INIT_POST.register((minecraftClient, screen, screenHooks) -> {
if (screen instanceof ContainerScreen) {
- if (screen instanceof CreativePlayerInventoryScreen) {
- CreativePlayerInventoryScreenHooks creativePlayerInventoryScreenHooks = (CreativePlayerInventoryScreenHooks) screen;
- if (creativePlayerInventoryScreenHooks.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
+ if (screen instanceof CreativePlayerInventoryScreen)
+ if (((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
return;
- }
+ if (screen instanceof PlayerInventoryScreen && minecraftClient.interactionManager.hasCreativeInventory())
+ return;
ScreenHelper.setLastContainerScreen((ContainerScreen) screen);
- screenHooks.cloth_getInputListeners().add(ScreenHelper.getLastOverlay(true, false));
+ boolean alreadyAdded = false;
+ for(Element element : Lists.newArrayList(screenHooks.cloth_getInputListeners()))