Skip to content

Commit

Permalink
Refactored render events
Browse files Browse the repository at this point in the history
  • Loading branch information
Hendrix-Shen committed May 20, 2023
1 parent cbc15bb commit 2b20e19
Show file tree
Hide file tree
Showing 13 changed files with 138 additions and 77 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package top.hendrixshen.magiclib.event.render.api;

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import top.hendrixshen.magiclib.event.render.impl.RenderContext;

import java.util.function.Supplier;

@Environment(EnvType.CLIENT)
interface IRenderEvent<T> {
default Supplier<String> getProfilerSectionSupplier() {
return () -> this.getClass().getName();
}

void render(T obj, RenderContext context, float tickDelta);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package top.hendrixshen.magiclib.render.api;
package top.hendrixshen.magiclib.event.render.api;

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.world.entity.Entity;
import top.hendrixshen.magiclib.render.impl.RenderContext;
import top.hendrixshen.magiclib.event.render.impl.RenderContext;

@Environment(EnvType.CLIENT)
@FunctionalInterface
public interface IPostRenderEntityRenderer {
@Environment(EnvType.CLIENT)
public interface PostRenderEntityEvent extends IRenderEvent<Entity> {
@Override
void render(Entity entity, RenderContext context, float tickDelta);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package top.hendrixshen.magiclib.render.api;
package top.hendrixshen.magiclib.event.render.api;

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.world.level.Level;
import top.hendrixshen.magiclib.render.impl.RenderContext;
import top.hendrixshen.magiclib.event.render.impl.RenderContext;

@Environment(EnvType.CLIENT)
@FunctionalInterface
public interface IPostRenderLevelRenderer {
@Environment(EnvType.CLIENT)
public interface PostRenderLevelEvent extends IRenderEvent<Level> {
@Override
void render(Level level, RenderContext context, float tickDelta);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package top.hendrixshen.magiclib.render.impl;
package top.hendrixshen.magiclib.event.render.impl;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
Expand Down Expand Up @@ -62,6 +62,14 @@ public void blendFunc(GlStateManager.SourceFactor srcFactor, GlStateManager.Dest
RenderSystem.blendFunc(srcFactor, dstFactor);
}

public void color4f(float red, float green, float blue, float alpha) {
//#if MC > 11605
RenderSystem.setShaderColor(red, green, blue, alpha);
//#else
//$$ RenderSystem.color4f(red, green, blue, alpha);
//#endif
}

//#if MC < 11904
//$$ public void enableTexture() {
//$$ RenderSystem.enableTexture();
Expand All @@ -77,10 +85,4 @@ public void blendFunc(GlStateManager.SourceFactor srcFactor, GlStateManager.Dest
//$$ RenderSystem.disableLighting();
//$$ }
//#endif

//#if MC < 11600
//$$ public void color4f(float red, float green, float blue, float alpha) {
//$$ RenderSystem.color4f(red, green, blue, alpha);
//$$ }
//#endif
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package top.hendrixshen.magiclib.event.render.impl;

import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import top.hendrixshen.magiclib.event.render.api.PostRenderEntityEvent;
import top.hendrixshen.magiclib.event.render.api.PostRenderLevelEvent;

import java.util.List;

public class RenderEventHandler {
@Getter
private static final RenderEventHandler instance = new RenderEventHandler();
private static final Minecraft mc = Minecraft.getInstance();
private static final List<PostRenderEntityEvent> postRenderEntityEvents = Lists.newArrayList();
private static final List<PostRenderLevelEvent> postRenderLevelEvents = Lists.newArrayList();

public static void registerPostRenderEntityEvent(PostRenderEntityEvent event) {
RenderEventHandler.postRenderEntityEvents.add(event);
}

public static void registerPostRenderLevelEvent(PostRenderLevelEvent event) {
RenderEventHandler.postRenderLevelEvents.add(event);
}

public void dispatchPostRenderEntityEvent(Entity entity, PoseStack poseStack, float tickDelta) {
if (!RenderEventHandler.postRenderEntityEvents.isEmpty()) {
mc.getProfiler().push("MagicRenderEventHandler::dispatchPostRenderEntityEvent");
RenderContext renderContext = new RenderContext(poseStack);
RenderEventHandler.postRenderEntityEvents.forEach(event -> {
mc.getProfiler().push(event.getProfilerSectionSupplier());
event.render(entity, renderContext, tickDelta);
mc.getProfiler().pop();
});
mc.getProfiler().pop();
}
}

public void dispatchPostRenderLevelEvent(Level level, PoseStack poseStack, float tickDelta) {
if (!RenderEventHandler.postRenderLevelEvents.isEmpty()) {
mc.getProfiler().popPush("MagicRenderEventHandler::dispatchPostRenderLevelEvent");
RenderContext renderContext = new RenderContext(poseStack);
RenderEventHandler.postRenderLevelEvents.forEach(event -> {
mc.getProfiler().push(event.getProfilerSectionSupplier());
event.render(level, renderContext, tickDelta);
mc.getProfiler().pop();
});
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package top.hendrixshen.magiclib.render.mixin;
package top.hendrixshen.magiclib.event.render.mixin;

import com.mojang.blaze3d.vertex.PoseStack;
import net.fabricmc.api.EnvType;
Expand All @@ -9,7 +9,7 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import top.hendrixshen.magiclib.render.impl.RenderEventHandler;
import top.hendrixshen.magiclib.event.render.impl.RenderEventHandler;

//#if MC > 11404
import net.minecraft.client.renderer.MultiBufferSource;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package top.hendrixshen.magiclib.render.mixin;
package top.hendrixshen.magiclib.event.render.mixin;

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand All @@ -13,7 +13,7 @@
//$$ import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Inject;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//$$ import top.hendrixshen.magiclib.render.impl.RenderEventHandler;
//$$ import top.hendrixshen.magiclib.event.render.impl.RenderEventHandler;
//$$ import top.hendrixshen.magiclib.util.MiscUtil;
//#endif

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package top.hendrixshen.magiclib.render.mixin;
package top.hendrixshen.magiclib.event.render.mixin;

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand All @@ -16,7 +16,7 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import top.hendrixshen.magiclib.render.impl.RenderEventHandler;
import top.hendrixshen.magiclib.event.render.impl.RenderEventHandler;
//#else
//$$ import top.hendrixshen.magiclib.compat.preprocess.api.DummyClass;
//#endif
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package top.hendrixshen.magiclib.render.impl;

import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.NotNull;
import org.joml.Matrix4f;
import top.hendrixshen.magiclib.event.render.impl.RenderContext;

import java.util.Objects;

public class CameraPositionTransformer {
private final Vec3 pos;
private RenderContext context;

public CameraPositionTransformer(Vec3 pos) {
this.pos = pos;
}

public void apply(@NotNull RenderContext context) {
this.context = context;
Minecraft mc = Minecraft.getInstance();
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 vec3 = this.pos.subtract(camera.getPosition());
context.pushMatrix();
context.translate(vec3.x(), vec3.y(), vec3.z());
//#if MC > 11902
context.mulPoseMatrix(new Matrix4f().rotation(camera.rotationCompat()));
//#else
//$$ new Matrix4f(camera.rotationCompat());
//#endif
}

public void restore() {
Objects.requireNonNull(this.context);
this.context.popMatrix();
this.context = null;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.jetbrains.annotations.NotNull;
import org.joml.Matrix4f;
import top.hendrixshen.magiclib.compat.minecraft.api.network.chat.ComponentCompatApi;
import top.hendrixshen.magiclib.event.render.impl.RenderContext;

import java.util.Collections;
import java.util.List;
Expand All @@ -36,6 +37,7 @@ public class TextRenderer {
private boolean shadow = false;
private boolean seeThrough = false;

@SuppressWarnings("UnnecessaryLocalVariable")
public void render(RenderContext context) {
if (this.lines.isEmpty()) {
return;
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@
},
"mixins": [
"${mod_id}-carpet.mixins.json",
"${mod_id}-event.mixins.json",
"${mod_id}-i18n.mixins.json",
"${mod_id}-malilib.mixins.json",
"${mod_id}-minecraft-compat-api.mixins.json",
"${mod_id}-render.mixins.json"
"${mod_id}-minecraft-compat-api.mixins.json"
],
"depends": {
"minecraft": "${minecraft_dependency}"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"required": true,
"package": "top.hendrixshen.magiclib.render.mixin",
"package": "top.hendrixshen.magiclib.event.render.mixin",
"plugin": "top.hendrixshen.magiclib.MagicLibMixinPlugin",
"minVersion": "0.8",
"compatibilityLevel": "JAVA_8",
Expand Down

0 comments on commit 2b20e19

Please sign in to comment.