aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-06-20 21:54:39 +0800
committershedaniel <daniel@shedaniel.me>2021-06-20 21:54:39 +0800
commit06c695df2c1ae92ddd71dfa23491d7554387156c (patch)
tree77b10b982eaeedf38553833cf6c60a730fcfcf56
parent0239bf2fb623863164da37df7f059d29805ed1b9 (diff)
downloadRoughlyEnoughItems-06c695df2c1ae92ddd71dfa23491d7554387156c.tar.gz
RoughlyEnoughItems-06c695df2c1ae92ddd71dfa23491d7554387156c.tar.bz2
RoughlyEnoughItems-06c695df2c1ae92ddd71dfa23491d7554387156c.zip
Improve crash reports, fluid rendering return missing sprite, add more util methods to EntryStacks and EntryIngredients
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/gui/Renderer.java11
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java6
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/util/EntryIngredients.java12
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/util/EntryStacks.java4
-rw-r--r--gradle.properties10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java71
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/util/CrashReportUtils.java57
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java31
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java12
11 files changed, 220 insertions, 29 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/gui/Renderer.java b/api/src/main/java/me/shedaniel/rei/api/client/gui/Renderer.java
index 153473352..207bd118b 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/gui/Renderer.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/gui/Renderer.java
@@ -27,8 +27,11 @@ import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
+import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
import org.jetbrains.annotations.Nullable;
public interface Renderer {
@@ -44,4 +47,12 @@ public interface Renderer {
int getZ();
void setZ(int z);
+
+ default void fillCrashReport(CrashReport report, CrashReportCategory category) {
+ category.setDetail("Renderer name", () -> getClass().getCanonicalName());
+ category.setDetail("Z level", () -> String.valueOf(getZ()));
+ if (this instanceof WidgetWithBounds widget) {
+ category.setDetail("Bounds", () -> String.valueOf(widget.getBounds()));
+ }
+ }
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java
index 555149b8e..81e2a93dd 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/type/EntryDefinition.java
@@ -29,6 +29,8 @@ import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagContainer;
@@ -75,5 +77,9 @@ public interface EntryDefinition<T> {
default <O> EntryDefinition<O> cast() {
return (EntryDefinition<O>) this;
}
+
+ default void fillCrashReport(CrashReport report, CrashReportCategory category, EntryStack<T> entry) {
+ category.setDetail("Entry definition class name", () -> getClass().getCanonicalName());
+ }
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/util/EntryIngredients.java b/api/src/main/java/me/shedaniel/rei/api/common/util/EntryIngredients.java
index dc34584c2..9af0218ec 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/util/EntryIngredients.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/util/EntryIngredients.java
@@ -49,6 +49,10 @@ public final class EntryIngredients {
return EntryIngredient.of(EntryStacks.of(stack));
}
+ public static EntryIngredient of(ItemLike stack, int amount) {
+ return EntryIngredient.of(EntryStacks.of(stack, amount));
+ }
+
public static EntryIngredient of(ItemStack stack) {
return EntryIngredient.of(EntryStacks.of(stack));
}
@@ -80,11 +84,15 @@ public final class EntryIngredients {
}
public static EntryIngredient ofItems(Collection<ItemLike> stacks) {
+ return ofItems(stacks, 1);
+ }
+
+ public static EntryIngredient ofItems(Collection<ItemLike> stacks, int amount) {
if (stacks.size() == 0) return EntryIngredient.empty();
- if (stacks.size() == 1) return EntryIngredient.of(EntryStacks.of(stacks.iterator().next()));
+ if (stacks.size() == 1) return EntryIngredient.of(EntryStacks.of(stacks.iterator().next(), amount));
EntryIngredient.Builder result = EntryIngredient.builder(stacks.size());
for (ItemLike stack : stacks) {
- result.add(EntryStacks.of(stack));
+ result.add(EntryStacks.of(stack, amount));
}
return result.build();
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/util/EntryStacks.java b/api/src/main/java/me/shedaniel/rei/api/common/util/EntryStacks.java
index 827db488c..10c3aaa6d 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/util/EntryStacks.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/util/EntryStacks.java
@@ -61,6 +61,10 @@ public final class EntryStacks {
return of(new ItemStack(item));
}
+ public static EntryStack<ItemStack> of(ItemLike item, int amount) {
+ return of(new ItemStack(item, amount));
+ }
+
/**
* Compares equality under the provided {@code context}.
* Prioritizes {@link me.shedaniel.rei.api.common.entry.type.EntryDefinition#equals(Object, Object, ComparisonContext)} then compares
diff --git a/gradle.properties b/gradle.properties
index 877337dee..a989f9f6e 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx3G
base_version=6.0
unstable=true
supported_version=1.17
-minecraft_version=1.17-pre2
+minecraft_version=1.17
forgeEnabled=false
forge_version=36.0.43
-fabricloader_version=0.11.3
+fabricloader_version=0.11.6
cloth_config_version=5.0.34
-modmenu_version=2.0.0-beta.7
-fabric_api=0.34.8+1.17
-architectury_version=2.0.5
+modmenu_version=2.0.2
+fabric_api=0.35.2+1.17
+architectury_version=2.0.9
api_exculde=
#api_include=me.shedaniel.cloth:cloth-events,me.shedaniel.cloth:config-2,me.sargunvohra.mcmods:autoconfig1u,org.jetbrains:annotations,net.fabricmc.fabric-api:fabric
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java
index 29bfeef7b..1fcd50f82 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/BatchedEntryRendererManager.java
@@ -31,6 +31,9 @@ import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.entry.renderer.BatchedEntryRenderer;
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer;
import me.shedaniel.rei.api.common.entry.EntryStack;
+import me.shedaniel.rei.impl.client.util.CrashReportUtils;
+import net.minecraft.CrashReport;
+import net.minecraft.ReportedException;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import org.apache.commons.lang3.mutable.MutableInt;
@@ -131,31 +134,55 @@ public class BatchedEntryRendererManager {
MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource();
int i = 0;
for (T entry : entries) {
- entry.drawBackground(matrices, mouseX, mouseY, delta);
+ try {
+ entry.drawBackground(matrices, mouseX, mouseY, delta);
+ } catch (Throwable throwable) {
+ CrashReport report = CrashReportUtils.essential(throwable, "Rendering entry background");
+ CrashReportUtils.renderer(report, entry);
+ throw new ReportedException(report);
+ }
}
firstRenderer.startBatch(first, extraData[0], matrices, delta);
for (T entry : entries) {
- @SuppressWarnings("rawtypes")
- EntryStack currentEntry = entry.getCurrentEntry();
- currentEntry.setZ(100);
- firstRenderer.renderBase(currentEntry, extraData[i++], matrices, immediate, entry.getInnerBounds(), mouseX, mouseY, delta);
- if (debugTime && !currentEntry.isEmpty()) size.increment();
+ try {
+ @SuppressWarnings("rawtypes")
+ EntryStack currentEntry = entry.getCurrentEntry();
+ currentEntry.setZ(100);
+ firstRenderer.renderBase(currentEntry, extraData[i++], matrices, immediate, entry.getInnerBounds(), mouseX, mouseY, delta);
+ if (debugTime && !currentEntry.isEmpty()) size.increment();
+ } catch (Throwable throwable) {
+ CrashReport report = CrashReportUtils.essential(throwable, "Rendering entry base");
+ CrashReportUtils.renderer(report, entry);
+ throw new ReportedException(report);
+ }
}
immediate.endBatch();
firstRenderer.afterBase(first, extraData[0], matrices, delta);
i = 0;
for (T entry : entries) {
- @SuppressWarnings("rawtypes")
- EntryStack currentEntry = entry.getCurrentEntry();
- firstRenderer.renderOverlay(currentEntry, extraData[i++], matrices, immediate, entry.getInnerBounds(), mouseX, mouseY, delta);
+ try {
+ @SuppressWarnings("rawtypes")
+ EntryStack currentEntry = entry.getCurrentEntry();
+ firstRenderer.renderOverlay(currentEntry, extraData[i++], matrices, immediate, entry.getInnerBounds(), mouseX, mouseY, delta);
+ } catch (Throwable throwable) {
+ CrashReport report = CrashReportUtils.essential(throwable, "Rendering entry base");
+ CrashReportUtils.renderer(report, entry);
+ throw new ReportedException(report);
+ }
}
immediate.endBatch();
for (T entry : entries) {
- if (entry.containsMouse(mouseX, mouseY)) {
- entry.queueTooltip(matrices, mouseX, mouseY, delta);
- entry.drawHighlighted(matrices, mouseX, mouseY, delta);
+ try {
+ if (entry.containsMouse(mouseX, mouseY)) {
+ entry.queueTooltip(matrices, mouseX, mouseY, delta);
+ entry.drawHighlighted(matrices, mouseX, mouseY, delta);
+ }
+ entry.drawExtra(matrices, mouseX, mouseY, delta);
+ } catch (Throwable throwable) {
+ CrashReport report = CrashReportUtils.essential(throwable, "Rendering entry extra");
+ CrashReportUtils.renderer(report, entry);
+ throw new ReportedException(report);
}
- entry.drawExtra(matrices, mouseX, mouseY, delta);
}
if (debugTime) time.add(System.nanoTime() - l);
firstRenderer.endBatch(first, extraData[0], matrices, delta);
@@ -165,12 +192,18 @@ public class BatchedEntryRendererManager {
for (T entry : entries) {
if (entry.getCurrentEntry().isEmpty())
continue;
- if (debugTime) {
- size.increment();
- long l = System.nanoTime();
- entry.render(matrices, mouseX, mouseY, delta);
- time.add(System.nanoTime() - l);
- } else entry.render(matrices, mouseX, mouseY, delta);
+ try {
+ if (debugTime) {
+ size.increment();
+ long l = System.nanoTime();
+ entry.render(matrices, mouseX, mouseY, delta);
+ time.add(System.nanoTime() - l);
+ } else entry.render(matrices, mouseX, mouseY, delta);
+ } catch (Throwable throwable) {
+ CrashReport report = CrashReportUtils.essential(throwable, "Rendering entry");
+ CrashReportUtils.renderer(report, entry);
+ throw new ReportedException(report);
+ }
}
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
index a26a6fbc2..781db8d0c 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
@@ -43,6 +43,8 @@ import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.impl.client.REIRuntimeImpl;
import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.resources.language.I18n;
@@ -482,4 +484,20 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
render(matrices, mouseX, mouseY, delta);
getBounds().setBounds(clone);
}
+
+ @Override
+ public void fillCrashReport(CrashReport report, CrashReportCategory category) {
+ super.fillCrashReport(report, category);
+ category.setDetail("Notice mark", () -> String.valueOf(getNoticeMark()));
+ category.setDetail("Interactable", () -> String.valueOf(isInteractable()));
+ category.setDetail("Interactable favorites", () -> String.valueOf(isInteractableFavorites()));
+ category.setDetail("Highlight enabled", () -> String.valueOf(isHighlightEnabled()));
+ category.setDetail("Tooltip enabled", () -> String.valueOf(isTooltipsEnabled()));
+ category.setDetail("Background enabled", () -> String.valueOf(isBackgroundEnabled()));
+ category.setDetail("Entries count", () -> String.valueOf(entryStacks.size()));
+ EntryStack<?> currentEntry = getCurrentEntry();
+
+ CrashReportCategory entryCategory = report.addCategory("Current Rendering Entry");
+ currentEntry.fillCrashReport(report, entryCategory);
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/util/CrashReportUtils.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/CrashReportUtils.java
new file mode 100644
index 000000000..c3c66ab13
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/CrashReportUtils.java
@@ -0,0 +1,57 @@
+/*
+ * 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.impl.client.util;
+
+import me.shedaniel.rei.api.client.gui.Renderer;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.screens.Screen;
+
+public class CrashReportUtils {
+ public static CrashReport essential(Throwable throwable, String task) {
+ CrashReport report = CrashReport.forThrowable(throwable, "Rendering background of entry");
+ screen(report, Minecraft.getInstance().screen);
+ return report;
+ }
+
+ private static void screen(CrashReport report, Screen screen) {
+ if (screen != null) {
+ CrashReportCategory category = report.addCategory("Screen details");
+ String screenName = screen.getClass().getCanonicalName();
+ category.setDetail("Screen name", () -> screenName);
+ }
+ }
+
+ public static void renderer(CrashReport report, Renderer renderer) {
+ if (renderer != null) {
+ CrashReportCategory category = report.addCategory("Renderer details");
+ try {
+ renderer.fillCrashReport(report, category);
+ } catch (Throwable throwable) {
+ category.setDetailError("Filling Report", throwable);
+ }
+ }
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java
index ae09bcd7e..20194e7a7 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java
@@ -38,6 +38,8 @@ import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.EntryStacks;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
@@ -200,4 +202,19 @@ public abstract class AbstractEntryStack<A> extends AbstractRenderer implements
public Component asFormattedText() {
return getDefinition().asFormattedText(this, getValue());
}
+
+ @Override
+ public void fillCrashReport(CrashReport report, CrashReportCategory category) {
+ super.fillCrashReport(report, category);
+ category.setDetail("Entry type", () -> String.valueOf(getType().getId()));
+ category.setDetail("Is empty", () -> String.valueOf(isEmpty()));
+ category.setDetail("Entry identifier", () -> String.valueOf(getIdentifier()));
+
+ CrashReportCategory rendererCategory = report.addCategory("Entry Renderer");
+ try {
+ getDefinition().fillCrashReport(report, rendererCategory, this);
+ } catch (Throwable throwable) {
+ rendererCategory.setDetailError("Filling Report", throwable);
+ }
+ }
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
index 121c49c18..90e1da0bd 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.plugin.client.entry;
+import com.google.common.base.Suppliers;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack;
import dev.architectury.fluid.FluidStack;
@@ -47,10 +48,14 @@ import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.ChatFormatting;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
+import net.minecraft.client.renderer.texture.MissingTextureAtlasSprite;
import net.minecraft.client.renderer.texture.OverlayTexture;
+import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.core.Registry;
@@ -69,6 +74,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -174,7 +180,21 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
return collection == null ? Collections.emptyList() : collection.getMatchingTags(value.getFluid());
}
+ @Override
+ public void fillCrashReport(CrashReport report, CrashReportCategory category, EntryStack<FluidStack> entry) {
+ EntryDefinition.super.fillCrashReport(report, category, entry);
+ FluidStack stack = entry.getValue();
+ category.setDetail("Fluid Type", () -> String.valueOf(Registry.FLUID.getKey(stack.getFluid())));
+ category.setDetail("Fluid Amount", () -> String.valueOf(stack.getAmount()));
+ category.setDetail("Fluid NBT", () -> String.valueOf(stack.getTag()));
+ }
+
public static class FluidEntryRenderer extends AbstractEntryRenderer<FluidStack> implements BatchedEntryRenderer<FluidStack, TextureAtlasSprite> {
+ private static final Supplier<TextureAtlasSprite> MISSING_SPRITE = Suppliers.memoize(() -> {
+ TextureAtlas atlas = Minecraft.getInstance().getModelManager().getAtlas(TextureAtlas.LOCATION_BLOCKS);
+ return atlas.getSprite(MissingTextureAtlasSprite.getLocation());
+ });
+
@Override
public TextureAtlasSprite getExtraData(EntryStack<FluidStack> entry) {
FluidStack stack = entry.getValue();
@@ -182,6 +202,10 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
return FluidStackHooks.getStillTexture(stack);
}
+ private TextureAtlasSprite missingTexture() {
+ return MISSING_SPRITE.get();
+ }
+
@Override
public int getBatchIdentifier(EntryStack<FluidStack> entry, Rectangle bounds, TextureAtlasSprite extraData) {
return 0;
@@ -192,16 +216,17 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
@Override
public void renderBase(EntryStack<FluidStack> entry, TextureAtlasSprite sprite, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) {
+ TextureAtlasSprite s = sprite == null ? missingTexture() : sprite;
SpriteRenderer.beginPass()
.setup(immediate, RenderType.solid())
- .sprite(sprite)
- .color(FluidStackHooks.getColor(entry.getValue()))
+ .sprite(s)
+ .color(sprite == null ? 0xFFFFFF : FluidStackHooks.getColor(entry.getValue()))
.light(0x00f000f0)
.overlay(OverlayTexture.NO_OVERLAY)
.alpha(0xff)
.normal(matrices.last().normal(), 0, 0, 0)
.position(matrices.last().pose(), bounds.x, bounds.getMaxY() - bounds.height * Mth.clamp(entry.get(EntryStack.Settings.FLUID_RENDER_RATIO), 0, 1), bounds.getMaxX(), bounds.getMaxY(), entry.getZ())
- .next(InventoryMenu.BLOCK_ATLAS);
+ .next(s.atlas().location());
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
index cc3a57941..ba5e0c08f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java
@@ -48,6 +48,8 @@ import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.ImmutableTextComponent;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.CrashReport;
+import net.minecraft.CrashReportCategory;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.ItemTransforms;
@@ -194,6 +196,16 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
return Lists.newArrayList(asFormattedText(entry, value));
}
+ @Override
+ public void fillCrashReport(CrashReport report, CrashReportCategory category, EntryStack<ItemStack> entry) {
+ EntryDefinition.super.fillCrashReport(report, category, entry);
+ ItemStack stack = entry.getValue();
+ category.setDetail("Item Type", () -> String.valueOf(stack.getItem()));
+ category.setDetail("Item Damage", () -> String.valueOf(stack.getDamageValue()));
+ category.setDetail("Item NBT", () -> String.valueOf(stack.getTag()));
+ category.setDetail("Item Foil", () -> String.valueOf(stack.hasFoil()));
+ }
+
@Environment(EnvType.CLIENT)
public class ItemEntryRenderer extends AbstractEntryRenderer<ItemStack> implements BatchedEntryRenderer<ItemStack, BakedModel> {
private static final float SCALE = 20.0F;