aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-11-21 19:10:50 +0800
committershedaniel <daniel@shedaniel.me>2021-11-21 19:10:50 +0800
commit85e72e9a9bc70cf283ba872172985b338be59233 (patch)
treebce73cb38c00b73d1323c7a014701ee638f2224b /default-plugin/src
parenta437fe0560478c636526862679ba1098688bf2c1 (diff)
parentc4cdd997f981d0a3b763140d1515a73941b18f5c (diff)
downloadRoughlyEnoughItems-85e72e9a9bc70cf283ba872172985b338be59233.tar.gz
RoughlyEnoughItems-85e72e9a9bc70cf283ba872172985b338be59233.tar.bz2
RoughlyEnoughItems-85e72e9a9bc70cf283ba872172985b338be59233.zip
Merge remote-tracking branch 'origin/6.x-1.17' into 7.x-1.18
# Conflicts: # api/src/main/java/me/shedaniel/rei/api/common/transfer/info/MenuInfo.java # gradle.properties # runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TooltipArgumentType.java # runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java
Diffstat (limited to 'default-plugin/src')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java4
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java6
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/cooking/DefaultCookingCategory.java18
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java27
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java57
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java28
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java52
7 files changed, 143 insertions, 49 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java
index 9de8162ae..a93333703 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java
@@ -66,7 +66,7 @@ public class DefaultRecipeBookHandler implements TransferHandler {
if (craftingDisplay.getHeight() > h || craftingDisplay.getWidth() > w)
return Result.createFailed(new TranslatableComponent("error.rei.transfer.too_small", h, w));
if (!context.getMinecraft().player.getRecipeBook().contains(recipe))
- return Result.createFailed(new TranslatableComponent("error.rei.recipe.not.unlocked"));
+ return Result.createNotApplicable();
if (!context.isActuallyCrafting())
return Result.createSuccessful();
context.getMinecraft().setScreen(context.getContainerScreen());
@@ -79,7 +79,7 @@ public class DefaultRecipeBookHandler implements TransferHandler {
if (defaultDisplay.getOptionalRecipe().isPresent()) {
Recipe<?> recipe = (defaultDisplay).getOptionalRecipe().get();
if (!context.getMinecraft().player.getRecipeBook().contains(recipe))
- return Result.createFailed(new TranslatableComponent("error.rei.recipe.not.unlocked"));
+ return Result.createNotApplicable();
if (!context.isActuallyCrafting())
return Result.createSuccessful();
context.getMinecraft().setScreen(context.getContainerScreen());
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
index 779b21e0b..15c55430d 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
@@ -69,9 +69,8 @@ import me.shedaniel.rei.plugin.common.displays.brewing.DefaultBrewingDisplay;
import me.shedaniel.rei.plugin.common.displays.cooking.DefaultBlastingDisplay;
import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmeltingDisplay;
import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmokingDisplay;
+import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay;
import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCustomDisplay;
-import me.shedaniel.rei.plugin.common.displays.crafting.DefaultShapedDisplay;
-import me.shedaniel.rei.plugin.common.displays.crafting.DefaultShapelessDisplay;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
@@ -236,8 +235,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
@Override
public void registerDisplays(DisplayRegistry registry) {
- registry.registerRecipeFiller(ShapelessRecipe.class, RecipeType.CRAFTING, DefaultShapelessDisplay::new);
- registry.registerRecipeFiller(ShapedRecipe.class, RecipeType.CRAFTING, DefaultShapedDisplay::new);
+ registry.registerRecipeFiller(CraftingRecipe.class, RecipeType.CRAFTING, DefaultCraftingDisplay::of);
registry.registerRecipeFiller(SmeltingRecipe.class, RecipeType.SMELTING, DefaultSmeltingDisplay::new);
registry.registerRecipeFiller(SmokingRecipe.class, RecipeType.SMOKING, DefaultSmokingDisplay::new);
registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, DefaultBlastingDisplay::new);
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/cooking/DefaultCookingCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/cooking/DefaultCookingCategory.java
index e1ced8889..aa07f60ba 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/cooking/DefaultCookingCategory.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/cooking/DefaultCookingCategory.java
@@ -24,8 +24,6 @@
package me.shedaniel.rei.plugin.client.categories.cooking;
import com.google.common.collect.Lists;
-import com.mojang.blaze3d.vertex.PoseStack;
-import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.gui.DisplayRenderer;
@@ -33,13 +31,12 @@ import me.shedaniel.rei.api.client.gui.Renderer;
import me.shedaniel.rei.api.client.gui.SimpleDisplayRenderer;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
-import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory;
+import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.plugin.common.displays.cooking.DefaultCookingDisplay;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
-import net.minecraft.client.gui.GuiComponent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
@@ -48,7 +45,7 @@ import java.util.Collections;
import java.util.List;
@Environment(EnvType.CLIENT)
-public class DefaultCookingCategory implements TransferDisplayCategory<DefaultCookingDisplay> {
+public class DefaultCookingCategory implements DisplayCategory<DefaultCookingDisplay> {
private CategoryIdentifier<? extends DefaultCookingDisplay> identifier;
private EntryStack<?> logo;
private String categoryName;
@@ -60,17 +57,6 @@ public class DefaultCookingCategory implements TransferDisplayCategory<DefaultCo
}
@Override
- public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, DefaultCookingDisplay display, IntList redSlots) {
- Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10);
- matrices.pushPose();
- matrices.translate(0, 0, 400);
- if (redSlots.contains(0)) {
- GuiComponent.fill(matrices, startPoint.x + 1, startPoint.y + 1, startPoint.x + 1 + 16, startPoint.y + 1 + 16, 1090453504);
- }
- matrices.popPose();
- }
-
- @Override
public List<Widget> setupDisplay(DefaultCookingDisplay display, Rectangle bounds) {
Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10);
double cookingTime = display.getCookingTime();
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java
index fdedcff29..188ceff9c 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java
@@ -24,8 +24,6 @@
package me.shedaniel.rei.plugin.client.categories.crafting;
import com.google.common.collect.Lists;
-import com.mojang.blaze3d.vertex.PoseStack;
-import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.gui.Renderer;
@@ -33,7 +31,6 @@ import me.shedaniel.rei.api.client.gui.widgets.Slot;
import me.shedaniel.rei.api.client.gui.widgets.Widget;
import me.shedaniel.rei.api.client.gui.widgets.Widgets;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
-import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.DisplayMerger;
import me.shedaniel.rei.api.common.entry.EntryStack;
@@ -51,7 +48,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
@Environment(EnvType.CLIENT)
-public class DefaultCraftingCategory implements TransferDisplayCategory<DefaultCraftingDisplay<?>> {
+public class DefaultCraftingCategory implements DisplayCategory<DefaultCraftingDisplay<?>> {
@Override
public CategoryIdentifier<? extends DefaultCraftingDisplay<?>> getCategoryIdentifier() {
return BuiltinPlugin.CRAFTING;
@@ -92,28 +89,6 @@ public class DefaultCraftingCategory implements TransferDisplayCategory<DefaultC
}
@Override
- public void renderRedSlots(PoseStack matrices, List<Widget> widgets, Rectangle bounds, DefaultCraftingDisplay<?> display, IntList redSlots) {
-// @Nullable
-// Screen previousScreen = REIRuntime.getInstance().getPreviousScreen();
-// if (!(previousScreen instanceof AbstractContainerScreen)) return;
-// AbstractContainerMenu containerMenu = ((AbstractContainerScreen<?>) previousScreen).getMenu();
-// MenuInfo<AbstractContainerMenu, DefaultCraftingDisplay> info = (MenuInfo<AbstractContainerMenu, DefaultCraftingDisplay>) MenuInfoRegistry.getInstance().get(getCategoryIdentifier(), containerMenu.getClass());
-// if (info == null) {
-// return;
-// }
-// matrices.pushPose();
-// matrices.translate(0, 0, 400);
-// Point startPoint = new Point(bounds.getCenterX() - 58, bounds.getCenterY() - 27);
-// int width = info.getCraftingWidth(containerMenu);
-// for (int slot : redSlots) {
-// int x = slot % width;
-// int y = Mth.floor(slot / (float) width);
-// GuiComponent.fill(matrices, startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18, startPoint.x + 1 + x * 18 + 16, startPoint.y + 1 + y * 18 + 16, 0x60ff0000);
-// }
-// matrices.popPose();
- }
-
- @Override
@Nullable
public DisplayMerger<DefaultCraftingDisplay<?>> getDisplayMerger() {
return DisplayCategory.getContentMerger();
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java
index 2fc43dbaf..7138394e2 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java
@@ -23,21 +23,34 @@
package me.shedaniel.rei.plugin.common.displays.crafting;
+import dev.architectury.injectables.annotations.ExpectPlatform;
+import dev.architectury.injectables.annotations.PlatformOnly;
+import dev.architectury.platform.Platform;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay;
import me.shedaniel.rei.api.common.display.basic.BasicDisplay;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
+import me.shedaniel.rei.api.common.transfer.info.MenuInfo;
+import me.shedaniel.rei.api.common.transfer.info.MenuSerializationContext;
import me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo;
import me.shedaniel.rei.api.common.util.CollectionUtils;
+import me.shedaniel.rei.api.common.util.EntryIngredients;
import me.shedaniel.rei.plugin.common.BuiltinPlugin;
+import net.minecraft.core.NonNullList;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Recipe;
+import net.minecraft.world.item.crafting.ShapedRecipe;
+import net.minecraft.world.item.crafting.ShapelessRecipe;
+import org.apache.commons.lang3.tuple.Pair;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -49,6 +62,37 @@ public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicD
this.recipe = recipe;
}
+ @Nullable
+ public static DefaultCraftingDisplay<?> of(Recipe<?> recipe) {
+ if (recipe instanceof ShapelessRecipe) {
+ return new DefaultShapelessDisplay((ShapelessRecipe) recipe);
+ } else if (recipe instanceof ShapedRecipe) {
+ return new DefaultShapedDisplay((ShapedRecipe) recipe);
+ } else if (!recipe.isSpecial()) {
+ NonNullList<Ingredient> ingredients = recipe.getIngredients();
+ Pair<Integer, Integer> size = Platform.isFabric() ? null : getSize(recipe);
+
+ if (!ingredients.isEmpty()) {
+ if (size == null) {
+ return new DefaultCustomDisplay(recipe, EntryIngredients.ofIngredients(recipe.getIngredients()),
+ Collections.singletonList(EntryIngredients.of(recipe.getResultItem())));
+ } else {
+ return new DefaultCustomShapedDisplay(recipe, EntryIngredients.ofIngredients(recipe.getIngredients()),
+ Collections.singletonList(EntryIngredients.of(recipe.getResultItem())),
+ size.getLeft(), size.getRight());
+ }
+ }
+ }
+
+ return null;
+ }
+
+ @ExpectPlatform
+ @PlatformOnly(PlatformOnly.FORGE)
+ private static Pair<Integer, Integer> getSize(Recipe<?> recipe) {
+ throw new AssertionError();
+ }
+
@Override
public CategoryIdentifier<?> getCategoryIdentifier() {
return BuiltinPlugin.CRAFTING;
@@ -94,4 +138,17 @@ public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicD
return BasicDisplay.Serializer.<DefaultCraftingDisplay<?>>ofSimple(DefaultCustomDisplay::simple)
.inputProvider(display -> display.getOrganisedInputEntries(3, 3));
}
+
+ @Override
+ public List<EntryIngredient> getInputEntries(MenuSerializationContext<?, ?, ?> context, MenuInfo<?, ?> info, boolean fill) {
+ List<EntryIngredient> list = new ArrayList<>(3 * 3);
+ for (int i = 0; i < 3 * 3; i++) {
+ list.add(EntryIngredient.empty());
+ }
+ List<EntryIngredient> inputEntries = getInputEntries();
+ for (int i = 0; i < inputEntries.size(); i++) {
+ list.set(getSlotWithSize(this, i, 3), inputEntries.get(i));
+ }
+ return list;
+ }
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java
index 45cd6eed4..51cd02767 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java
@@ -24,12 +24,16 @@
package me.shedaniel.rei.plugin.common.displays.crafting;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
-import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.registry.RecipeManagerContext;
+import me.shedaniel.rei.api.common.transfer.info.MenuInfo;
+import me.shedaniel.rei.api.common.transfer.info.MenuSerializationContext;
+import me.shedaniel.rei.api.common.transfer.info.simple.SimpleGridMenuInfo;
import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.crafting.Recipe;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
import java.util.Optional;
@@ -61,6 +65,28 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay<Recipe<?>> {
}
@Override
+ public List<EntryIngredient> getInputEntries(MenuSerializationContext<?, ?, ?> context, MenuInfo<?, ?> info, boolean fill) {
+ if (fill && info instanceof SimpleGridMenuInfo) {
+ List<EntryIngredient> out = new ArrayList<>();
+ int craftingWidth = ((SimpleGridMenuInfo<AbstractContainerMenu, ?>) info).getCraftingWidth(context.getMenu());
+ int craftingHeight = ((SimpleGridMenuInfo<AbstractContainerMenu, ?>) info).getCraftingHeight(context.getMenu());
+ for (int i = 0; i < 9; i++) {
+ if (i < inputs.size()) {
+ int x = i % 3;
+ if (x < craftingWidth) {
+ out.add(inputs.get(i));
+ if (out.size() > craftingWidth * craftingHeight) break;
+ }
+ }
+ }
+ while (out.size() < craftingWidth * craftingHeight) out.add(EntryIngredient.empty());
+ return out;
+ }
+
+ return super.getInputEntries(context, info, fill);
+ }
+
+ @Override
public int getWidth() {
return width;
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java
new file mode 100644
index 000000000..18296bd1e
--- /dev/null
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java
@@ -0,0 +1,52 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.common.displays.crafting;
+
+import me.shedaniel.rei.api.common.entry.EntryIngredient;
+import net.minecraft.world.item.crafting.Recipe;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+import java.util.Optional;
+
+public class DefaultCustomShapedDisplay extends DefaultCraftingDisplay<Recipe<?>> {
+ private int width;
+ private int height;
+
+ public DefaultCustomShapedDisplay(@Nullable Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output, int width, int height) {
+ super(input, output, Optional.ofNullable(possibleRecipe));
+ this.width = width;
+ this.height = height;
+ }
+
+ @Override
+ public int getWidth() {
+ return width;
+ }
+
+ @Override
+ public int getHeight() {
+ return height;
+ }
+}