aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/plugin/client
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 /runtime/src/main/java/me/shedaniel/rei/plugin/client
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
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin/client')
-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
2 files changed, 40 insertions, 3 deletions
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;