diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-07-15 15:36:25 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-07-15 15:36:25 +0800 |
| commit | 7d1e39007a1e7de6fd0381fa1e21cf9b6e927f97 (patch) | |
| tree | fc4634e051a672d5a0a3d937354e28ce342e00c3 /src/main/java | |
| parent | c55a37bc522f0996862017031ff0322756f7b0a6 (diff) | |
| download | RoughlyEnoughItems-7d1e39007a1e7de6fd0381fa1e21cf9b6e927f97.tar.gz RoughlyEnoughItems-7d1e39007a1e7de6fd0381fa1e21cf9b6e927f97.tar.bz2 RoughlyEnoughItems-7d1e39007a1e7de6fd0381fa1e21cf9b6e927f97.zip | |
Rewrite composting code and add registerCategories
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java')
4 files changed, 50 insertions, 48 deletions
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<RecipeCategory<?>> 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<ItemConvertible> stacks = new LinkedList<>(map.keySet()); + List<ItemConvertible> 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<ItemConvertible> 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<DefaultCompostingDisplay> { @Override @@ -84,20 +84,17 @@ public class DefaultCompostingCategory implements RecipeCategory<DefaultComposti List<Widget> 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<EntryStack> stacks = new LinkedList<>(display.getItemsByOrder()); + List<EntryStack> 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<ItemConvertible, Float> 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<EntryStack> order, allItems; + private List<EntryStack> order; private Map<ItemConvertible, Float> inputMap; private List<EntryStack> output; private int page; - public DefaultCompostingDisplay(int page, List<ItemConvertible> order, Map<ItemConvertible, Float> inputMap, List<ItemConvertible> allItems, ItemStack[] output) { + public DefaultCompostingDisplay(int page, List<ItemConvertible> order, Map<ItemConvertible, Float> 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<List<EntryStack>> getInputEntries() { - List<List<EntryStack>> lists = new ArrayList<>(); - for (EntryStack allItem : allItems) { - lists.add(Collections.singletonList(allItem)); - } - return lists; + return CollectionUtils.map(order, Collections::singletonList); } public Map<ItemConvertible, Float> getInputMap() { @@ -79,11 +76,6 @@ public class DefaultCompostingDisplay implements RecipeDisplay { @Override public List<List<EntryStack>> getRequiredEntries() { - return Collections.singletonList(allItems); - } - - public List<EntryStack> getItemsByOrder() { - return order; + return Collections.singletonList(order); } - } |
