Prechádzať zdrojové kódy

Rewrite composting code and add registerCategories

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel 5 rokov pred
rodič
commit
13fe4e7af1

+ 1 - 1
gradle.properties

@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx3G
-mod_version=4.9.3
+mod_version=4.9.4
 supported_version=1.16.x
 minecraft_version=1.16.1
 yarn_version=1.16.1+build.4+legacy.20w09a+build.8

+ 12 - 0
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
      *

+ 16 - 15
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())));

+ 13 - 16
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)));

+ 9 - 17
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);
     }
-    
 }