fix icon rendering
This commit is contained in:
@@ -18,7 +18,7 @@ loader_version_range=[2,)
|
||||
mod_id=l2core
|
||||
mod_name=L2Core
|
||||
mod_license=LGPL-2.1
|
||||
mod_version=3.0.7+20
|
||||
mod_version=3.0.7+21
|
||||
mod_group_id=dev.xkmc
|
||||
mod_authors=lcy0x1
|
||||
mod_description=Core Library mod for all L2 mods
|
||||
|
||||
@@ -14,6 +14,7 @@ import dev.xkmc.l2core.base.effects.api.IconRenderRegion;
|
||||
import dev.xkmc.l2core.init.L2Core;
|
||||
import dev.xkmc.l2core.init.L2LibReg;
|
||||
import dev.xkmc.l2core.util.Proxy;
|
||||
import net.minecraft.Util;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.AbstractClientPlayer;
|
||||
@@ -38,6 +39,9 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static net.minecraft.client.renderer.RenderStateShard.POSITION_TEX_SHADER;
|
||||
|
||||
@EventBusSubscriber(value = Dist.CLIENT, modid = L2Core.MODID, bus = EventBusSubscriber.Bus.GAME)
|
||||
public class ClientEffectRenderEvents {
|
||||
@@ -56,26 +60,44 @@ public class ClientEffectRenderEvents {
|
||||
}
|
||||
}
|
||||
|
||||
private static final RenderType DUMMY = RenderType.create(
|
||||
"entity_icon_preparation", DefaultVertexFormat.POSITION_TEX,
|
||||
VertexFormat.Mode.QUADS, 256, false, false,
|
||||
RenderType.CompositeState.builder().createCompositeState(false)
|
||||
);
|
||||
|
||||
private static final Function<ResourceLocation, RenderType> ICON_TYPE = Util.memoize(rl -> RenderType.create(
|
||||
"entity_body_icon",
|
||||
DefaultVertexFormat.POSITION_TEX,
|
||||
VertexFormat.Mode.QUADS, 256, false, false,
|
||||
RenderType.CompositeState.builder()
|
||||
.setShaderState(POSITION_TEX_SHADER)
|
||||
.setTextureState(new RenderStateShard.TextureStateShard(rl, false, false))
|
||||
.setTransparencyState(RenderStateShard.ADDITIVE_TRANSPARENCY)
|
||||
.setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
|
||||
.createCompositeState(false)
|
||||
));
|
||||
|
||||
@SubscribeEvent
|
||||
public static void levelRenderLast(RenderLevelStageEvent event) {
|
||||
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_WEATHER) return;
|
||||
|
||||
DUMMY.setupRenderState();
|
||||
DUMMY.clearRenderState();
|
||||
|
||||
LevelRenderer renderer = event.getLevelRenderer();
|
||||
MultiBufferSource.BufferSource buffers = Minecraft.getInstance().renderBuffers().bufferSource();
|
||||
Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera();
|
||||
PoseStack stack = event.getPoseStack();
|
||||
|
||||
float pTick = event.getPartialTick().getGameTimeDeltaPartialTick(true);
|
||||
Map<ResourceLocation, List<DelayedEntityRender>> map = new HashMap<>();
|
||||
for (var e : ICONS) map.computeIfAbsent(e.rl(), k -> new ArrayList<>()).add(e);
|
||||
for (var ent : map.entrySet()) {
|
||||
VertexConsumer vc = buffers.getBuffer(get2DIcon(ent.getKey()));
|
||||
VertexConsumer vc = buffers.getBuffer(ICON_TYPE.apply(ent.getKey()));
|
||||
for (var e : ent.getValue()) {
|
||||
renderIcon(stack, vc, e,
|
||||
event.getPartialTick().getGameTimeDeltaPartialTick(true),
|
||||
camera, renderer.entityRenderDispatcher);
|
||||
renderIcon(stack, vc, e, pTick, camera, renderer.entityRenderDispatcher);
|
||||
}
|
||||
}
|
||||
buffers.endBatch();
|
||||
|
||||
ICONS.clear();
|
||||
}
|
||||
|
||||
@@ -157,20 +179,6 @@ public class ClientEffectRenderEvents {
|
||||
builder.addVertex(entry.pose(), x, y, 0).setUv(u, v);
|
||||
}
|
||||
|
||||
public static RenderType get2DIcon(ResourceLocation rl) {
|
||||
return RenderType.create(
|
||||
"entity_body_icon",
|
||||
DefaultVertexFormat.POSITION_TEX,
|
||||
VertexFormat.Mode.QUADS, 256, false, true,
|
||||
RenderType.CompositeState.builder()
|
||||
.setShaderState(RenderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER)
|
||||
.setTextureState(new RenderStateShard.TextureStateShard(rl, false, false))
|
||||
.setTransparencyState(RenderStateShard.ADDITIVE_TRANSPARENCY)
|
||||
.setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
|
||||
.createCompositeState(false)
|
||||
);
|
||||
}
|
||||
|
||||
public static void sync(EffectToClient eff) {
|
||||
if (Minecraft.getInstance().level == null) return;
|
||||
Entity e = Minecraft.getInstance().level.getEntity(eff.entity());
|
||||
|
||||
Reference in New Issue
Block a user