From aa60fa3edadfbe3be18cbff9092db749fbb4bb97 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 3 Jun 2019 12:06:24 +0800 Subject: Fix Craftable Filter having items of the player inventory --- .../shedaniel/rei/gui/widget/ItemListOverlay.java | 74 ++++++++++------------ .../shedaniel/rei/gui/widget/ItemSlotWidget.java | 4 ++ 2 files changed, 39 insertions(+), 39 deletions(-) (limited to 'src/main') 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 03be6d686..ff903278a 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java @@ -97,6 +97,39 @@ public class ItemListOverlay extends Widget { return "ERROR"; } + public static boolean filterItem(ItemStack itemStack, List arguments) { + if (arguments.isEmpty()) + return true; + String mod = ClientHelper.getInstance().getModFromItem(itemStack.getItem()).toLowerCase(); + String tooltips = tryGetItemStackToolTip(itemStack, true).stream().skip(1).collect(Collectors.joining("")).replace(SPACE, EMPTY).toLowerCase(); + String name = tryGetItemStackName(itemStack).replace(SPACE, EMPTY).toLowerCase(); + for(SearchArgument[] arguments1 : arguments) { + boolean b = true; + for(SearchArgument argument : arguments1) { + if (argument.getArgumentType().equals(SearchArgument.ArgumentType.ALWAYS)) + return true; + if (argument.getArgumentType().equals(SearchArgument.ArgumentType.MOD)) + if (SearchArgument.getFunction(!argument.isInclude()).apply(mod.indexOf(argument.getText()))) { + b = false; + break; + } + if (argument.getArgumentType().equals(SearchArgument.ArgumentType.TOOLTIP)) + if (SearchArgument.getFunction(!argument.isInclude()).apply(tooltips.indexOf(argument.getText()))) { + b = false; + break; + } + if (argument.getArgumentType().equals(SearchArgument.ArgumentType.TEXT)) + if (SearchArgument.getFunction(!argument.isInclude()).apply(name.indexOf(argument.getText()))) { + b = false; + break; + } + } + if (b) + return true; + } + return false; + } + public int getFullTotalSlotsPerPage() { return width * height; } @@ -242,13 +275,9 @@ public class ItemListOverlay extends Widget { lastSearchArgument.add(new SearchArgument[]{SearchArgument.ALWAYS}); }); os.stream().filter(itemStack -> filterItem(itemStack, lastSearchArgument)).forEachOrdered(stacks::add); - List workingItems = RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && !stacks.isEmpty() && !inventoryItems.isEmpty() ? Lists.newArrayList() : Lists.newArrayList(ol); - if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled()) { - RecipeHelper.getInstance().findCraftableByItems(inventoryItems).forEach(workingItems::add); - workingItems.addAll(inventoryItems); - } - if (!RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled()) + if (!RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() || stacks.isEmpty() || inventoryItems.isEmpty()) return stacks; + List workingItems = Lists.newArrayList(RecipeHelper.getInstance().findCraftableByItems(inventoryItems)); return stacks.stream().filter(itemStack -> workingItems.stream().anyMatch(stack -> stack.isEqualIgnoreTags(itemStack))).collect(Collectors.toList()); } @@ -256,39 +285,6 @@ public class ItemListOverlay extends Widget { return lastSearchArgument; } - public static boolean filterItem(ItemStack itemStack, List arguments) { - if (arguments.isEmpty()) - return true; - String mod = ClientHelper.getInstance().getModFromItem(itemStack.getItem()).toLowerCase(); - String tooltips = tryGetItemStackToolTip(itemStack, true).stream().skip(1).collect(Collectors.joining("")).replace(SPACE, EMPTY).toLowerCase(); - String name = tryGetItemStackName(itemStack).replace(SPACE, EMPTY).toLowerCase(); - for(SearchArgument[] arguments1 : arguments) { - boolean b = true; - for(SearchArgument argument : arguments1) { - if (argument.getArgumentType().equals(SearchArgument.ArgumentType.ALWAYS)) - return true; - if (argument.getArgumentType().equals(SearchArgument.ArgumentType.MOD)) - if (SearchArgument.getFunction(!argument.isInclude()).apply(mod.indexOf(argument.getText()))) { - b = false; - break; - } - if (argument.getArgumentType().equals(SearchArgument.ArgumentType.TOOLTIP)) - if (SearchArgument.getFunction(!argument.isInclude()).apply(tooltips.indexOf(argument.getText()))) { - b = false; - break; - } - if (argument.getArgumentType().equals(SearchArgument.ArgumentType.TEXT)) - if (SearchArgument.getFunction(!argument.isInclude()).apply(name.indexOf(argument.getText()))) { - b = false; - break; - } - } - if (b) - return true; - } - return false; - } - private boolean filterItem(ItemStack itemStack, SearchArgument... arguments) { if (arguments.length == 0) return true; diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java index c5bdb84c2..60b83b611 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java @@ -11,6 +11,10 @@ import net.minecraft.item.ItemStack; import java.util.Collection; import java.util.List; +/** + * @deprecated Use {@link SlotWidget} + */ +@Deprecated public class ItemSlotWidget extends SlotWidget { public ItemSlotWidget(int x, int y, ItemStack itemStack, boolean drawBackground, boolean showToolTips) { super(x, y, itemStack, drawBackground, showToolTips); -- cgit From e6dfba86eab967b6b8ba53b448f9346bcff8bcdd Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 3 Jun 2019 14:56:52 +0800 Subject: Better buttons --- .../rei/gui/renderables/SimpleRecipeRenderer.java | 45 ++++++++++++++++----- .../textures/gui/recipecontainer.png | Bin 7332 -> 7393 bytes 2 files changed, 36 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/me/shedaniel/rei/gui/renderables/SimpleRecipeRenderer.java b/src/main/java/me/shedaniel/rei/gui/renderables/SimpleRecipeRenderer.java index 422b0e447..71fd9a4a4 100644 --- a/src/main/java/me/shedaniel/rei/gui/renderables/SimpleRecipeRenderer.java +++ b/src/main/java/me/shedaniel/rei/gui/renderables/SimpleRecipeRenderer.java @@ -15,6 +15,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.Pair; import net.minecraft.util.math.MathHelper; +import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; @@ -23,6 +24,19 @@ import java.util.stream.Collectors; public class SimpleRecipeRenderer extends RecipeRenderer { + public static final Comparator ITEM_STACK_COMPARATOR = (o1, o2) -> { + if (o1.getItem() == o2.getItem()) { + if (o1.getAmount() != o2.getAmount()) + return o1.getAmount() - o2.getAmount(); + int compare = Boolean.compare(o1.hasTag(), o2.hasTag()); + if (compare != 0) + return compare; + if (o1.getTag().getSize() != o2.getTag().getSize()) + return o1.getTag().getSize() - o2.getTag().getSize(); + return o1.getTag().hashCode() - o2.getTag().hashCode(); + } + return o1.getItem().hashCode() - o2.getItem().hashCode(); + }; private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private List inputRenderer; private ItemStackRenderer outputRenderer; @@ -31,7 +45,7 @@ public class SimpleRecipeRenderer extends RecipeRenderer { List, AtomicInteger>> newList = Lists.newArrayList(); List, Integer>> a = input.get().stream().map(stacks -> new Pair<>(stacks, stacks.stream().map(ItemStack::getAmount).max(Integer::compareTo).orElse(1))).collect(Collectors.toList()); for(Pair, Integer> pair : a) { - Optional, AtomicInteger>> any = newList.stream().filter(pairr -> pair.getLeft().equals(pairr.getLeft())).findAny(); + Optional, AtomicInteger>> any = newList.stream().filter(pairr -> equalsList(pair.getLeft(), pairr.getLeft())).findAny(); if (any.isPresent()) { any.get().getRight().addAndGet(pair.getRight()); } else @@ -48,9 +62,22 @@ public class SimpleRecipeRenderer extends RecipeRenderer { this.outputRenderer = Renderable.fromItemStacks(output.get().stream().filter(stack -> !stack.isEmpty()).collect(Collectors.toList())); } + public static boolean equalsList(List list_1, List list_2) { + List stacks_1 = list_1.stream().distinct().sorted(ITEM_STACK_COMPARATOR).collect(Collectors.toList()); + List stacks_2 = list_2.stream().distinct().sorted(ITEM_STACK_COMPARATOR).collect(Collectors.toList()); + if (stacks_1.equals(stacks_2)) + return true; + if (stacks_1.size() != stacks_2.size()) + return false; + for(int i = 0; i < stacks_1.size(); i++) + if (!stacks_1.get(i).isEqualIgnoreTags(stacks_2.get(i))) + return false; + return true; + } + @Override public void render(int x, int y, double mouseX, double mouseY, float delta) { - int xx = x + 5, yy = y + 5; + int xx = x + 4, yy = y + 2; int j = 0; int itemsPerLine = getItemsPerLine(); for(ItemStackRenderer itemStackRenderer : inputRenderer) { @@ -59,18 +86,18 @@ public class SimpleRecipeRenderer extends RecipeRenderer { itemStackRenderer.render(xx + 8, yy + 6, mouseX, mouseY, delta); xx += 18; j++; - if (j >= getItemsPerLine() - 3) { + if (j >= getItemsPerLine() - 2) { yy += 18; xx = x + 5; j = 0; } } - xx = x + 5 + 18 * (getItemsPerLine() - 3); + xx = x + 5 + 18 * (getItemsPerLine() - 2); yy = y + getHeight() / 2 - 8; GuiLighting.disable(); MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); - blit(xx, yy, 0, 28, 36, 18); - xx += 36; + blit(xx, yy, 0, 28, 18, 18); + xx += 18; outputRenderer.setBlitOffset(getBlitOffset() + 50); outputRenderer.drawTooltip = MinecraftClient.getInstance().currentScreen instanceof VillagerRecipeViewingScreen; outputRenderer.render(xx + 8, yy + 6, mouseX, mouseY, delta); @@ -78,15 +105,15 @@ public class SimpleRecipeRenderer extends RecipeRenderer { @Override public int getHeight() { - return 10 + getItemsHeight() * 18; + return 4 + getItemsHeight() * 18; } public int getItemsHeight() { - return MathHelper.ceil(((float) inputRenderer.size()) / (getItemsPerLine() - 3)); + return MathHelper.ceil(((float) inputRenderer.size()) / (getItemsPerLine() - 2)); } public int getItemsPerLine() { - return MathHelper.floor((getWidth() - 10f) / 18f); + return MathHelper.floor((getWidth() - 4f) / 18f); } } diff --git a/src/main/resources/assets/roughlyenoughitems/textures/gui/recipecontainer.png b/src/main/resources/assets/roughlyenoughitems/textures/gui/recipecontainer.png index 59e606de1..66a44dc2e 100755 Binary files a/src/main/resources/assets/roughlyenoughitems/textures/gui/recipecontainer.png and b/src/main/resources/assets/roughlyenoughitems/textures/gui/recipecontainer.png differ -- cgit From e61b1e86e6fe8949616a3dbea14ba3ee7ce31b32 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 3 Jun 2019 16:21:48 +0800 Subject: Scrollbar --- .../rei/gui/VillagerRecipeViewingScreen.java | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) (limited to 'src/main') diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java index 468c3b734..9233fbbfc 100644 --- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java @@ -18,7 +18,10 @@ import net.minecraft.ChatFormat; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.GuiLighting; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormats; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.network.chat.TextComponent; @@ -46,6 +49,10 @@ public class VillagerRecipeViewingScreen extends Screen { public Rectangle bounds, scrollListBounds; private int selectedCategoryIndex, selectedRecipeIndex; private double scroll; + private float scrollBarAlpha = 0; + private float scrollBarAlphaFuture = 0; + private long scrollBarAlphaFutureTime = -1; + private boolean draggingScrollBar = false; private int tabsPage; public VillagerRecipeViewingScreen(Map> map) { @@ -54,7 +61,10 @@ public class VillagerRecipeViewingScreen extends Screen { this.categoryMap = Maps.newLinkedHashMap(); this.selectedCategoryIndex = 0; this.selectedRecipeIndex = 0; + this.scrollBarAlpha = 0; + this.scrollBarAlphaFuture = 0; this.scroll = 0; + this.draggingScrollBar = false; this.tabsPage = 0; this.categories = Lists.newArrayList(); this.buttonWidgets = Lists.newArrayList(); @@ -71,6 +81,7 @@ public class VillagerRecipeViewingScreen extends Screen { @Override protected void init() { super.init(); + this.draggingScrollBar = false; this.children.clear(); this.widgets.clear(); this.buttonWidgets.clear(); @@ -193,6 +204,22 @@ public class VillagerRecipeViewingScreen extends Screen { ScreenHelper.getLastOverlay().init(); } + @Override + public boolean mouseClicked(double mouseX, double mouseY, int int_1) { + double height = buttonWidgets.stream().map(ButtonWidget::getBounds).collect(Collectors.summingDouble(Rectangle::getHeight)); + int actualHeight = scrollListBounds.height - 2; + if (height > actualHeight && scrollBarAlpha > 0 && mouseY >= scrollListBounds.y + 1 && mouseY <= scrollListBounds.getMaxY() - 1) { + double scrollbarPositionMinX = scrollListBounds.getMaxX() - 6; + if (mouseX >= scrollbarPositionMinX & mouseX <= scrollbarPositionMinX + 8) { + this.draggingScrollBar = true; + scrollBarAlpha = 1; + return false; + } + } + this.draggingScrollBar = false; + return super.mouseClicked(mouseX, mouseY, int_1); + } + @Override public boolean mouseScrolled(double double_1, double double_2, double double_3) { double height = buttonWidgets.stream().map(ButtonWidget::getBounds).collect(Collectors.summingDouble(Rectangle::getHeight)); @@ -202,6 +229,9 @@ public class VillagerRecipeViewingScreen extends Screen { else scroll += 16; scroll = MathHelper.clamp(scroll, 0, height - scrollListBounds.height + 2); + if (scrollBarAlphaFuture == 0) + scrollBarAlphaFuture = 1f; + scrollBarAlphaFutureTime = System.currentTimeMillis(); return true; } for(Element listener : children()) @@ -226,6 +256,24 @@ public class VillagerRecipeViewingScreen extends Screen { @Override public void render(int mouseX, int mouseY, float delta) { + if (scrollBarAlphaFutureTime > 0) { + long l = System.currentTimeMillis() - scrollBarAlphaFutureTime; + if (l > 300f) { + if (scrollBarAlphaFutureTime == 0) { + scrollBarAlpha = scrollBarAlphaFuture; + scrollBarAlphaFutureTime = -1; + } else if (l > 2000f && scrollBarAlphaFuture == 1) { + scrollBarAlphaFuture = 0; + scrollBarAlphaFutureTime = System.currentTimeMillis(); + } else + scrollBarAlpha = scrollBarAlphaFuture; + } else { + if (scrollBarAlphaFuture == 0) + scrollBarAlpha = Math.min(scrollBarAlpha, 1 - Math.min(1f, l / 300f)); + else if (scrollBarAlphaFuture == 1) + scrollBarAlpha = Math.max(Math.min(1f, l / 300f), scrollBarAlpha); + } + } this.fillGradient(0, 0, this.width, this.height, -1072689136, -804253680); int yOffset = 0; this.widgets.forEach(widget -> { @@ -253,11 +301,56 @@ public class VillagerRecipeViewingScreen extends Screen { recipeRenderers.get(i).render(buttonWidgets.get(i).getBounds().x, buttonWidgets.get(i).getBounds().y, mouseX, mouseY, delta); } } + double height = buttonWidgets.stream().map(ButtonWidget::getBounds).collect(Collectors.summingDouble(Rectangle::getHeight)); + if (height > scrollListBounds.height - 2) { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBufferBuilder(); + double maxScroll = height - scrollListBounds.height + 2; + int scrollBarHeight = MathHelper.floor((scrollListBounds.height - 2) * (scrollListBounds.height - 2) / maxScroll); + scrollBarHeight = MathHelper.clamp(scrollBarHeight, 32, scrollListBounds.height - 2 - 8); + int minY = (int) (scroll * (scrollListBounds.height - 2 - scrollBarHeight) / maxScroll) + scrollListBounds.y + 1; + if (minY < this.scrollListBounds.y + 1) + minY = this.scrollListBounds.y + 1; + double scrollbarPositionMinX = scrollListBounds.getMaxX() - 6, scrollbarPositionMaxX = scrollListBounds.getMaxX() - 2; + GuiLighting.disable(); + GlStateManager.disableTexture(); + GlStateManager.enableBlend(); + GlStateManager.disableAlphaTest(); + GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.shadeModel(7425); + buffer.begin(7, VertexFormats.POSITION_COLOR); + buffer.vertex(scrollbarPositionMinX, minY + scrollBarHeight, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); + buffer.vertex(scrollbarPositionMaxX, minY + scrollBarHeight, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); + buffer.vertex(scrollbarPositionMaxX, minY, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); + buffer.vertex(scrollbarPositionMinX, minY, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); + tessellator.draw(); + GlStateManager.shadeModel(7424); + GlStateManager.disableBlend(); + GlStateManager.enableAlphaTest(); + GlStateManager.enableTexture(); + } Scissors.end(); GlStateManager.popMatrix(); ScreenHelper.getLastOverlay().lateRender(mouseX, mouseY, delta); } + @Override + public boolean mouseDragged(double mouseX, double mouseY, int int_1, double double_3, double double_4) { + if (int_1 == 0 && scrollBarAlpha > 0 && draggingScrollBar) { + double height = buttonWidgets.stream().map(ButtonWidget::getBounds).collect(Collectors.summingDouble(Rectangle::getHeight)); + int actualHeight = scrollListBounds.height - 2; + if (height > actualHeight && mouseY >= scrollListBounds.y + 1 && mouseY <= scrollListBounds.getMaxY() - 1) { + int int_3 = MathHelper.clamp((int) ((actualHeight * actualHeight) / height), 32, actualHeight - 8); + double double_6 = Math.max(1.0D, Math.max(1d, height) / (double) (actualHeight - int_3)); + scrollBarAlphaFutureTime = System.currentTimeMillis(); + scrollBarAlphaFuture = 1f; + scroll = MathHelper.clamp(scroll + double_4 * double_6, 0, height - scrollListBounds.height + 2); + return true; + } + } + return super.mouseDragged(mouseX, mouseY, int_1, double_3, double_4); + } + private int getReal(int i) { return (int) (i / ((double) minecraft.window.getScaledWidth() / (double) minecraft.window.getWidth())); } -- cgit From 9fd25621c2b9993666ce8e00bacbe52a18136b95 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 3 Jun 2019 17:33:19 +0800 Subject: Remove Perfer Visible Recipes --- .../java/me/shedaniel/rei/api/DisplayVisibility.java | 2 +- .../shedaniel/rei/api/DisplayVisibilityHandler.java | 1 - src/main/java/me/shedaniel/rei/api/RecipeHelper.java | 10 ++++++++++ .../java/me/shedaniel/rei/client/ConfigObject.java | 2 -- .../me/shedaniel/rei/client/RecipeHelperImpl.java | 20 ++++++++++++-------- .../me/shedaniel/rei/utils/ClothScreenRegistry.java | 1 - 6 files changed, 23 insertions(+), 13 deletions(-) (limited to 'src/main') diff --git a/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java b/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java index 8f1149e26..0bfdb024c 100644 --- a/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java +++ b/src/main/java/me/shedaniel/rei/api/DisplayVisibility.java @@ -7,7 +7,7 @@ package me.shedaniel.rei.api; public enum DisplayVisibility { ALWAYS_VISIBLE, - CONFIG_OPTIONAL, + @Deprecated 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 index 8f6156891..429306ff2 100644 --- a/src/main/java/me/shedaniel/rei/api/DisplayVisibilityHandler.java +++ b/src/main/java/me/shedaniel/rei/api/DisplayVisibilityHandler.java @@ -20,7 +20,6 @@ public interface DisplayVisibilityHandler { * Handles the visibility of the display. * {@link DisplayVisibility#PASS} to pass the handling to another handler * {@link DisplayVisibility#ALWAYS_VISIBLE} to always display it - * {@link DisplayVisibility#CONFIG_OPTIONAL} to allow user to configure the visibility * {@link DisplayVisibility#NEVER_VISIBLE} to never display it * * @param category the category of the display diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java index a57b7146f..5a5c1b4a2 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java @@ -162,9 +162,19 @@ public interface RecipeHelper { * @param display the display to be checked * @param respectConfig whether it should respect the user's config * @return whether the display should be visible + * @deprecated {@link RecipeHelper#isDisplayVisible(RecipeDisplay)} )} */ + @Deprecated boolean isDisplayVisible(RecipeDisplay display, boolean respectConfig); + /** + * Checks if the display is visible by asking recipe visibility handlers + * + * @param display the display to be checked + * @return whether the display should be visible + */ + boolean isDisplayVisible(RecipeDisplay display); + /** * Gets the cached category setting by the category identifier * diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java index 4cde9df00..7b490bc52 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java @@ -42,8 +42,6 @@ public class ConfigObject { @Comment("Disable Recipe Book") public boolean disableRecipeBook = false; - public boolean preferVisibleRecipes = false; - @Comment("Force enable 2019 REI April Fools' joke") public boolean aprilFoolsFish2019 = false; public ItemCheatingMode itemCheatingMode = ItemCheatingMode.REI_LIKE; diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index f7891670f..ec922d4c8 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -106,7 +106,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> 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 -> isDisplayVisible(display, true)).collect(Collectors.toList())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList())); }); for(RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet())) if (recipeCategoryListMap.get(category).isEmpty()) @@ -149,7 +149,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> 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 -> isDisplayVisible(display, true)).collect(Collectors.toList())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList())); }); for(RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet())) if (recipeCategoryListMap.get(category).isEmpty()) @@ -265,7 +265,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> map = Maps.newLinkedHashMap(); categories.forEach(recipeCategory -> { if (recipeCategoryListMap.containsKey(recipeCategory.getIdentifier())) { - List list = recipeCategoryListMap.get(recipeCategory.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList()); + List list = recipeCategoryListMap.get(recipeCategory.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList()); if (!list.isEmpty()) map.put(recipeCategory, list); } @@ -288,17 +288,21 @@ public class RecipeHelperImpl implements RecipeHelper { return Collections.unmodifiableList(displayVisibilityHandlers); } + @SuppressWarnings("deprecation") @Override public boolean isDisplayVisible(RecipeDisplay display, boolean respectConfig) { + return isDisplayVisible(display); + } + + @SuppressWarnings("deprecation") + @Override + public boolean isDisplayVisible(RecipeDisplay display) { RecipeCategory category = getCategory(display.getRecipeCategory()); List list = getDisplayVisibilityHandlers().stream().sorted(VISIBILITY_HANDLER_COMPARATOR).collect(Collectors.toList()); 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; - } + if (visibility != DisplayVisibility.PASS) + return visibility == DisplayVisibility.ALWAYS_VISIBLE || visibility == DisplayVisibility.CONFIG_OPTIONAL; } return true; } diff --git a/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java b/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java index a6780f9c4..683312db5 100644 --- a/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java +++ b/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java @@ -66,7 +66,6 @@ public class ClothScreenRegistry { }); appearance.addOption(new IntegerSliderEntry("text.rei.config.max_recipes_per_page", 2, 99, RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage, RESET, () -> 3, i -> RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage = i, () -> getConfigTooltip("max_recipes_per_page"))); appearance.addOption(new BooleanListEntry("text.rei.config.light_gray_recipe_border", RoughlyEnoughItemsCore.getConfigManager().getConfig().lightGrayRecipeBorder, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().lightGrayRecipeBorder = bool, () -> getConfigTooltip("light_gray_recipe_border"))); - appearance.addOption(new BooleanListEntry("text.rei.config.prefer_visible_recipes", RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes = bool, () -> getConfigTooltip("prefer_visible_recipes"))); ConfigScreenBuilder.CategoryBuilder action = builder.addCategory("text.rei.config.action"); action.addOption(new EnumListEntry<>("text.rei.config.item_cheating_mode", ItemCheatingMode.class, RoughlyEnoughItemsCore.getConfigManager().getConfig().itemCheatingMode, RESET, () -> ItemCheatingMode.REI_LIKE, i -> RoughlyEnoughItemsCore.getConfigManager().getConfig().itemCheatingMode = i, e -> { return I18n.translate("text.rei.config.item_cheating_mode." + e.name().toLowerCase()); -- cgit From 7689bdbb42ad10b2ad99e2bae55ddaceac15bca7 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 3 Jun 2019 21:39:36 +0800 Subject: Dark Mode --- .../java/me/shedaniel/rei/api/RecipeCategory.java | 10 ++++++++-- .../java/me/shedaniel/rei/client/ConfigObject.java | 4 ++++ .../me/shedaniel/rei/gui/RecipeViewingScreen.java | 10 +++++++--- .../rei/gui/VillagerRecipeViewingScreen.java | 18 ++++++++++++------ .../me/shedaniel/rei/gui/widget/ButtonWidget.java | 4 +++- .../rei/gui/widget/ClickableLabelWidget.java | 6 +++--- .../me/shedaniel/rei/gui/widget/RecipeBaseWidget.java | 5 +++-- .../me/shedaniel/rei/gui/widget/SlotBaseWidget.java | 4 +++- .../java/me/shedaniel/rei/gui/widget/SlotWidget.java | 7 +++++-- .../java/me/shedaniel/rei/gui/widget/TabWidget.java | 4 +++- .../shedaniel/rei/plugin/DefaultBlastingCategory.java | 5 ++--- .../shedaniel/rei/plugin/DefaultBrewingCategory.java | 4 +--- .../shedaniel/rei/plugin/DefaultCampfireCategory.java | 4 +--- .../shedaniel/rei/plugin/DefaultCraftingCategory.java | 4 +--- .../java/me/shedaniel/rei/plugin/DefaultPlugin.java | 6 ++++++ .../shedaniel/rei/plugin/DefaultSmeltingCategory.java | 4 +--- .../shedaniel/rei/plugin/DefaultSmokingCategory.java | 4 +--- .../rei/plugin/DefaultStoneCuttingCategory.java | 4 +--- .../me/shedaniel/rei/utils/ClothScreenRegistry.java | 2 ++ .../assets/roughlyenoughitems/lang/en_us.json | 4 ++-- .../roughlyenoughitems/textures/gui/button_dark.png | Bin 0 -> 15750 bytes .../roughlyenoughitems/textures/gui/display_dark.png | Bin 0 -> 8722 bytes .../textures/gui/recipecontainer.png | Bin 7393 -> 7393 bytes .../textures/gui/recipecontainer_dark.png | Bin 0 -> 6756 bytes 24 files changed, 69 insertions(+), 44 deletions(-) create mode 100644 src/main/resources/assets/roughlyenoughitems/textures/gui/button_dark.png create mode 100644 src/main/resources/assets/roughlyenoughitems/textures/gui/display_dark.png create mode 100644 src/main/resources/assets/roughlyenoughitems/textures/gui/recipecontainer_dark.png (limited to 'src/main') diff --git a/src/main/java/me/shedaniel/rei/api/RecipeCategory.java b/src/main/java/me/shedaniel/rei/api/RecipeCategory.java index 27a68eafd..9db9a349f 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeCategory.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeCategory.java @@ -5,6 +5,7 @@ package me.shedaniel.rei.api; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.gui.renderables.RecipeRenderer; import me.shedaniel.rei.gui.widget.CategoryBaseWidget; @@ -87,8 +88,13 @@ public interface RecipeCategory { */ default void drawCategoryBackground(Rectangle bounds, int mouseX, int mouseY, float delta) { new CategoryBaseWidget(bounds).render(); - DrawableHelper.fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, RecipeViewingScreen.SUB_COLOR.getRGB()); - DrawableHelper.fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, RecipeViewingScreen.SUB_COLOR.getRGB()); + if (RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme) { + DrawableHelper.fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, 0xFF404040); + DrawableHelper.fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, 0xFF404040); + } else { + DrawableHelper.fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, 0xFF9E9E9E); + DrawableHelper.fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, 0xFF9E9E9E); + } } /** diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java index 7b490bc52..d9dafa521 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigObject.java @@ -48,6 +48,10 @@ public class ConfigObject { public boolean lightGrayRecipeBorder = false; + public boolean villagerScreenPermanentScrollBar = false; + + public boolean darkTheme = false; + public RecipeScreenType screenType = RecipeScreenType.UNSET; @Comment( diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 8884fb380..e420ec1c6 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -36,7 +36,6 @@ import java.util.function.Supplier; public class RecipeViewingScreen extends Screen { public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); - public static final Color SUB_COLOR = new Color(159, 159, 159); private static final int TABS_PER_PAGE = 5; private final List widgets; private final List tabs; @@ -344,8 +343,13 @@ public class RecipeViewingScreen extends Screen { selectedCategory.drawCategoryBackground(bounds, mouseX, mouseY, delta); else { new CategoryBaseWidget(bounds).render(); - fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, SUB_COLOR.getRGB()); - fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, SUB_COLOR.getRGB()); + if (RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme) { + fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, 0xFF404040); + fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, 0xFF404040); + } else { + fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, 0xFF9E9E9E); + fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, 0xFF9E9E9E); + } } tabs.stream().filter(tabWidget -> !tabWidget.isSelected()).forEach(tabWidget -> tabWidget.render(mouseX, mouseY, delta)); GuiLighting.disable(); diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java index 9233fbbfc..5a7601e06 100644 --- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java @@ -10,6 +10,7 @@ import com.google.common.collect.Maps; import com.mojang.blaze3d.platform.GlStateManager; import com.zeitheron.hammercore.client.utils.Scissors; import me.shedaniel.cloth.api.ClientUtils; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.*; import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.gui.renderables.RecipeRenderer; @@ -194,7 +195,7 @@ public class VillagerRecipeViewingScreen extends Screen { @Override public int getDefaultColor() { - return 4210752; + return RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? 0xFFBBBBBB : 4210752; } }); this.children.addAll(buttonWidgets); @@ -256,7 +257,11 @@ public class VillagerRecipeViewingScreen extends Screen { @Override public void render(int mouseX, int mouseY, float delta) { - if (scrollBarAlphaFutureTime > 0) { + if (RoughlyEnoughItemsCore.getConfigManager().getConfig().villagerScreenPermanentScrollBar) { + scrollBarAlphaFutureTime = System.currentTimeMillis(); + scrollBarAlphaFuture = 0; + scrollBarAlpha = 1; + } else if (scrollBarAlphaFutureTime > 0) { long l = System.currentTimeMillis() - scrollBarAlphaFutureTime; if (l > 300f) { if (scrollBarAlphaFutureTime == 0) { @@ -319,10 +324,11 @@ public class VillagerRecipeViewingScreen extends Screen { GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); GlStateManager.shadeModel(7425); buffer.begin(7, VertexFormats.POSITION_COLOR); - buffer.vertex(scrollbarPositionMinX, minY + scrollBarHeight, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); - buffer.vertex(scrollbarPositionMaxX, minY + scrollBarHeight, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); - buffer.vertex(scrollbarPositionMaxX, minY, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); - buffer.vertex(scrollbarPositionMinX, minY, 1000D).color(1f, 1f, 1f, scrollBarAlpha).next(); + float b = RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? 0.37f : 1f; + buffer.vertex(scrollbarPositionMinX, minY + scrollBarHeight, 1000D).color(b, b, b, scrollBarAlpha).next(); + buffer.vertex(scrollbarPositionMaxX, minY + scrollBarHeight, 1000D).color(b, b, b, scrollBarAlpha).next(); + buffer.vertex(scrollbarPositionMaxX, minY, 1000D).color(b, b, b, scrollBarAlpha).next(); + buffer.vertex(scrollbarPositionMinX, minY, 1000D).color(b, b, b, scrollBarAlpha).next(); tessellator.draw(); GlStateManager.shadeModel(7424); GlStateManager.disableBlend(); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java index 28b03775c..28ed82e41 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java @@ -6,6 +6,7 @@ package me.shedaniel.rei.gui.widget; import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ScreenHelper; import net.minecraft.client.gui.Element; import net.minecraft.client.sound.PositionedSoundInstance; @@ -22,6 +23,7 @@ import java.util.Optional; public abstract class ButtonWidget extends HighlightableWidget { public static final Identifier BUTTON_LOCATION = new Identifier("roughlyenoughitems", "textures/gui/button.png"); + public static final Identifier BUTTON_LOCATION_DARK = new Identifier("roughlyenoughitems", "textures/gui/button_dark.png"); public String text; public boolean enabled; public boolean focused; @@ -63,7 +65,7 @@ public abstract class ButtonWidget extends HighlightableWidget { @Override public void render(int mouseX, int mouseY, float delta) { int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height; - minecraft.getTextureManager().bindTexture(BUTTON_LOCATION); + minecraft.getTextureManager().bindTexture(RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? BUTTON_LOCATION_DARK : BUTTON_LOCATION); GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); int textureOffset = this.getTextureId(isHovered(mouseX, mouseY)); GlStateManager.enableBlend(); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java index c6c18f4bf..67d263fd9 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java @@ -5,6 +5,7 @@ package me.shedaniel.rei.gui.widget; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.client.ScreenHelper; import net.minecraft.ChatFormat; @@ -13,7 +14,6 @@ import java.util.Optional; public abstract class ClickableLabelWidget extends LabelWidget { - public static final int hoveredColor = (new Color(102, 255, 204)).getRGB(); public boolean focused; public boolean clickable; @@ -40,11 +40,11 @@ public abstract class ClickableLabelWidget extends LabelWidget { } public int getDefaultColor() { - return -1; + return RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? 0xFFBBBBBB : -1; } public int getHoveredColor() { - return hoveredColor; + return RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? -1 : 0xFF66FFCC; } @Override diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java index b21127cb6..41f9e042a 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java @@ -18,6 +18,7 @@ import java.util.List; public class RecipeBaseWidget extends HighlightableWidget { private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); + private static final Identifier CHEST_GUI_TEXTURE_DARK = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer_dark.png"); private Rectangle bounds; @@ -47,7 +48,7 @@ public class RecipeBaseWidget extends HighlightableWidget { return; GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); - minecraft.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + minecraft.getTextureManager().bindTexture(RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? CHEST_GUI_TEXTURE_DARK : CHEST_GUI_TEXTURE); int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height; int textureOffset = getTextureOffset(); @@ -76,7 +77,7 @@ public class RecipeBaseWidget extends HighlightableWidget { } protected int getInnerColor() { - return -3750202; + return RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? 0xFF2E2E2E : -3750202; } protected int getTextureOffset() { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/SlotBaseWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/SlotBaseWidget.java index 3e9ef5e17..d00098e65 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/SlotBaseWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/SlotBaseWidget.java @@ -5,6 +5,8 @@ package me.shedaniel.rei.gui.widget; +import me.shedaniel.rei.RoughlyEnoughItemsCore; + import java.awt.*; public class SlotBaseWidget extends RecipeBaseWidget { @@ -15,7 +17,7 @@ public class SlotBaseWidget extends RecipeBaseWidget { @Override public int getInnerColor() { - return -7631989; + return RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? 0xFF303030 : -7631989; } @Override diff --git a/src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java index 7bcda080d..d6c42b385 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java @@ -31,6 +31,7 @@ import java.util.stream.Collectors; public class SlotWidget extends HighlightableWidget { private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); + private static final Identifier RECIPE_GUI_DARK = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer_dark.png"); private static final ItemStackRenderer TROPICAL_FISH_RENDERABLE = Renderable.fromItemStack(Items.TROPICAL_FISH.getDefaultStack()); private List renderers = new LinkedList<>(); private boolean drawBackground, showToolTips, clickToMoreRecipes, drawHighlightedBackground; @@ -99,8 +100,9 @@ public class SlotWidget extends HighlightableWidget { @Override public void render(int mouseX, int mouseY, float delta) { Renderer renderer = getCurrentRenderer(); + boolean darkTheme = RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme; if (drawBackground) { - minecraft.getTextureManager().bindTexture(RECIPE_GUI); + minecraft.getTextureManager().bindTexture(darkTheme ? RECIPE_GUI_DARK : RECIPE_GUI); blit(this.x - 1, this.y - 1, 0, 222, 18, 18); } boolean highlighted = isHighlighted(mouseX, mouseY); @@ -108,7 +110,8 @@ public class SlotWidget extends HighlightableWidget { GlStateManager.disableLighting(); GlStateManager.disableDepthTest(); GlStateManager.colorMask(true, true, true, false); - fillGradient(x, y, x + 16, y + 16, -2130706433, -2130706433); + int color = darkTheme ? 0xFF5E5E5E : -2130706433; + fillGradient(x, y, x + 16, y + 16, color, color); GlStateManager.colorMask(true, true, true, true); GlStateManager.enableLighting(); GlStateManager.enableDepthTest(); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java index c4ac02342..1376b325e 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java @@ -6,6 +6,7 @@ package me.shedaniel.rei.gui.widget; import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.ClientHelper; import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.api.Renderer; @@ -21,6 +22,7 @@ import java.util.List; public class TabWidget extends HighlightableWidget { public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); + public static final Identifier CHEST_GUI_TEXTURE_DARK = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer_dark.png"); public boolean shown = false, selected = false; public Renderer renderer; @@ -73,7 +75,7 @@ public class TabWidget extends HighlightableWidget { if (shown) { GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); - minecraft.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + minecraft.getTextureManager().bindTexture(RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme ? CHEST_GUI_TEXTURE_DARK : CHEST_GUI_TEXTURE); this.blit(bounds.x, bounds.y + 2, selected ? 28 : 0, 192, 28, (selected ? 30 : 27)); renderer.setBlitOffset(100); renderer.render((int) bounds.getCenterX(), (int) bounds.getCenterY(), mouseX, mouseY, delta); diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java index e1ab4c9ed..3861735c1 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java @@ -6,6 +6,7 @@ package me.shedaniel.rei.plugin; import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.api.Renderable; import me.shedaniel.rei.api.Renderer; @@ -31,8 +32,6 @@ import java.util.function.Supplier; public class DefaultBlastingCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.BLASTING; @@ -63,7 +62,7 @@ public class DefaultBlastingCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.BREWING; @@ -58,7 +56,7 @@ public class DefaultBrewingCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.CAMPFIRE; @@ -54,7 +52,7 @@ public class DefaultCampfireCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.CRAFTING; @@ -55,7 +53,7 @@ public class DefaultCraftingCategory implements RecipeCategory BREWING_DISPLAYS = Lists.newArrayList(); diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java index 56cd26fa9..f45b0c7ba 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java @@ -31,8 +31,6 @@ import java.util.function.Supplier; public class DefaultSmeltingCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.SMELTING; @@ -62,7 +60,7 @@ public class DefaultSmeltingCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.SMOKING; @@ -62,7 +60,7 @@ public class DefaultSmokingCategory implements RecipeCategory { - private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); - @Override public Identifier getIdentifier() { return DefaultPlugin.STONE_CUTTING; @@ -54,7 +52,7 @@ public class DefaultStoneCuttingCategory implements RecipeCategory false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme = bool, () -> getConfigTooltip("dark_theme"))); appearance.addOption(new EnumListEntry<>("text.rei.config.recipe_screen_type", RecipeScreenType.class, RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType, RESET, () -> RecipeScreenType.UNSET, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType = bool, EnumListEntry.DEFAULT_NAME_PROVIDER, () -> getConfigTooltip("recipe_screen_type"))); appearance.addOption(new BooleanListEntry("text.rei.config.side_search_box", RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = bool, () -> getConfigTooltip("side_search_box"))); appearance.addOption(new EnumListEntry<>("text.rei.config.list_ordering", ItemListOrderingConfig.class, ItemListOrderingConfig.from(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering, RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending), RESET, () -> ItemListOrderingConfig.REGISTRY_ASCENDING, config -> { @@ -66,6 +67,7 @@ public class ClothScreenRegistry { }); appearance.addOption(new IntegerSliderEntry("text.rei.config.max_recipes_per_page", 2, 99, RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage, RESET, () -> 3, i -> RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage = i, () -> getConfigTooltip("max_recipes_per_page"))); appearance.addOption(new BooleanListEntry("text.rei.config.light_gray_recipe_border", RoughlyEnoughItemsCore.getConfigManager().getConfig().lightGrayRecipeBorder, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().lightGrayRecipeBorder = bool, () -> getConfigTooltip("light_gray_recipe_border"))); + appearance.addOption(new BooleanListEntry("text.rei.config.villager_screen_permanent_scroll_bar", RoughlyEnoughItemsCore.getConfigManager().getConfig().villagerScreenPermanentScrollBar, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().villagerScreenPermanentScrollBar = bool, () -> getConfigTooltip("villager_screen_permanent_scroll_bar"))); ConfigScreenBuilder.CategoryBuilder action = builder.addCategory("text.rei.config.action"); action.addO