aboutsummaryrefslogtreecommitdiff
path: root/default-plugin
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-11-20 17:50:10 +0800
committershedaniel <daniel@shedaniel.me>2021-11-20 18:30:52 +0800
commit69e26e78b69f7eeb745b604b2347ac30fe32666f (patch)
tree8fec70dc56f335817702ac20429ab32f2301d136 /default-plugin
parentb92284180f3c58361180f9e5fb1062ba5560466e (diff)
downloadRoughlyEnoughItems-69e26e78b69f7eeb745b604b2347ac30fe32666f.tar.gz
RoughlyEnoughItems-69e26e78b69f7eeb745b604b2347ac30fe32666f.tar.bz2
RoughlyEnoughItems-69e26e78b69f7eeb745b604b2347ac30fe32666f.zip
Rewrite on how TransferHandler render errors, and fix #580
Diffstat (limited to 'default-plugin')
-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/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.java15
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java28
5 files changed, 47 insertions, 45 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/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..0a2234540 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
@@ -29,6 +29,8 @@ 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.plugin.common.BuiltinPlugin;
@@ -94,4 +96,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;
}