From a29d1ad0cae8f8ccb375b5b8af7d4b86e6d8eb39 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 6 Aug 2019 18:46:44 +0800 Subject: 6x faster craftable combinding filter --- src/main/java/me/shedaniel/rei/api/Renderer.java | 46 ++++++++++++++++++ .../me/shedaniel/rei/gui/RecipeViewingScreen.java | 2 +- .../rei/gui/VillagerRecipeViewingScreen.java | 2 +- .../shedaniel/rei/gui/renderers/EmptyRenderer.java | 2 +- .../rei/gui/renderers/ItemStackRenderer.java | 6 ++- .../shedaniel/rei/gui/widget/ItemListOverlay.java | 18 +++++--- .../me/shedaniel/rei/gui/widget/SlotWidget.java | 18 ++++---- .../plugin/blasting/DefaultBlastingCategory.java | 6 +-- .../rei/plugin/brewing/DefaultBrewingCategory.java | 12 ++--- .../plugin/campfire/DefaultCampfireCategory.java | 4 +- .../composting/DefaultCompostingCategory.java | 4 +- .../plugin/crafting/DefaultCraftingCategory.java | 54 +++++++++------------- .../plugin/smelting/DefaultSmeltingCategory.java | 6 +-- .../rei/plugin/smoking/DefaultSmokingCategory.java | 6 +-- .../stonecutting/DefaultStoneCuttingCategory.java | 4 +- .../plugin/stripping/DefaultStrippingCategory.java | 4 +- .../me/shedaniel/rei/server/InputSlotCrafter.java | 1 - 17 files changed, 119 insertions(+), 76 deletions(-) (limited to 'src') diff --git a/src/main/java/me/shedaniel/rei/api/Renderer.java b/src/main/java/me/shedaniel/rei/api/Renderer.java index cbedb6ccf..87c3ef174 100644 --- a/src/main/java/me/shedaniel/rei/api/Renderer.java +++ b/src/main/java/me/shedaniel/rei/api/Renderer.java @@ -31,6 +31,26 @@ public abstract class Renderer extends DrawableHelper { }; } + /** + * Gets an item stack renderer by an item stack supplier + * + * @param supplier the supplier for getting the item stack + * @return the item stack renderer + */ + public static ItemStackRenderer fromItemStackSupplierNoCounts(Supplier supplier) { + return new ItemStackRenderer() { + @Override + public ItemStack getItemStack() { + return supplier.get(); + } + + @Override + protected boolean renderCounts() { + return false; + } + }; + } + /** * Gets an item stack renderer by an item stack * @@ -41,6 +61,16 @@ public abstract class Renderer extends DrawableHelper { return fromItemStackSupplier(() -> stack); } + /** + * Gets an item stack renderer by an item stack + * + * @param stack the item stack to be displayed + * @return the item stack renderer + */ + public static ItemStackRenderer fromItemStackNoCounts(ItemStack stack) { + return fromItemStackSupplierNoCounts(() -> stack); + } + /** * Gets an empty renderer * @@ -72,6 +102,22 @@ public abstract class Renderer extends DrawableHelper { }; } + public static ItemStackRenderer fromItemStacksNoCounts(List stacks) { + return new ItemStackRenderer() { + @Override + public ItemStack getItemStack() { + if (stacks.isEmpty()) + return ItemStack.EMPTY; + return stacks.get(MathHelper.floor((System.currentTimeMillis() / 500 % (double) stacks.size()) / 1f)); + } + + @Override + protected boolean renderCounts() { + return false; + } + }; + } + /** * Gets the current blit offset * diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 5ed94de21..a34006240 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -299,7 +299,7 @@ public class RecipeViewingScreen extends Screen { List list = Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("text.rei.working_station")); xx += (innerWidth - 1) * 18; for (List workingStation : workingStations) { - preWidgets.add(new SlotWidget(xx, yy, workingStation, true, true, true) { + preWidgets.add(new SlotWidget(xx, yy, Renderer.fromItemStacks(workingStation), true, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return list; diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java index 07a9c96d4..a9707f9f6 100644 --- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java @@ -107,7 +107,7 @@ public class VillagerRecipeViewingScreen extends Screen { int index = 0; List list = Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("text.rei.working_station")); for (List workingStation : workingStations) { - widgets.add(new SlotWidget(xx, yy, workingStation, true, true, true) { + widgets.add(new SlotWidget(xx, yy, Renderer.fromItemStacks(workingStation), true, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return list; diff --git a/src/main/java/me/shedaniel/rei/gui/renderers/EmptyRenderer.java b/src/main/java/me/shedaniel/rei/gui/renderers/EmptyRenderer.java index f5c9faa0d..18e41ad07 100644 --- a/src/main/java/me/shedaniel/rei/gui/renderers/EmptyRenderer.java +++ b/src/main/java/me/shedaniel/rei/gui/renderers/EmptyRenderer.java @@ -17,7 +17,7 @@ public class EmptyRenderer extends Renderer { @Override public void render(int x, int y, double mouseX, double mouseY, float delta) { - + } } diff --git a/src/main/java/me/shedaniel/rei/gui/renderers/ItemStackRenderer.java b/src/main/java/me/shedaniel/rei/gui/renderers/ItemStackRenderer.java index 8fb3f65a8..ea39ebcec 100644 --- a/src/main/java/me/shedaniel/rei/gui/renderers/ItemStackRenderer.java +++ b/src/main/java/me/shedaniel/rei/gui/renderers/ItemStackRenderer.java @@ -38,7 +38,7 @@ public abstract class ItemStackRenderer extends Renderer { GlStateManager.enableRescaleNormal(); GlStateManager.enableDepthTest(); itemRenderer.renderGuiItem(getItemStack(), l, i1); - itemRenderer.renderGuiItemOverlay(MinecraftClient.getInstance().textRenderer, getItemStack(), l, i1); + itemRenderer.renderGuiItemOverlay(MinecraftClient.getInstance().textRenderer, getItemStack(), l, i1, renderCounts() ? null : ""); itemRenderer.zOffset = 0.0F; this.blitOffset = 0; if (drawTooltip && mouseX >= x - 8 && mouseX <= x + 8 && mouseY >= y - 6 && mouseY <= y + 10) @@ -50,6 +50,10 @@ public abstract class ItemStackRenderer extends Renderer { ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(getTooltip(itemStack))); } + protected boolean renderCounts() { + return true; + } + protected List getTooltip(ItemStack itemStack) { final String modString = ClientHelper.getInstance().getFormattedModFromItem(itemStack.getItem()); List toolTip = Lists.newArrayList(ItemListOverlay.tryGetItemStackToolTip(itemStack, true)); 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 81a5b3a09..e81a945cf 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java @@ -11,6 +11,7 @@ import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.ClientHelper; import me.shedaniel.rei.api.DisplayHelper; import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.api.Renderer; import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.client.SearchArgument; import me.shedaniel.rei.gui.config.ItemCheatingMode; @@ -176,7 +177,7 @@ public class ItemListOverlay extends Widget { j++; if (j > currentDisplayed.size()) break; - widgets.add(new SlotWidget(x, y, Collections.singletonList(currentDisplayed.get(j - 1)), false, true, true) { + widgets.add(new SlotWidget(x, y, Renderer.fromItemStackNoCounts(currentDisplayed.get(j - 1)), false, true, true) { @Override protected void queueTooltip(ItemStack itemStack, float delta) { ClientPlayerEntity player = minecraft.player; @@ -286,13 +287,18 @@ public class ItemListOverlay extends Widget { }); List stacks = Collections.emptyList(); if (lastSearchArgument.isEmpty()) - stacks = Collections.unmodifiableList(os); + stacks = os; else - stacks = Collections.unmodifiableList(os.stream().filter(itemStack -> filterItem(itemStack, lastSearchArgument)).collect(Collectors.toList())); + stacks = os.stream().filter(itemStack -> filterItem(itemStack, lastSearchArgument)).collect(Collectors.toList()); 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.isItemEqualIgnoreDamage(itemStack))).collect(Collectors.toList()); + return Collections.unmodifiableList(stacks); + List workingItems = RecipeHelper.getInstance().findCraftableByItems(inventoryItems); + List newList = Lists.newArrayList(); + for (ItemStack workingItem : workingItems) { + if (stacks.stream().anyMatch(i -> i.isItemEqualIgnoreDamage(workingItem))) + newList.add(workingItem); + } + return newList; } public List getLastSearchArgument() { 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 1264b7aad..de573f3b2 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java @@ -18,8 +18,10 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import java.awt.*; +import java.util.Collections; +import java.util.LinkedList; import java.util.List; -import java.util.*; +import java.util.Locale; import java.util.stream.Collectors; public class SlotWidget extends WidgetWithBounds { @@ -30,12 +32,12 @@ public class SlotWidget extends WidgetWithBounds { private List renderers = new LinkedList<>(); private boolean drawBackground, showToolTips, clickToMoreRecipes, drawHighlightedBackground; - public SlotWidget(int x, int y, ItemStack itemStack, boolean drawBackground, boolean showToolTips) { - this(x, y, Collections.singletonList(itemStack), drawBackground, showToolTips); + public SlotWidget(int x, int y, Renderer renderer, boolean drawBackground, boolean showToolTips) { + this(x, y, Collections.singletonList(renderer), drawBackground, showToolTips); } - public SlotWidget(int x, int y, Collection itemList, boolean drawBackground, boolean showToolTips) { - this(x, y, itemList.stream().map(Renderer::fromItemStack).collect(Collectors.toList()), drawBackground, showToolTips); + public SlotWidget(int x, int y, Renderer renderer, boolean drawBackground, boolean showToolTips, boolean clickToMoreRecipes) { + this(x, y, Collections.singletonList(renderer), drawBackground, showToolTips, clickToMoreRecipes); } public SlotWidget(int x, int y, List renderers, boolean drawBackground, boolean showToolTips) { @@ -48,7 +50,7 @@ public class SlotWidget extends WidgetWithBounds { this.drawHighlightedBackground = true; } - public SlotWidget(int x, int y, List itemList, boolean drawBackground, boolean showToolTips, boolean clickToMoreRecipes) { + public SlotWidget(int x, int y, List itemList, boolean drawBackground, boolean showToolTips, boolean clickToMoreRecipes) { this(x, y, itemList, drawBackground, showToolTips); this.clickToMoreRecipes = clickToMoreRecipes; } @@ -164,10 +166,6 @@ public class SlotWidget extends WidgetWithBounds { return Collections.emptyList(); } - protected String getItemCountOverlay(ItemStack currentStack) { - return ""; - } - public ItemStack getCurrentItemStack() { if (getCurrentRenderer() instanceof ItemStackRenderer) return ((ItemStackRenderer) getCurrentRenderer()).getItemStack(); diff --git a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java index 4f3b586e5..f0478d10c 100644 --- a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java @@ -70,14 +70,14 @@ public class DefaultBlastingCategory implements RecipeCategory> input = recipeDisplay.getInput(); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, true)); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplay.getFuel(), true, true, true) { + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, Renderer.fromItemStacks(input.get(0)), true, true, true)); + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, Renderer.fromItemStacks(recipeDisplay.getFuel()), true, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.smelting.fuel")); } }); - widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplay.getOutput(), false, true, true)); + widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, Renderer.fromItemStacks(recipeDisplay.getOutput()), false, true, true)); return widgets; } diff --git a/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java b/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java index bb291f9bf..8bf823425 100644 --- a/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java @@ -62,32 +62,32 @@ public class DefaultBrewingCategory implements RecipeCategory getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.input")); } }); - widgets.add(new SlotWidget(startPoint.x + 40, startPoint.y + 1, recipeDisplay.getInput().get(1), false, true, true) { + widgets.add(new SlotWidget(startPoint.x + 40, startPoint.y + 1, Renderer.fromItemStacks(recipeDisplay.getInput().get(1)), false, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.reactant")); } }); - widgets.add(new SlotWidget(startPoint.x + 40, startPoint.y + 35, recipeDisplay.getOutput(0), false, true, true) { + widgets.add(new SlotWidget(startPoint.x + 40, startPoint.y + 35, Renderer.fromItemStacks(recipeDisplay.getOutput(0)), false, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result")); } }); - widgets.add(new SlotWidget(startPoint.x + 63, startPoint.y + 42, recipeDisplay.getOutput(1), false, true, true) { + widgets.add(new SlotWidget(startPoint.x + 63, startPoint.y + 42, Renderer.fromItemStacks(recipeDisplay.getOutput(1)), false, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result")); } }); - widgets.add(new SlotWidget(startPoint.x + 86, startPoint.y + 35, recipeDisplay.getOutput(2), false, true, true) { + widgets.add(new SlotWidget(startPoint.x + 86, startPoint.y + 35, Renderer.fromItemStacks(recipeDisplay.getOutput(2)), false, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result")); diff --git a/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java b/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java index c2c35da94..dc2777daa 100644 --- a/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java @@ -64,8 +64,8 @@ public class DefaultCampfireCategory implements RecipeCategory i ? Arrays.asList(stacks.get(i).asItem().getStackForRender()) : Lists.newArrayList(), true, true, true) { + widgets.add(new SlotWidget((int) bounds.getCenterX() - 72 + x * 18, bounds.y + y * 18, stacks.size() > i ? Renderer.fromItemStack(stacks.get(i).asItem().getStackForRender()) : Renderer.empty(), true, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { final List[] thing = new List[]{null}; @@ -93,7 +93,7 @@ public class DefaultCompostingCategory implements RecipeCategory { + public static int getSlotWithSize(DefaultCraftingDisplay recipeDisplay, int num) { + if (recipeDisplay.getWidth() == 1) { + if (num == 1) + return 3; + if (num == 2) + return 6; + } + + if (recipeDisplay.getWidth() == 2) { + if (num == 2) + return 3; + if (num == 3) + return 4; + if (num == 4) + return 6; + if (num == 5) + return 7; + } + return num; + } + @Override public Identifier getIdentifier() { return DefaultPlugin.CRAFTING; @@ -70,38 +90,8 @@ public class DefaultCraftingCategory implements RecipeCategory> input = recipeDisplaySupplier.get().getInput(); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, true)); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplaySupplier.get().getFuel(), true, true, true) { + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, Renderer.fromItemStacks(input.get(0)), true, true, true)); + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, Renderer.fromItemStacks(recipeDisplaySupplier.get().getFuel()), true, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.smelting.fuel")); } }); - widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplaySupplier.get().getOutput(), false, true, true)); + widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, Renderer.fromItemStacks(recipeDisplaySupplier.get().getOutput()), false, true, true)); return widgets; } diff --git a/src/main/java/me/shedaniel/rei/plugin/smoking/DefaultSmokingCategory.java b/src/main/java/me/shedaniel/rei/plugin/smoking/DefaultSmokingCategory.java index cf02d0a61..862cd01ef 100644 --- a/src/main/java/me/shedaniel/rei/plugin/smoking/DefaultSmokingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/smoking/DefaultSmokingCategory.java @@ -69,14 +69,14 @@ public class DefaultSmokingCategory implements RecipeCategory> input = recipeDisplaySupplier.get().getInput(); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, true)); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplaySupplier.get().getFuel(), true, true, true) { + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, Renderer.fromItemStacks(input.get(0)), true, true, true)); + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, Renderer.fromItemStacks(recipeDisplaySupplier.get().getFuel()), true, true, true) { @Override protected List getExtraToolTips(ItemStack stack) { return Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.smelting.fuel")); } }); - widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplaySupplier.get().getOutput(), false, true, true)); + widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, Renderer.fromItemStacks(recipeDisplaySupplier.get().getOutput()), false, true, true)); return widgets; } diff --git a/src/main/java/me/shedaniel/rei/plugin/stonecutting/DefaultStoneCuttingCategory.java b/src/main/java/me/shedaniel/rei/plugin/stonecutting/DefaultStoneCuttingCategory.java index d148e420e..ccd8689fb 100644 --- a/src/main/java/me/shedaniel/rei/plugin/stonecutting/DefaultStoneCuttingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/stonecutting/DefaultStoneCuttingCategory.java @@ -55,8 +55,8 @@ public class DefaultStoneCuttingCategory implements RecipeCategory { -- cgit