fix icon rendering
This commit is contained in:
@@ -18,7 +18,7 @@ loader_version_range=[2,)
|
|||||||
mod_id=l2core
|
mod_id=l2core
|
||||||
mod_name=L2Core
|
mod_name=L2Core
|
||||||
mod_license=LGPL-2.1
|
mod_license=LGPL-2.1
|
||||||
mod_version=3.0.7+20
|
mod_version=3.0.7+21
|
||||||
mod_group_id=dev.xkmc
|
mod_group_id=dev.xkmc
|
||||||
mod_authors=lcy0x1
|
mod_authors=lcy0x1
|
||||||
mod_description=Core Library mod for all L2 mods
|
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.L2Core;
|
||||||
import dev.xkmc.l2core.init.L2LibReg;
|
import dev.xkmc.l2core.init.L2LibReg;
|
||||||
import dev.xkmc.l2core.util.Proxy;
|
import dev.xkmc.l2core.util.Proxy;
|
||||||
|
import net.minecraft.Util;
|
||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.AbstractClientPlayer;
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
@@ -38,6 +39,9 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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)
|
@EventBusSubscriber(value = Dist.CLIENT, modid = L2Core.MODID, bus = EventBusSubscriber.Bus.GAME)
|
||||||
public class ClientEffectRenderEvents {
|
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
|
@SubscribeEvent
|
||||||
public static void levelRenderLast(RenderLevelStageEvent event) {
|
public static void levelRenderLast(RenderLevelStageEvent event) {
|
||||||
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_WEATHER) return;
|
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_WEATHER) return;
|
||||||
|
|
||||||
|
DUMMY.setupRenderState();
|
||||||
|
DUMMY.clearRenderState();
|
||||||
|
|
||||||
LevelRenderer renderer = event.getLevelRenderer();
|
LevelRenderer renderer = event.getLevelRenderer();
|
||||||
MultiBufferSource.BufferSource buffers = Minecraft.getInstance().renderBuffers().bufferSource();
|
MultiBufferSource.BufferSource buffers = Minecraft.getInstance().renderBuffers().bufferSource();
|
||||||
Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera();
|
Camera camera = Minecraft.getInstance().gameRenderer.getMainCamera();
|
||||||
PoseStack stack = event.getPoseStack();
|
PoseStack stack = event.getPoseStack();
|
||||||
|
float pTick = event.getPartialTick().getGameTimeDeltaPartialTick(true);
|
||||||
Map<ResourceLocation, List<DelayedEntityRender>> map = new HashMap<>();
|
Map<ResourceLocation, List<DelayedEntityRender>> map = new HashMap<>();
|
||||||
for (var e : ICONS) map.computeIfAbsent(e.rl(), k -> new ArrayList<>()).add(e);
|
for (var e : ICONS) map.computeIfAbsent(e.rl(), k -> new ArrayList<>()).add(e);
|
||||||
for (var ent : map.entrySet()) {
|
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()) {
|
for (var e : ent.getValue()) {
|
||||||
renderIcon(stack, vc, e,
|
renderIcon(stack, vc, e, pTick, camera, renderer.entityRenderDispatcher);
|
||||||
event.getPartialTick().getGameTimeDeltaPartialTick(true),
|
|
||||||
camera, renderer.entityRenderDispatcher);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buffers.endBatch();
|
|
||||||
|
|
||||||
ICONS.clear();
|
ICONS.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,20 +179,6 @@ public class ClientEffectRenderEvents {
|
|||||||
builder.addVertex(entry.pose(), x, y, 0).setUv(u, v);
|
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) {
|
public static void sync(EffectToClient eff) {
|
||||||
if (Minecraft.getInstance().level == null) return;
|
if (Minecraft.getInstance().level == null) return;
|
||||||
Entity e = Minecraft.getInstance().level.getEntity(eff.entity());
|
Entity e = Minecraft.getInstance().level.getEntity(eff.entity());
|
||||||
|
|||||||
Reference in New Issue
Block a user