From 7d1e39007a1e7de6fd0381fa1e21cf9b6e927f97 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 15 Jul 2020 15:36:25 +0800 Subject: Rewrite composting code and add registerCategories Signed-off-by: shedaniel --- .../java/me/shedaniel/rei/api/RecipeHelper.java | 12 +++++++++ .../me/shedaniel/rei/plugin/DefaultPlugin.java | 31 +++++++++++----------- .../composting/DefaultCompostingCategory.java | 29 +++++++++----------- .../composting/DefaultCompostingDisplay.java | 26 +++++++----------- 4 files changed, 50 insertions(+), 48 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java index 26f17e81f..04b699b5a 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java @@ -82,6 +82,18 @@ public interface RecipeHelper { */ void registerCategory(RecipeCategory category); + default void registerCategories(Iterable> categories) { + for (RecipeCategory category : categories) { + registerCategory(category); + } + } + + default void registerCategories(RecipeCategory... categories) { + for (RecipeCategory category : categories) { + registerCategory(category); + } + } + /** * Registers the working stations of a category * diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java index f54bf8ba9..460a5d119 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java @@ -195,19 +195,20 @@ public class DefaultPlugin implements REIPluginV0 { if (!ConfigObject.getInstance().isLoadingDefaultPlugin()) { return; } - recipeHelper.registerCategory(new DefaultCraftingCategory()); - recipeHelper.registerCategory(new DefaultCookingCategory(SMELTING, EntryStack.create(Items.FURNACE), "category.rei.smelting")); - recipeHelper.registerCategory(new DefaultCookingCategory(SMOKING, EntryStack.create(Items.SMOKER), "category.rei.smoking")); - recipeHelper.registerCategory(new DefaultCookingCategory(BLASTING, EntryStack.create(Items.BLAST_FURNACE), "category.rei.blasting")); - recipeHelper.registerCategory(new DefaultCampfireCategory()); - recipeHelper.registerCategory(new DefaultStoneCuttingCategory()); - recipeHelper.registerCategory(new DefaultFuelCategory()); - recipeHelper.registerCategory(new DefaultBrewingCategory()); - recipeHelper.registerCategory(new DefaultCompostingCategory()); - recipeHelper.registerCategory(new DefaultStrippingCategory()); - recipeHelper.registerCategory(new DefaultSmithingCategory()); - recipeHelper.registerCategory(new DefaultBeaconBaseCategory()); - recipeHelper.registerCategory(new DefaultInformationCategory()); + recipeHelper.registerCategories( + new DefaultCraftingCategory(), + new DefaultCookingCategory(SMELTING, EntryStack.create(Items.FURNACE), "category.rei.smelting"), + new DefaultCookingCategory(SMOKING, EntryStack.create(Items.SMOKER), "category.rei.smoking"), + new DefaultCookingCategory(BLASTING, EntryStack.create(Items.BLAST_FURNACE), "category.rei.blasting"), new DefaultCampfireCategory(), + new DefaultStoneCuttingCategory(), + new DefaultFuelCategory(), + new DefaultBrewingCategory(), + new DefaultCompostingCategory(), + new DefaultStrippingCategory(), + new DefaultSmithingCategory(), + new DefaultBeaconBaseCategory(), + new DefaultInformationCategory() + ); } @Override @@ -250,14 +251,14 @@ public class DefaultPlugin implements REIPluginV0 { if (entry.getFloatValue() > 0) map.put(entry.getKey(), entry.getFloatValue()); } - List stacks = new LinkedList<>(map.keySet()); + List stacks = Lists.newArrayList(map.keySet()); stacks.sort(Comparator.comparing(map::get)); for (int i = 0; i < stacks.size(); i += MathHelper.clamp(48, 1, stacks.size() - i)) { List thisStacks = Lists.newArrayList(); for (int j = i; j < i + 48; j++) if (j < stacks.size()) thisStacks.add(stacks.get(j)); - recipeHelper.registerDisplay(new DefaultCompostingDisplay(MathHelper.floor(i / 48f), thisStacks, map, Lists.newArrayList(map.keySet()), new ItemStack[]{new ItemStack(Items.BONE_MEAL)})); + recipeHelper.registerDisplay(new DefaultCompostingDisplay(MathHelper.floor(i / 48f), thisStacks, map, new ItemStack(Items.BONE_MEAL))); } DummyAxeItem.getStrippedBlocksMap().entrySet().stream().sorted(Comparator.comparing(b -> Registry.BLOCK.getId(b.getKey()))).forEach(set -> { recipeHelper.registerDisplay(new DefaultStrippingDisplay(EntryStack.create(set.getKey()), EntryStack.create(set.getValue()))); diff --git a/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingCategory.java b/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingCategory.java index afae0a5a0..503bb877a 100644 --- a/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingCategory.java @@ -33,20 +33,20 @@ import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.gui.entries.RecipeEntry; import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.plugin.DefaultPlugin; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemConvertible; import net.minecraft.text.TranslatableText; +import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; +@Environment(EnvType.CLIENT) public class DefaultCompostingCategory implements RecipeCategory { @Override @@ -84,20 +84,17 @@ public class DefaultCompostingCategory implements RecipeCategory widgets = Lists.newArrayList(); Point startingPoint = new Point(bounds.x + bounds.width - 55, bounds.y + 110); widgets.add(Widgets.createFilledRectangle(bounds, REIHelper.getInstance().isDarkThemeEnabled() ? -13750738 : -3750202)); - List stacks = new LinkedList<>(display.getItemsByOrder()); + List stacks = new ArrayList<>(display.getRequiredEntries().get(0)); int i = 0; for (int y = 0; y < 6; y++) for (int x = 0; x < 8; x++) { - int finalI = i; - EntryStack entryStack = stacks.size() > i ? stacks.get(finalI) : EntryStack.empty(); - if (entryStack.getType() != EntryStack.Type.EMPTY) - for (Map.Entry entry : display.getInputMap().entrySet()) { - if (entry.getKey().asItem().equals(entryStack.getItem())) { - entryStack = entryStack.setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, s -> Collections.singletonList(new TranslatableText("text.rei.composting.chance", MathHelper.fastFloor(entry.getValue() * 100)))); - break; - } - } - widgets.add(Widgets.createSlot(new Point(bounds.getCenterX() - 72 + x * 18, bounds.y + 3 + y * 18)).entry(entryStack).markInput()); + EntryStack[] entryStack = {stacks.size() > i ? stacks.get(i) : EntryStack.empty()}; + if (!entryStack[0].isEmpty()) { + display.getInputMap().entrySet().parallelStream().filter(entry -> entry.getKey() != null && Objects.equals(entry.getKey().asItem(), entryStack[0].getItem())).findAny().map(Map.Entry::getValue).ifPresent(chance -> { + entryStack[0] = entryStack[0].setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, s -> Collections.singletonList(new TranslatableText("text.rei.composting.chance", MathHelper.fastFloor(chance * 100)).formatted(Formatting.YELLOW))); + }); + } + widgets.add(Widgets.createSlot(new Point(bounds.getCenterX() - 72 + x * 18, bounds.y + 3 + y * 18)).entry(entryStack[0]).markInput()); i++; } widgets.add(Widgets.createArrow(new Point(startingPoint.x - 1, startingPoint.y + 7))); diff --git a/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingDisplay.java index c2bc3b22a..fd2d99142 100644 --- a/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingDisplay.java @@ -26,28 +26,29 @@ package me.shedaniel.rei.plugin.composting; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeDisplay; import me.shedaniel.rei.plugin.DefaultPlugin; +import me.shedaniel.rei.utils.CollectionUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; @Environment(EnvType.CLIENT) public class DefaultCompostingDisplay implements RecipeDisplay { - - private List order, allItems; + private List order; private Map inputMap; private List output; private int page; - public DefaultCompostingDisplay(int page, List order, Map inputMap, List allItems, ItemStack[] output) { + public DefaultCompostingDisplay(int page, List order, Map inputMap, ItemStack output) { this.page = page; this.order = EntryStack.ofItems(order); this.inputMap = inputMap; - this.output = EntryStack.ofItemStacks(Arrays.asList(output)); - this.allItems = EntryStack.ofItems(allItems); + this.output = EntryStack.ofItemStacks(Collections.singletonList(output)); } public int getPage() { @@ -56,11 +57,7 @@ public class DefaultCompostingDisplay implements RecipeDisplay { @Override public List> getInputEntries() { - List> lists = new ArrayList<>(); - for (EntryStack allItem : allItems) { - lists.add(Collections.singletonList(allItem)); - } - return lists; + return CollectionUtils.map(order, Collections::singletonList); } public Map getInputMap() { @@ -79,11 +76,6 @@ public class DefaultCompostingDisplay implements RecipeDisplay { @Override public List> getRequiredEntries() { - return Collections.singletonList(allItems); - } - - public List getItemsByOrder() { - return order; + return Collections.singletonList(order); } - } -- cgit