diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-06-20 21:54:39 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-06-20 21:54:39 +0800 |
| commit | 06c695df2c1ae92ddd71dfa23491d7554387156c (patch) | |
| tree | 77b10b982eaeedf38553833cf6c60a730fcfcf56 /runtime/src/main/java/me/shedaniel/rei/plugin | |
| parent | 0239bf2fb623863164da37df7f059d29805ed1b9 (diff) | |
| download | RoughlyEnoughItems-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')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java | 31 | ||||
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java | 12 |
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; |
