From 513347f841a401391f59b4c9fe3cbcb4f554f86d Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 12 Apr 2021 00:36:08 +0800 Subject: Prepare for true sided REI Signed-off-by: shedaniel --- .../rei/plugin/client/entry/FluidEntryDefinition.java | 13 ++++++++++++- .../rei/plugin/client/entry/ItemEntryDefinition.java | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin/client') 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 d0d162777..eadb3f947 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 @@ -28,6 +28,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.architectury.hooks.FluidStackHooks; import me.shedaniel.architectury.platform.Platform; +import me.shedaniel.architectury.utils.Env; +import me.shedaniel.architectury.utils.EnvExecutor; import me.shedaniel.architectury.utils.Fraction; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; @@ -42,6 +44,8 @@ import me.shedaniel.rei.api.common.entry.type.EntryDefinition; import me.shedaniel.rei.api.common.entry.type.EntryType; import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; import me.shedaniel.rei.api.common.util.EntryStacks; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; @@ -58,6 +62,7 @@ import net.minecraft.tags.TagCollection; import net.minecraft.tags.TagContainer; import net.minecraft.util.Mth; import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.Nullable; @@ -70,7 +75,12 @@ import java.util.stream.Stream; public class FluidEntryDefinition implements EntryDefinition, EntrySerializer { private static final String FLUID_AMOUNT = Platform.isForge() ? "tooltip.rei.fluid_amount.forge" : "tooltip.rei.fluid_amount"; - private final EntryRenderer renderer = new FluidEntryRenderer(); + @Environment(EnvType.CLIENT) + private EntryRenderer renderer; + + public FluidEntryDefinition() { + EnvExecutor.runInEnv(Env.CLIENT, () -> () -> renderer = new FluidEntryRenderer()); + } @Override public Class getValueType() { @@ -83,6 +93,7 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS } @Override + @Environment(EnvType.CLIENT) public EntryRenderer getRenderer() { return renderer; } 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 a6a102ea8..d3c666b68 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 @@ -30,6 +30,8 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import it.unimi.dsi.fastutil.objects.ReferenceSet; +import me.shedaniel.architectury.utils.Env; +import me.shedaniel.architectury.utils.EnvExecutor; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.entry.renderer.AbstractEntryRenderer; @@ -44,6 +46,8 @@ import me.shedaniel.rei.api.common.entry.type.EntryDefinition; import me.shedaniel.rei.api.common.entry.type.EntryType; 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.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; @@ -67,7 +71,12 @@ import java.util.Collections; import java.util.List; public class ItemEntryDefinition implements EntryDefinition, EntrySerializer { - private final EntryRenderer renderer = new ItemEntryRenderer(); + @Environment(EnvType.CLIENT) + private EntryRenderer renderer; + + public ItemEntryDefinition() { + EnvExecutor.runInEnv(Env.CLIENT, () -> () -> renderer = new ItemEntryRenderer()); + } @Override public Class getValueType() { @@ -80,6 +89,7 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer } @Override + @Environment(EnvType.CLIENT) public EntryRenderer getRenderer() { return renderer; } @@ -185,6 +195,7 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer } @SuppressWarnings("deprecation") + @Environment(EnvType.CLIENT) public class ItemEntryRenderer extends AbstractEntryRenderer implements BatchedEntryRenderer { @Override public int getBatchIdentifier(EntryStack entry, Rectangle bounds) { -- cgit From 5467c2f08da6f3c6dae7ae603e3708d4f6eb1638 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 12 Apr 2021 21:30:18 +0800 Subject: Fix #502 and Fix #499 Signed-off-by: shedaniel --- .../me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin/client') 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 eadb3f947..9344eb9e8 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 @@ -212,7 +212,7 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS List toolTip = Lists.newArrayList(entry.asFormattedText()); Fraction amount = entry.getValue().getAmount(); if (!amount.isLessThan(Fraction.zero())) { - String amountTooltip = I18n.get(FLUID_AMOUNT, EntryStacks.simplifyAmount(entry).getValue().getAmount()); + String amountTooltip = I18n.get(FLUID_AMOUNT, simplifyAmount(entry).getValue().getAmount()); if (amountTooltip != null) { toolTip.addAll(Stream.of(amountTooltip.split("\n")).map(TextComponent::new).collect(Collectors.toList())); } @@ -224,4 +224,9 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS return Tooltip.create(toolTip); } } + + public static EntryStack simplifyAmount(EntryStack stack) { + stack.getValue().setAmount(stack.getValue().getAmount().simplify()); + return stack; + } } -- cgit From d892547a9b8a8ae85655900c08b6cc97c6aa2050 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 14 Apr 2021 17:33:29 +0800 Subject: Pass the BakedModel as an extra data Signed-off-by: shedaniel --- .../plugin/client/entry/ItemEntryDefinition.java | 27 ++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin/client') 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 d3c666b68..8742000eb 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 @@ -196,18 +196,21 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer @SuppressWarnings("deprecation") @Environment(EnvType.CLIENT) - public class ItemEntryRenderer extends AbstractEntryRenderer implements BatchedEntryRenderer { + public class ItemEntryRenderer extends AbstractEntryRenderer implements BatchedEntryRenderer { + public static final int ITEM_LIGHT = 0xf000f0; + @Override - public int getBatchIdentifier(EntryStack entry, Rectangle bounds) { - return 1738923 + (getModelFromStack(entry.getValue()).usesBlockLight() ? 1 : 0); + public BakedModel getExtraData(EntryStack entry) { + return Minecraft.getInstance().getItemRenderer().getModel(entry.getValue(), null, null); } - private BakedModel getModelFromStack(ItemStack stack) { - return Minecraft.getInstance().getItemRenderer().getModel(stack, null, null); + @Override + public int getBatchIdentifier(EntryStack entry, Rectangle bounds, BakedModel model) { + return 1738923 + (model.usesBlockLight() ? 1 : 0); } @Override - public void startBatch(EntryStack entry, PoseStack matrices, float delta) { + public void startBatch(EntryStack entry, BakedModel model, PoseStack matrices, float delta) { Minecraft.getInstance().getTextureManager().bind(TextureAtlas.LOCATION_BLOCKS); Minecraft.getInstance().getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS).setFilter(false, false); RenderSystem.pushMatrix(); @@ -217,25 +220,25 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer RenderSystem.enableBlend(); RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - boolean sideLit = getModelFromStack(entry.getValue()).usesBlockLight(); + boolean sideLit = model.usesBlockLight(); if (!sideLit) Lighting.setupForFlatItems(); } @Override - public void renderBase(EntryStack entry, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) { + public void renderBase(EntryStack entry, BakedModel model, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) { if (!entry.isEmpty()) { ItemStack stack = entry.getValue(); matrices.pushPose(); matrices.translate(bounds.getCenterX(), bounds.getCenterY(), 100.0F + entry.getZ()); matrices.scale(bounds.getWidth(), (bounds.getWidth() + bounds.getHeight()) / -2f, bounds.getHeight()); - Minecraft.getInstance().getItemRenderer().render(stack, ItemTransforms.TransformType.GUI, false, matrices, immediate, 15728880, OverlayTexture.NO_OVERLAY, getModelFromStack(stack)); + Minecraft.getInstance().getItemRenderer().render(stack, ItemTransforms.TransformType.GUI, false, matrices, immediate, ITEM_LIGHT, OverlayTexture.NO_OVERLAY, model); matrices.popPose(); } } @Override - public void renderOverlay(EntryStack entry, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) { + public void renderOverlay(EntryStack entry, BakedModel model, PoseStack matrices, MultiBufferSource.BufferSource immediate, Rectangle bounds, int mouseX, int mouseY, float delta) { if (!entry.isEmpty()) { Minecraft.getInstance().getItemRenderer().blitOffset = entry.getZ(); Minecraft.getInstance().getItemRenderer().renderGuiItemDecorations(Minecraft.getInstance().font, entry.getValue(), bounds.x, bounds.y, null); @@ -244,11 +247,11 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer } @Override - public void endBatch(EntryStack entry, PoseStack matrices, float delta) { + public void endBatch(EntryStack entry, BakedModel model, PoseStack matrices, float delta) { RenderSystem.enableDepthTest(); RenderSystem.disableAlphaTest(); RenderSystem.disableRescaleNormal(); - boolean sideLit = getModelFromStack(entry.getValue()).usesBlockLight(); + boolean sideLit = model.usesBlockLight(); if (!sideLit) Lighting.setupFor3DItems(); RenderSystem.popMatrix(); -- cgit