./gradlew :1.15.2:setCoreVersion
Also `./gradlew :jGui:1.15.2:setCoreVersion`.
This commit is contained in:
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class MixinShaderEntityRenderer {
|
||||
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderCenter", at = @At("HEAD"))
|
||||
@Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "updateCameraAndRender(FJ)V", at = @At("HEAD"))
|
||||
|
||||
@@ -9,9 +9,9 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk.class)
|
||||
@Mixin(net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk.class)
|
||||
//#else
|
||||
@Mixin(net.minecraft.client.render.chunk.ChunkRenderer.class)
|
||||
//$$ @Mixin(net.minecraft.client.render.chunk.ChunkRenderer.class)
|
||||
//#endif
|
||||
public abstract class MixinShaderRenderChunk {
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//#else
|
||||
import net.minecraft.client.render.VisibleRegion;
|
||||
//$$ import net.minecraft.client.render.VisibleRegion;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -31,7 +31,7 @@ public abstract class MixinShaderRenderGlobal {
|
||||
@Shadow
|
||||
public boolean needsTerrainUpdate;
|
||||
|
||||
@Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true)
|
||||
public void replayModCompat_setupTerrain(
|
||||
//#if MC>=11400
|
||||
Camera viewEntity,
|
||||
@@ -44,10 +44,10 @@ public abstract class MixinShaderRenderGlobal {
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=11500
|
||||
//$$ Frustum camera,
|
||||
//$$ boolean skipUpdate,
|
||||
Frustum camera,
|
||||
boolean skipUpdate,
|
||||
//#else
|
||||
VisibleRegion camera,
|
||||
//$$ VisibleRegion camera,
|
||||
//#endif
|
||||
int frameCount,
|
||||
boolean playerSpectator,
|
||||
|
||||
@@ -445,7 +445,7 @@ public class ReplayMod implements
|
||||
// Fail-fast in case we ever switch to async loading and forget to change this
|
||||
// (except for fabric 1.15+ because it loads the mod before the client thread is set)
|
||||
//#if FABRIC<1 || MC<11500
|
||||
{ if (!MinecraftClient.getInstance().isOnThread()) throw new RuntimeException(); }
|
||||
//$$ { if (!MinecraftClient.getInstance().isOnThread()) throw new RuntimeException(); }
|
||||
//#endif
|
||||
|
||||
private ReplayModExecutor(String string_1) {
|
||||
|
||||
@@ -4,20 +4,20 @@ package com.replaymod.core.events;
|
||||
import de.johni0702.minecraft.gui.utils.Event;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
public interface PostRenderWorldCallback {
|
||||
Event<PostRenderWorldCallback> EVENT = Event.create((listeners) ->
|
||||
//#if MC>=11500
|
||||
//$$ (MatrixStack matrixStack) -> {
|
||||
(MatrixStack matrixStack) -> {
|
||||
//#else
|
||||
() -> {
|
||||
//$$ () -> {
|
||||
//#endif
|
||||
for (PostRenderWorldCallback listener : listeners) {
|
||||
listener.postRenderWorld(
|
||||
//#if MC>=11500
|
||||
//$$ matrixStack
|
||||
matrixStack
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
@@ -26,7 +26,7 @@ public interface PostRenderWorldCallback {
|
||||
|
||||
void postRenderWorld(
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack
|
||||
MatrixStack matrixStack
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,13 +11,13 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public class MixinGameRenderer {
|
||||
@Inject(
|
||||
method = "renderCenter",
|
||||
method = "renderWorld",
|
||||
at = @At(
|
||||
value = "FIELD",
|
||||
target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z"
|
||||
@@ -27,12 +27,12 @@ public class MixinGameRenderer {
|
||||
float partialTicks,
|
||||
long nanoTime,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
CallbackInfo ci) {
|
||||
PostRenderWorldCallback.EVENT.invoker().postRenderWorld(
|
||||
//#if MC>=11500
|
||||
//$$ matrixStack
|
||||
matrixStack
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
@@ -40,7 +40,7 @@ public class MixinGameRenderer {
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void preRenderHand(
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
Camera camera,
|
||||
float partialTicks,
|
||||
|
||||
@@ -4,7 +4,7 @@ package com.replaymod.core.mixin;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.core.versions.LangResourcePack;
|
||||
import net.fabricmc.fabric.api.resource.ModResourcePack;
|
||||
import net.fabricmc.fabric.impl.resources.ModResourcePackUtil;
|
||||
import net.fabricmc.fabric.impl.resource.loader.ModResourcePackUtil;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.fabricmc.loader.api.ModContainer;
|
||||
import net.minecraft.resource.ResourcePack;
|
||||
|
||||
@@ -140,7 +140,7 @@ public class LangResourcePack extends AbstractFileResourcePack {
|
||||
public Collection<Identifier> findResources(
|
||||
ResourceType resourcePackType,
|
||||
//#if MC>=11500
|
||||
//$$ String namespace,
|
||||
String namespace,
|
||||
//#endif
|
||||
String path,
|
||||
int maxDepth,
|
||||
|
||||
@@ -24,10 +24,10 @@ import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.model.ModelPart.Cuboid;
|
||||
//$$ import java.util.ArrayList;
|
||||
import net.minecraft.client.model.ModelPart.Cuboid;
|
||||
import java.util.ArrayList;
|
||||
//#else
|
||||
import net.minecraft.client.model.Box;
|
||||
//$$ import net.minecraft.client.model.Box;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -88,7 +88,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormatElement;
|
||||
//#if MC<11500
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//#endif
|
||||
//#else
|
||||
//$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor;
|
||||
@@ -172,35 +172,35 @@ public class MCVer {
|
||||
|
||||
public static double Entity_getX(Entity entity) {
|
||||
//#if MC>=11500
|
||||
//$$ return entity.getX();
|
||||
return entity.getX();
|
||||
//#else
|
||||
return entity.x;
|
||||
//$$ return entity.x;
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static double Entity_getY(Entity entity) {
|
||||
//#if MC>=11500
|
||||
//$$ return entity.getY();
|
||||
return entity.getY();
|
||||
//#else
|
||||
return entity.y;
|
||||
//$$ return entity.y;
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static double Entity_getZ(Entity entity) {
|
||||
//#if MC>=11500
|
||||
//$$ return entity.getZ();
|
||||
return entity.getZ();
|
||||
//#else
|
||||
return entity.z;
|
||||
//$$ return entity.z;
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static void Entity_setPos(Entity entity, double x, double y, double z) {
|
||||
//#if MC>=11500
|
||||
//$$ entity.setPos(x, y, z);
|
||||
entity.setPos(x, y, z);
|
||||
//#else
|
||||
entity.x = x;
|
||||
entity.y = y;
|
||||
entity.z = z;
|
||||
//$$ entity.x = x;
|
||||
//$$ entity.y = y;
|
||||
//$$ entity.z = z;
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -368,13 +368,13 @@ public class MCVer {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
//#if MC>=11500
|
||||
//$$ public static List<Cuboid> cubeList(ModelPart modelRenderer) {
|
||||
//$$ return new ArrayList<>(); // FIXME 1.15
|
||||
//$$ }
|
||||
//#else
|
||||
public static List<Box> cubeList(ModelPart modelRenderer) {
|
||||
return modelRenderer.boxes;
|
||||
public static List<Cuboid> cubeList(ModelPart modelRenderer) {
|
||||
return new ArrayList<>(); // FIXME 1.15
|
||||
}
|
||||
//#else
|
||||
//$$ public static List<Box> cubeList(ModelPart modelRenderer) {
|
||||
//$$ return modelRenderer.boxes;
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -397,9 +397,9 @@ public class MCVer {
|
||||
//#if MC>=11400
|
||||
public static Window getWindow(MinecraftClient mc) {
|
||||
//#if MC>=11500
|
||||
//$$ return mc.getWindow();
|
||||
return mc.getWindow();
|
||||
//#else
|
||||
return mc.window;
|
||||
//$$ return mc.window;
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
@@ -609,9 +609,9 @@ public class MCVer {
|
||||
}
|
||||
|
||||
//#if MC>=10800 && MC<11500
|
||||
public interface ChunkRenderWorkerAccessor {
|
||||
void doRunTask(ChunkRenderTask task) throws InterruptedException;
|
||||
}
|
||||
//$$ public interface ChunkRenderWorkerAccessor {
|
||||
//$$ void doRunTask(ChunkRenderTask task) throws InterruptedException;
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
public static long milliTime() {
|
||||
@@ -624,10 +624,10 @@ public class MCVer {
|
||||
|
||||
public static void bindTexture(Identifier texture) {
|
||||
//#if MC>=11500
|
||||
//$$ getMinecraft().getTextureManager().bindTexture(texture);
|
||||
getMinecraft().getTextureManager().bindTexture(texture);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
getMinecraft().getTextureManager().bindTexture(texture);
|
||||
//$$ getMinecraft().getTextureManager().bindTexture(texture);
|
||||
//#else
|
||||
//$$ getMinecraft().renderEngine.bindTexture(texture);
|
||||
//#endif
|
||||
@@ -822,10 +822,10 @@ public class MCVer {
|
||||
|
||||
public static boolean isKeyDown(int keyCode) {
|
||||
//#if MC>=11500
|
||||
//$$ return InputUtil.isKeyPressed(getMinecraft().getWindow().getHandle(), keyCode);
|
||||
return InputUtil.isKeyPressed(getMinecraft().getWindow().getHandle(), keyCode);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode);
|
||||
//$$ return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ return InputMappings.isKeyDown(keyCode);
|
||||
|
||||
@@ -72,7 +72,7 @@ public class ScreenshotRenderer implements RenderInfo {
|
||||
//#endif
|
||||
);
|
||||
//#if MC>=11500
|
||||
//$$ mc.gameRenderer.onResized(displayWidthBefore, displayHeightBefore);
|
||||
mc.gameRenderer.onResized(displayWidthBefore, displayHeightBefore);
|
||||
//#endif
|
||||
//#else
|
||||
//$$ mc.resize(displayWidthBefore, displayHeightBefore);
|
||||
|
||||
@@ -34,7 +34,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
@Mixin(value = EntityRenderer.class, priority = 1200)
|
||||
public abstract class MixinRender {
|
||||
//#if MC>=10800
|
||||
@Inject(method = "isVisible", at=@At("HEAD"), cancellable = true)
|
||||
@Inject(method = "shouldRender", at=@At("HEAD"), cancellable = true)
|
||||
public void replayModExtras_isPlayerHidden(Entity entity, @Coerce Object camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> ci) {
|
||||
ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> {
|
||||
if (entity instanceof PlayerEntity) {
|
||||
|
||||
@@ -8,9 +8,9 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
public interface IntegratedServerAccessor {
|
||||
// TODO probably https://github.com/ReplayMod/remap/issues/10
|
||||
//#if MC>=11500
|
||||
//$$ @Accessor("paused")
|
||||
@Accessor("paused")
|
||||
//#else
|
||||
@Accessor("field_5524")
|
||||
//$$ @Accessor("field_5524")
|
||||
//#endif
|
||||
boolean isGamePaused();
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
@Mixin(MobSpawnS2CPacket.class)
|
||||
public interface SPacketSpawnMobAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("dataTracker")
|
||||
DataTracker getDataManager();
|
||||
@Accessor("dataTracker")
|
||||
void setDataManager(DataTracker value);
|
||||
//$$ @Accessor("dataTracker")
|
||||
//$$ DataTracker getDataManager();
|
||||
//$$ @Accessor("dataTracker")
|
||||
//$$ void setDataManager(DataTracker value);
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
@Mixin(PlayerSpawnS2CPacket.class)
|
||||
public interface SPacketSpawnPlayerAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("dataTracker")
|
||||
DataTracker getDataManager();
|
||||
@Accessor("dataTracker")
|
||||
void setDataManager(DataTracker value);
|
||||
//$$ @Accessor("dataTracker")
|
||||
//$$ DataTracker getDataManager();
|
||||
//$$ @Accessor("dataTracker")
|
||||
//$$ void setDataManager(DataTracker value);
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -326,49 +326,49 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
@SuppressWarnings("unchecked")
|
||||
private byte[] getPacketData(Packet packet) throws Exception {
|
||||
//#if MC<11500
|
||||
if (packet instanceof MobSpawnS2CPacket) {
|
||||
MobSpawnS2CPacket p = (MobSpawnS2CPacket) packet;
|
||||
SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p;
|
||||
if (pa.getDataManager() == null) {
|
||||
pa.setDataManager(new DataTracker(null));
|
||||
if (p.getTrackedValues() != null) {
|
||||
Set<Integer> seen = new HashSet<>();
|
||||
//$$ if (packet instanceof MobSpawnS2CPacket) {
|
||||
//$$ MobSpawnS2CPacket p = (MobSpawnS2CPacket) packet;
|
||||
//$$ SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p;
|
||||
//$$ if (pa.getDataManager() == null) {
|
||||
//$$ pa.setDataManager(new DataTracker(null));
|
||||
//$$ if (p.getTrackedValues() != null) {
|
||||
//$$ Set<Integer> seen = new HashSet<>();
|
||||
//#if MC>=10904
|
||||
for (DataTracker.Entry<?> entry : Lists.reverse(p.getTrackedValues())) {
|
||||
if (!seen.add(entry.getData().getId())) continue;
|
||||
DataManager_set(pa.getDataManager(), entry);
|
||||
}
|
||||
//$$ for (DataTracker.Entry<?> entry : Lists.reverse(p.getTrackedValues())) {
|
||||
//$$ if (!seen.add(entry.getData().getId())) continue;
|
||||
//$$ DataManager_set(pa.getDataManager(), entry);
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ for(DataWatcher.WatchableObject wo : Lists.reverse((List<DataWatcher.WatchableObject>) p.func_149027_c())) {
|
||||
//$$ if (!seen.add(wo.getDataValueId())) continue;
|
||||
//$$ pa.getDataManager().addObject(wo.getDataValueId(), wo.getObject());
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (packet instanceof PlayerSpawnS2CPacket) {
|
||||
PlayerSpawnS2CPacket p = (PlayerSpawnS2CPacket) packet;
|
||||
SPacketSpawnPlayerAccessor pa = (SPacketSpawnPlayerAccessor) p;
|
||||
if (pa.getDataManager() == null) {
|
||||
pa.setDataManager(new DataTracker(null));
|
||||
if (p.getTrackedValues() != null) {
|
||||
Set<Integer> seen = new HashSet<>();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ if (packet instanceof PlayerSpawnS2CPacket) {
|
||||
//$$ PlayerSpawnS2CPacket p = (PlayerSpawnS2CPacket) packet;
|
||||
//$$ SPacketSpawnPlayerAccessor pa = (SPacketSpawnPlayerAccessor) p;
|
||||
//$$ if (pa.getDataManager() == null) {
|
||||
//$$ pa.setDataManager(new DataTracker(null));
|
||||
//$$ if (p.getTrackedValues() != null) {
|
||||
//$$ Set<Integer> seen = new HashSet<>();
|
||||
//#if MC>=10904
|
||||
for (DataTracker.Entry<?> entry : Lists.reverse(p.getTrackedValues())) {
|
||||
if (!seen.add(entry.getData().getId())) continue;
|
||||
DataManager_set(pa.getDataManager(), entry);
|
||||
}
|
||||
//$$ for (DataTracker.Entry<?> entry : Lists.reverse(p.getTrackedValues())) {
|
||||
//$$ if (!seen.add(entry.getData().getId())) continue;
|
||||
//$$ DataManager_set(pa.getDataManager(), entry);
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ for(DataWatcher.WatchableObject wo : Lists.reverse((List<DataWatcher.WatchableObject>) p.func_148944_c())) {
|
||||
//$$ if (!seen.add(wo.getDataValueId())) continue;
|
||||
//$$ pa.getDataManager().addObject(wo.getDataValueId(), wo.getObject());
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
|
||||
@@ -12,7 +12,7 @@ import net.minecraft.client.render.VertexFormatElement;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.datafixers.util.Pair;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
@@ -140,10 +140,10 @@ public class BlendMeshBuilder
|
||||
//$$ public static DMesh addBufferToMesh(WorldRenderer bufferBuilder, DMesh mesh, Vector3f vertOffset) {
|
||||
//#endif
|
||||
//#if MC>=11500
|
||||
//$$ Pair<DrawArrayParameters, ByteBuffer> data = bufferBuilder.popData();
|
||||
//$$ return addBufferToMesh(data.getSecond(), data.getFirst().getMode(), data.getFirst().getVertexFormat(), mesh, vertOffset);
|
||||
Pair<DrawArrayParameters, ByteBuffer> data = bufferBuilder.popData();
|
||||
return addBufferToMesh(data.getSecond(), data.getFirst().getMode(), data.getFirst().getVertexFormat(), mesh, vertOffset);
|
||||
//#else
|
||||
return addBufferToMesh(bufferBuilder.getByteBuffer(), bufferBuilder.getDrawMode(), bufferBuilder.getVertexFormat(), mesh, vertOffset);
|
||||
//$$ return addBufferToMesh(bufferBuilder.getByteBuffer(), bufferBuilder.getDrawMode(), bufferBuilder.getVertexFormat(), mesh, vertOffset);
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -168,15 +168,15 @@ public class BlendMeshBuilder
|
||||
int posOffset = -1, colorOffset = -1, uvOffset = -1;
|
||||
int index = 0;
|
||||
//#if MC>=11500
|
||||
//$$ int elementOffset = 0;
|
||||
int elementOffset = 0;
|
||||
//#endif
|
||||
for (VertexFormatElement element : getElements(vertexFormat)) {
|
||||
//#if MC>=11500
|
||||
//$$ int offset = elementOffset;
|
||||
//$$ elementOffset += element.getSize();
|
||||
int offset = elementOffset;
|
||||
elementOffset += element.getSize();
|
||||
//#else
|
||||
//#if MC>=10809
|
||||
int offset = vertexFormat.getElementOffset(index);
|
||||
//$$ int offset = vertexFormat.getElementOffset(index);
|
||||
//#else
|
||||
//$$ int offset = element.getOffset();
|
||||
//#endif
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.replaymod.render.blend.data.Serializer;
|
||||
//#if MC>=10800
|
||||
// FIXME 1.15
|
||||
//#if MC<11500
|
||||
import com.replaymod.render.blend.exporters.ChunkExporter;
|
||||
//$$ import com.replaymod.render.blend.exporters.ChunkExporter;
|
||||
//#endif
|
||||
import com.replaymod.render.blend.exporters.EntityExporter;
|
||||
import com.replaymod.render.blend.exporters.ItemExporter;
|
||||
@@ -58,7 +58,7 @@ public class BlendState implements Exporter {
|
||||
register(renderState);
|
||||
// FIXME 1.15
|
||||
//#if MC<11500
|
||||
register(new ChunkExporter());
|
||||
//$$ register(new ChunkExporter());
|
||||
//#endif
|
||||
register(new EntityExporter(renderState));
|
||||
register(new TileEntityExporter(renderState));
|
||||
|
||||
@@ -1,175 +1,175 @@
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.exporters;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.blend.BlendMeshBuilder;
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.Exporter;
|
||||
import com.replaymod.render.blend.data.DMesh;
|
||||
import com.replaymod.render.blend.data.DObject;
|
||||
import com.replaymod.render.blend.mixin.ContainerLocalRenderInformationAccessor;
|
||||
import com.replaymod.render.blend.mixin.WorldRendererAccessor;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.texture.SpriteAtlasTexture;
|
||||
import net.minecraft.client.util.GlAllocationUtils;
|
||||
import com.mojang.blaze3d.platform.GLX;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderData;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
import net.minecraft.client.render.VertexFormats;
|
||||
import net.minecraft.client.gl.VertexBuffer;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL15;
|
||||
|
||||
//$$ package com.replaymod.render.blend.exporters;
|
||||
//$$
|
||||
//$$ import com.replaymod.core.versions.MCVer;
|
||||
//$$ import com.replaymod.render.blend.BlendMeshBuilder;
|
||||
//$$ import com.replaymod.render.blend.BlendState;
|
||||
//$$ import com.replaymod.render.blend.Exporter;
|
||||
//$$ import com.replaymod.render.blend.data.DMesh;
|
||||
//$$ import com.replaymod.render.blend.data.DObject;
|
||||
//$$ import com.replaymod.render.blend.mixin.ContainerLocalRenderInformationAccessor;
|
||||
//$$ import com.replaymod.render.blend.mixin.WorldRendererAccessor;
|
||||
//$$ import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
|
||||
//$$ import net.minecraft.client.MinecraftClient;
|
||||
//$$ import net.minecraft.client.texture.SpriteAtlasTexture;
|
||||
//$$ import net.minecraft.client.util.GlAllocationUtils;
|
||||
//$$ import com.mojang.blaze3d.platform.GLX;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderData;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//$$ import net.minecraft.client.render.VertexFormats;
|
||||
//$$ import net.minecraft.client.gl.VertexBuffer;
|
||||
//$$ import org.apache.commons.lang3.tuple.Pair;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//$$ import org.lwjgl.opengl.GL15;
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
//$$ import net.minecraft.client.render.RenderLayer;
|
||||
//$$ import net.minecraft.util.math.BlockPos;
|
||||
//#else
|
||||
//$$ import net.minecraft.util.BlockPos;
|
||||
//$$ import net.minecraft.util.EnumWorldBlockLayer;
|
||||
//#endif
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ChunkExporter implements Exporter {
|
||||
private final Map<BlockPos, DObject> chunkObjects = new HashMap<>();
|
||||
//$$
|
||||
//$$ import java.io.IOException;
|
||||
//$$ import java.nio.ByteBuffer;
|
||||
//$$ import java.util.ArrayList;
|
||||
//$$ import java.util.EnumMap;
|
||||
//$$ import java.util.HashMap;
|
||||
//$$ import java.util.List;
|
||||
//$$ import java.util.Map;
|
||||
//$$
|
||||
//$$ public class ChunkExporter implements Exporter {
|
||||
//$$ private final Map<BlockPos, DObject> chunkObjects = new HashMap<>();
|
||||
//#if MC>=10904
|
||||
private final Map<BlockPos, Map<RenderLayer, DObject>> chunkLayerObjects = new HashMap<>();
|
||||
private final List<Pair<ChunkRenderer, RenderLayer>> chunks = new ArrayList<>();
|
||||
//$$ private final Map<BlockPos, Map<RenderLayer, DObject>> chunkLayerObjects = new HashMap<>();
|
||||
//$$ private final List<Pair<ChunkRenderer, RenderLayer>> chunks = new ArrayList<>();
|
||||
//#else
|
||||
//$$ private final Map<BlockPos, Map<EnumWorldBlockLayer, DObject>> chunkLayerObjects = new HashMap<>();
|
||||
//$$ private final List<Pair<RenderChunk, EnumWorldBlockLayer>> chunks = new ArrayList<>();
|
||||
//#endif
|
||||
private DObject chunksObject;
|
||||
private int frame;
|
||||
|
||||
public void addChunkUpdate(ChunkRenderer chunk, ChunkRenderData compiledChunk) {
|
||||
//$$ private DObject chunksObject;
|
||||
//$$ private int frame;
|
||||
//$$
|
||||
//$$ public void addChunkUpdate(ChunkRenderer chunk, ChunkRenderData compiledChunk) {
|
||||
//#if MC>=10904
|
||||
for (RenderLayer layer : RenderLayer.values()) {
|
||||
//$$ for (RenderLayer layer : RenderLayer.values()) {
|
||||
//#else
|
||||
//$$ for (EnumWorldBlockLayer layer : EnumWorldBlockLayer.values()) {
|
||||
//#endif
|
||||
if (compiledChunk == null || compiledChunk.isBufferInitialized(layer)) {
|
||||
chunks.add(Pair.of(chunk, layer));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setup() throws IOException {
|
||||
|
||||
MinecraftClient mc = MCVer.getMinecraft();
|
||||
@SuppressWarnings("unchecked")
|
||||
List<ContainerLocalRenderInformationAccessor> renderInfos = ((WorldRendererAccessor) mc.worldRenderer).getRenderInfos();
|
||||
for (ContainerLocalRenderInformationAccessor renderInfo : renderInfos) {
|
||||
ChunkRenderer renderChunk = renderInfo.getRenderChunk();
|
||||
ChunkRenderData compiledChunk = renderChunk.getData();
|
||||
if (!compiledChunk.isEmpty()) {
|
||||
addChunkUpdate(renderChunk, null);
|
||||
}
|
||||
}
|
||||
|
||||
chunksObject = new DObject(DObject.Type.OB_EMPTY);
|
||||
chunksObject.id.name = "Chunks";
|
||||
chunksObject.layers = 1 << 1;
|
||||
BlendState.getState().getScene().base.add(chunksObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tearDown() throws IOException {
|
||||
chunks.clear();
|
||||
chunkObjects.clear();
|
||||
chunksObject = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preFrame(int frame) throws IOException {
|
||||
this.frame = frame;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postFrame(int frame) throws IOException {
|
||||
//$$ if (compiledChunk == null || compiledChunk.isBufferInitialized(layer)) {
|
||||
//$$ chunks.add(Pair.of(chunk, layer));
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public void setup() throws IOException {
|
||||
//$$
|
||||
//$$ MinecraftClient mc = MCVer.getMinecraft();
|
||||
//$$ @SuppressWarnings("unchecked")
|
||||
//$$ List<ContainerLocalRenderInformationAccessor> renderInfos = ((WorldRendererAccessor) mc.worldRenderer).getRenderInfos();
|
||||
//$$ for (ContainerLocalRenderInformationAccessor renderInfo : renderInfos) {
|
||||
//$$ ChunkRenderer renderChunk = renderInfo.getRenderChunk();
|
||||
//$$ ChunkRenderData compiledChunk = renderChunk.getData();
|
||||
//$$ if (!compiledChunk.isEmpty()) {
|
||||
//$$ addChunkUpdate(renderChunk, null);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ chunksObject = new DObject(DObject.Type.OB_EMPTY);
|
||||
//$$ chunksObject.id.name = "Chunks";
|
||||
//$$ chunksObject.layers = 1 << 1;
|
||||
//$$ BlendState.getState().getScene().base.add(chunksObject);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public void tearDown() throws IOException {
|
||||
//$$ chunks.clear();
|
||||
//$$ chunkObjects.clear();
|
||||
//$$ chunksObject = null;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public void preFrame(int frame) throws IOException {
|
||||
//$$ this.frame = frame;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public void postFrame(int frame) throws IOException {
|
||||
//#if MC>=10904
|
||||
for (Pair<ChunkRenderer, RenderLayer> pair : chunks) {
|
||||
RenderLayer layer = pair.getRight();
|
||||
//$$ for (Pair<ChunkRenderer, RenderLayer> pair : chunks) {
|
||||
//$$ RenderLayer layer = pair.getRight();
|
||||
//#else
|
||||
//$$ for (Pair<RenderChunk, EnumWorldBlockLayer> pair : chunks) {
|
||||
//$$ EnumWorldBlockLayer layer = pair.getRight();
|
||||
//#endif
|
||||
ChunkRenderer chunk = pair.getLeft();
|
||||
DObject chunkObject = chunkObjects.get(chunk.getOrigin());
|
||||
if (chunkObject == null) {
|
||||
chunkObject = buildChunkObject(chunk);
|
||||
chunkObjects.put(chunk.getOrigin(), chunkObject);
|
||||
chunkLayerObjects.put(chunk.getOrigin(), new EnumMap<>(layer.getDeclaringClass()));
|
||||
}
|
||||
DObject layerObject = buildChunkLayerObject(chunkObject, chunk, layer);
|
||||
if (layerObject == null) continue;
|
||||
//$$ ChunkRenderer chunk = pair.getLeft();
|
||||
//$$ DObject chunkObject = chunkObjects.get(chunk.getOrigin());
|
||||
//$$ if (chunkObject == null) {
|
||||
//$$ chunkObject = buildChunkObject(chunk);
|
||||
//$$ chunkObjects.put(chunk.getOrigin(), chunkObject);
|
||||
//$$ chunkLayerObjects.put(chunk.getOrigin(), new EnumMap<>(layer.getDeclaringClass()));
|
||||
//$$ }
|
||||
//$$ DObject layerObject = buildChunkLayerObject(chunkObject, chunk, layer);
|
||||
//$$ if (layerObject == null) continue;
|
||||
//#if MC>=10904
|
||||
Map<RenderLayer, DObject> layerObjects
|
||||
//$$ Map<RenderLayer, DObject> layerObjects
|
||||
//#else
|
||||
//$$ Map<EnumWorldBlockLayer, DObject> layerObjects
|
||||
//#endif
|
||||
= chunkLayerObjects.get(chunk.getOrigin());
|
||||
DObject oldLayerObject = layerObjects.get(layer);
|
||||
if (oldLayerObject != null) {
|
||||
oldLayerObject.keyframe("hide", 0, frame, 1f);
|
||||
}
|
||||
if (frame > 0) {
|
||||
layerObject.keyframe("hide", 0, frame - 1, 1f);
|
||||
layerObject.keyframe("hide", 0, frame, 0f);
|
||||
} else {
|
||||
layerObject.keyframe("hide", 0, frame, 0f);
|
||||
}
|
||||
layerObjects.put(layer, layerObject);
|
||||
}
|
||||
chunks.clear();
|
||||
}
|
||||
|
||||
private DObject buildChunkObject(ChunkRenderer renderChunk) {
|
||||
BlockPos pos = renderChunk.getOrigin();
|
||||
DObject chunkObject = new DObject(DObject.Type.OB_EMPTY);
|
||||
chunkObject.setParent(chunksObject);
|
||||
chunkObject.id.name = "Chunk[" + pos.getX()/16 + "/" + pos.getY()/16 + "/" + pos.getZ()/16 + "]";
|
||||
chunkObject.loc = new Vector3f(pos.getX(), -pos.getZ(), pos.getY());
|
||||
return chunkObject;
|
||||
}
|
||||
|
||||
private DObject buildChunkLayerObject(DObject chunkObject, ChunkRenderer renderChunk,
|
||||
//$$ = chunkLayerObjects.get(chunk.getOrigin());
|
||||
//$$ DObject oldLayerObject = layerObjects.get(layer);
|
||||
//$$ if (oldLayerObject != null) {
|
||||
//$$ oldLayerObject.keyframe("hide", 0, frame, 1f);
|
||||
//$$ }
|
||||
//$$ if (frame > 0) {
|
||||
//$$ layerObject.keyframe("hide", 0, frame - 1, 1f);
|
||||
//$$ layerObject.keyframe("hide", 0, frame, 0f);
|
||||
//$$ } else {
|
||||
//$$ layerObject.keyframe("hide", 0, frame, 0f);
|
||||
//$$ }
|
||||
//$$ layerObjects.put(layer, layerObject);
|
||||
//$$ }
|
||||
//$$ chunks.clear();
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private DObject buildChunkObject(ChunkRenderer renderChunk) {
|
||||
//$$ BlockPos pos = renderChunk.getOrigin();
|
||||
//$$ DObject chunkObject = new DObject(DObject.Type.OB_EMPTY);
|
||||
//$$ chunkObject.setParent(chunksObject);
|
||||
//$$ chunkObject.id.name = "Chunk[" + pos.getX()/16 + "/" + pos.getY()/16 + "/" + pos.getZ()/16 + "]";
|
||||
//$$ chunkObject.loc = new Vector3f(pos.getX(), -pos.getZ(), pos.getY());
|
||||
//$$ return chunkObject;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private DObject buildChunkLayerObject(DObject chunkObject, ChunkRenderer renderChunk,
|
||||
//#if MC>=10904
|
||||
RenderLayer layer) {
|
||||
//$$ RenderLayer layer) {
|
||||
//#else
|
||||
//$$ EnumWorldBlockLayer layer) {
|
||||
//#endif
|
||||
VertexBuffer vertexBuffer = renderChunk.getGlBuffer(layer.ordinal());
|
||||
if (vertexBuffer == null) return null;
|
||||
|
||||
DObject layerObject = new DObject(buildChunkLayerMesh(vertexBuffer));
|
||||
layerObject.setParent(chunkObject);
|
||||
layerObject.id.name = chunkObject.id.name + " - " + layer + " - Frame " + frame;
|
||||
return layerObject;
|
||||
}
|
||||
|
||||
private DMesh buildChunkLayerMesh(VertexBuffer vertexBuffer) {
|
||||
vertexBuffer.bind();
|
||||
int size = GL15.glGetBufferParameteri(GLX.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE);
|
||||
ByteBuffer byteBuffer = GlAllocationUtils.allocateByteBuffer(size);
|
||||
GL15.glGetBufferSubData(GLX.GL_ARRAY_BUFFER, 0, byteBuffer);
|
||||
vertexBuffer.unbind();
|
||||
|
||||
MCVer.getMinecraft().getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX);
|
||||
|
||||
return BlendMeshBuilder.addBufferToMesh(byteBuffer, GL11.GL_QUADS, VertexFormats.POSITION_COLOR_UV_LMAP, null, null);
|
||||
}
|
||||
|
||||
private static final int STRIDE = 28;
|
||||
}
|
||||
//$$ VertexBuffer vertexBuffer = renderChunk.getGlBuffer(layer.ordinal());
|
||||
//$$ if (vertexBuffer == null) return null;
|
||||
//$$
|
||||
//$$ DObject layerObject = new DObject(buildChunkLayerMesh(vertexBuffer));
|
||||
//$$ layerObject.setParent(chunkObject);
|
||||
//$$ layerObject.id.name = chunkObject.id.name + " - " + layer + " - Frame " + frame;
|
||||
//$$ return layerObject;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private DMesh buildChunkLayerMesh(VertexBuffer vertexBuffer) {
|
||||
//$$ vertexBuffer.bind();
|
||||
//$$ int size = GL15.glGetBufferParameteri(GLX.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE);
|
||||
//$$ ByteBuffer byteBuffer = GlAllocationUtils.allocateByteBuffer(size);
|
||||
//$$ GL15.glGetBufferSubData(GLX.GL_ARRAY_BUFFER, 0, byteBuffer);
|
||||
//$$ vertexBuffer.unbind();
|
||||
//$$
|
||||
//$$ MCVer.getMinecraft().getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX);
|
||||
//$$
|
||||
//$$ return BlendMeshBuilder.addBufferToMesh(byteBuffer, GL11.GL_QUADS, VertexFormats.POSITION_COLOR_UV_LMAP, null, null);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private static final int STRIDE = 28;
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -125,13 +125,13 @@ public class ItemExporter implements Exporter {
|
||||
//#endif
|
||||
: 0xffffffff;
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15
|
||||
// FIXME 1.15
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
buffer.putVertexData(quad.getVertexData());
|
||||
buffer.setQuadColor(color);
|
||||
Vec3i vec3i_1 = quad.getFace().getVector();
|
||||
buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ());
|
||||
//$$ buffer.putVertexData(quad.getVertexData());
|
||||
//$$ buffer.setQuadColor(color);
|
||||
//$$ Vec3i vec3i_1 = quad.getFace().getVector();
|
||||
//$$ buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ());
|
||||
//#else
|
||||
//$$ LightUtil.renderQuadColor(buffer, quad, color);
|
||||
//#endif
|
||||
|
||||
@@ -9,9 +9,9 @@ import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11400
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.model.ModelPart.Cuboid;
|
||||
import net.minecraft.client.model.ModelPart.Cuboid;
|
||||
//#else
|
||||
import net.minecraft.client.model.Box;
|
||||
//$$ import net.minecraft.client.model.Box;
|
||||
//#endif
|
||||
import net.minecraft.client.model.ModelPart;
|
||||
//#else
|
||||
@@ -72,9 +72,9 @@ public class ModelRendererExporter implements Exporter {
|
||||
if (object == null) {
|
||||
object = new ModelBasedDObject(model, scale);
|
||||
//#if MC>=11500
|
||||
//$$ object.id.name = "???"; // FIXME 1.15 can we somehow nicely derive this?
|
||||
object.id.name = "???"; // FIXME 1.15 can we somehow nicely derive this?
|
||||
//#else
|
||||
object.id.name = model.name;
|
||||
//$$ object.id.name = model.name;
|
||||
//#endif
|
||||
object.setParent(parent);
|
||||
}
|
||||
@@ -86,13 +86,13 @@ public class ModelRendererExporter implements Exporter {
|
||||
DMesh mesh = new DMesh();
|
||||
BlendMeshBuilder builder = new BlendMeshBuilder(mesh);
|
||||
//#if MC>=11500
|
||||
//$$ for (Cuboid box : cubeList(model)) {
|
||||
//$$ // FIXME 1.15
|
||||
//$$ }
|
||||
//#else
|
||||
for (Box box : cubeList(model)) {
|
||||
box.render(builder, scale);
|
||||
for (Cuboid box : cubeList(model)) {
|
||||
// FIXME 1.15
|
||||
}
|
||||
//#else
|
||||
//$$ for (Box box : cubeList(model)) {
|
||||
//$$ box.render(builder, scale);
|
||||
//$$ }
|
||||
//#endif
|
||||
builder.maybeFinishDrawing();
|
||||
return mesh;
|
||||
|
||||
@@ -117,11 +117,11 @@ public class ParticlesExporter implements Exporter {
|
||||
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks;
|
||||
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks;
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME 1.15 is this still required?
|
||||
// FIXME 1.15 is this still required?
|
||||
//#else
|
||||
dx -= Particle.cameraX;
|
||||
dy -= Particle.cameraY;
|
||||
dz -= Particle.cameraZ;
|
||||
//$$ dx -= Particle.cameraX;
|
||||
//$$ dy -= Particle.cameraY;
|
||||
//$$ dz -= Particle.cameraZ;
|
||||
//#endif
|
||||
Vector3f offset = new Vector3f((float) dx, (float) dy, (float) dz);
|
||||
Matrix4f.translate(offset, modelView, modelView);
|
||||
@@ -182,7 +182,7 @@ public class ParticlesExporter implements Exporter {
|
||||
//#endif
|
||||
0
|
||||
//#if MC<11500
|
||||
, 1, 1, 0, 0, 0
|
||||
//$$ , 1, 1, 0, 0, 0
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
//$$ package com.replaymod.render.blend.mixin;
|
||||
//$$
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
//$$
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
//#else
|
||||
import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//#endif
|
||||
|
||||
@Mixin(targets = "net.minecraft.client.render.WorldRenderer$ChunkInfo")
|
||||
public interface ContainerLocalRenderInformationAccessor {
|
||||
//$$
|
||||
//$$ @Mixin(targets = "net.minecraft.client.render.WorldRenderer$ChunkInfo")
|
||||
//$$ public interface ContainerLocalRenderInformationAccessor {
|
||||
//#if MC>=11500
|
||||
//$$ @Accessor("chunk")
|
||||
//$$ BuiltChunk getRenderChunk();
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Accessor("renderer")
|
||||
//$$ @Accessor("renderer")
|
||||
//#else
|
||||
//$$ @Accessor
|
||||
//#endif
|
||||
ChunkRenderer getRenderChunk();
|
||||
//$$ ChunkRenderer getRenderChunk();
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.ChunkExporter;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//$$ package com.replaymod.render.blend.mixin;
|
||||
//$$
|
||||
//$$ import com.replaymod.render.blend.BlendState;
|
||||
//$$ import com.replaymod.render.blend.exporters.ChunkExporter;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$
|
||||
//#if MC>=11400
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator;
|
||||
//#endif
|
||||
|
||||
@Mixin(ChunkRenderWorker.class)
|
||||
public abstract class MixinChunkRenderWorker {
|
||||
|
||||
@Inject(method = "runTask", at = @At("RETURN"))
|
||||
//$$
|
||||
//$$ @Mixin(ChunkRenderWorker.class)
|
||||
//$$ public abstract class MixinChunkRenderWorker {
|
||||
//$$
|
||||
//$$ @Inject(method = "runTask", at = @At("RETURN"))
|
||||
//#if MC>=11400
|
||||
public void afterChunkUpdate(ChunkRenderTask task, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
if (task.getStage() == ChunkRenderTask.Stage.DONE
|
||||
&& task.getMode() == ChunkRenderTask.Mode.REBUILD_CHUNK) {
|
||||
blendState.get(ChunkExporter.class).addChunkUpdate(task.getChunkRenderer(), task.getRenderData());
|
||||
}
|
||||
}
|
||||
}
|
||||
//$$ public void afterChunkUpdate(ChunkRenderTask task, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ if (task.getStage() == ChunkRenderTask.Stage.DONE
|
||||
//$$ && task.getMode() == ChunkRenderTask.Mode.REBUILD_CHUNK) {
|
||||
//$$ blendState.get(ChunkExporter.class).addChunkUpdate(task.getChunkRenderer(), task.getRenderData());
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ public void afterChunkUpdate(ChunkCompileTaskGenerator task, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
@@ -41,5 +41,5 @@ public abstract class MixinChunkRenderWorker {
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -1,64 +1,64 @@
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.ParticlesExporter;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//$$ package com.replaymod.render.blend.mixin;
|
||||
//$$
|
||||
//$$ import com.replaymod.render.blend.BlendState;
|
||||
//$$ import com.replaymod.render.blend.exporters.ParticlesExporter;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$
|
||||
//#if MC>=11400
|
||||
import net.minecraft.client.render.Camera;
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#else
|
||||
//$$ import net.minecraft.entity.Entity;
|
||||
//#endif
|
||||
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
import net.minecraft.client.particle.ParticleManager;
|
||||
//$$ import net.minecraft.client.particle.ParticleManager;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.particle.EffectRenderer;
|
||||
//#endif
|
||||
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
@Mixin(ParticleManager.class)
|
||||
//$$ @Mixin(ParticleManager.class)
|
||||
//#else
|
||||
//$$ @Mixin(EffectRenderer.class)
|
||||
//#endif
|
||||
public abstract class MixinEffectRenderer {
|
||||
|
||||
@Inject(method = "renderParticles", at = @At("HEAD"))
|
||||
private void preRender(
|
||||
//$$ public abstract class MixinEffectRenderer {
|
||||
//$$
|
||||
//$$ @Inject(method = "renderParticles", at = @At("HEAD"))
|
||||
//$$ private void preRender(
|
||||
//#if MC>=11400
|
||||
Camera view,
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
//$$ Entity view,
|
||||
//#endif
|
||||
float renderPartialTicks,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).preParticlesRender(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "renderParticles", at = @At("RETURN"))
|
||||
private void postRender(
|
||||
//$$ float renderPartialTicks,
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ParticlesExporter.class).preParticlesRender(false);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "renderParticles", at = @At("RETURN"))
|
||||
//$$ private void postRender(
|
||||
//#if MC>=11400
|
||||
Camera view,
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
//$$ Entity view,
|
||||
//#endif
|
||||
float renderPartialTicks,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).postParticlesRender();
|
||||
}
|
||||
}
|
||||
|
||||
//$$ float renderPartialTicks,
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ParticlesExporter.class).postParticlesRender();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//#if MC<11400
|
||||
//$$ @Inject(method = "renderLitParticles", at = @At("HEAD"))
|
||||
//$$ public void preLitRender(Entity view, float renderPartialTicks, CallbackInfo ci) {
|
||||
@@ -76,5 +76,5 @@ public abstract class MixinEffectRenderer {
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -1,73 +1,73 @@
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.ModelRendererExporter;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//$$ package com.replaymod.render.blend.mixin;
|
||||
//$$
|
||||
//$$ import com.replaymod.render.blend.BlendState;
|
||||
//$$ import com.replaymod.render.blend.exporters.ModelRendererExporter;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$
|
||||
//#if MC>=11400
|
||||
import net.minecraft.client.model.ModelPart;
|
||||
//$$ import net.minecraft.client.model.ModelPart;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.model.ModelRenderer;
|
||||
//#endif
|
||||
|
||||
@Mixin(ModelPart.class)
|
||||
public abstract class MixinModelRenderer {
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
public void preRender(float scale, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ModelRendererExporter.class).preRenderModel((ModelPart)(Object)this, scale);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "method_2852", at = @At("HEAD"))
|
||||
public void preRenderWithRotation(float scale, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ModelRendererExporter.class).preRenderModel((ModelPart)(Object)this, scale);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("RETURN"))
|
||||
public void postRender(float scale, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ModelRendererExporter.class).postRenderModel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "method_2852", at = @At("RETURN"))
|
||||
public void postRenderWithRotation(float scale, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ModelRendererExporter.class).postRenderModel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "render",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lcom/mojang/blaze3d/platform/GlStateManager;callList(I)V"),
|
||||
expect = 3)
|
||||
public void onRender(float scale, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ModelRendererExporter.class).onRenderModel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "method_2852",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lcom/mojang/blaze3d/platform/GlStateManager;callList(I)V"))
|
||||
public void onRenderWithRotation(float scale, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ModelRendererExporter.class).onRenderModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
//$$
|
||||
//$$ @Mixin(ModelPart.class)
|
||||
//$$ public abstract class MixinModelRenderer {
|
||||
//$$ @Inject(method = "render", at = @At("HEAD"))
|
||||
//$$ public void preRender(float scale, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ModelRendererExporter.class).preRenderModel((ModelPart)(Object)this, scale);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "method_2852", at = @At("HEAD"))
|
||||
//$$ public void preRenderWithRotation(float scale, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ModelRendererExporter.class).preRenderModel((ModelPart)(Object)this, scale);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "render", at = @At("RETURN"))
|
||||
//$$ public void postRender(float scale, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ModelRendererExporter.class).postRenderModel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "method_2852", at = @At("RETURN"))
|
||||
//$$ public void postRenderWithRotation(float scale, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ModelRendererExporter.class).postRenderModel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "render",
|
||||
//$$ at = @At(value = "INVOKE",
|
||||
//$$ target = "Lcom/mojang/blaze3d/platform/GlStateManager;callList(I)V"),
|
||||
//$$ expect = 3)
|
||||
//$$ public void onRender(float scale, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ModelRendererExporter.class).onRenderModel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "method_2852",
|
||||
//$$ at = @At(value = "INVOKE",
|
||||
//$$ target = "Lcom/mojang/blaze3d/platform/GlStateManager;callList(I)V"))
|
||||
//$$ public void onRenderWithRotation(float scale, CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ModelRendererExporter.class).onRenderModel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -10,9 +10,9 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.Frustum;
|
||||
import net.minecraft.client.render.Frustum;
|
||||
//#else
|
||||
import net.minecraft.client.render.VisibleRegion;
|
||||
//$$ import net.minecraft.client.render.VisibleRegion;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -37,12 +37,12 @@ public abstract class MixinRenderGlobal {
|
||||
// FIXME wither skull ._. mojang pls
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderEntity", at = @At("HEAD"))
|
||||
@Inject(method = "renderEntity", at = @At("HEAD"))
|
||||
//#else
|
||||
@Inject(method = "renderEntities",
|
||||
at = @At(value = "INVOKE",
|
||||
//$$ @Inject(method = "renderEntities",
|
||||
//$$ at = @At(value = "INVOKE",
|
||||
//#if MC>=10904
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;render(Lnet/minecraft/entity/Entity;FZ)V"))
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;render(Lnet/minecraft/entity/Entity;FZ)V"))
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntitySimple(Lnet/minecraft/entity/Entity;F)Z"))
|
||||
//#endif
|
||||
@@ -55,16 +55,16 @@ public abstract class MixinRenderGlobal {
|
||||
}
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderEntity", at = @At("RETURN"))
|
||||
@Inject(method = "renderEntity", at = @At("RETURN"))
|
||||
//#else
|
||||
@Inject(method = "renderEntities",
|
||||
at = @At(value = "INVOKE",
|
||||
//$$ @Inject(method = "renderEntities",
|
||||
//$$ at = @At(value = "INVOKE",
|
||||
//#if MC>=10904
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;render(Lnet/minecraft/entity/Entity;FZ)V",
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;render(Lnet/minecraft/entity/Entity;FZ)V",
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntitySimple(Lnet/minecraft/entity/Entity;F)Z",
|
||||
//#endif
|
||||
shift = At.Shift.AFTER))
|
||||
//$$ shift = At.Shift.AFTER))
|
||||
//#endif
|
||||
private void postEntityRender(CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
@@ -74,38 +74,38 @@ public abstract class MixinRenderGlobal {
|
||||
}
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ // FIXME
|
||||
// FIXME
|
||||
//#else
|
||||
@Inject(method = "renderEntities", at = @At(
|
||||
value = "INVOKE",
|
||||
//$$ @Inject(method = "renderEntities", at = @At(
|
||||
//$$ value = "INVOKE",
|
||||
//#if MC>=11400
|
||||
target = "Lnet/minecraft/client/render/block/entity/BlockEntityRenderDispatcher;render(Lnet/minecraft/block/entity/BlockEntity;FI)V"
|
||||
//$$ target = "Lnet/minecraft/client/render/block/entity/BlockEntityRenderDispatcher;render(Lnet/minecraft/block/entity/BlockEntity;FI)V"
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;renderTileEntity(Lnet/minecraft/tileentity/TileEntity;FI)V"
|
||||
//#endif
|
||||
))
|
||||
private void preTileEntityRender(CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(TileEntityExporter.class).preTileEntitiesRender();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "renderEntities", at = @At(
|
||||
value = "INVOKE",
|
||||
//$$ ))
|
||||
//$$ private void preTileEntityRender(CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(TileEntityExporter.class).preTileEntitiesRender();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "renderEntities", at = @At(
|
||||
//$$ value = "INVOKE",
|
||||
//#if MC>=11400
|
||||
target = "Lnet/minecraft/client/render/block/entity/BlockEntityRenderDispatcher;render(Lnet/minecraft/block/entity/BlockEntity;FI)V",
|
||||
//$$ target = "Lnet/minecraft/client/render/block/entity/BlockEntityRenderDispatcher;render(Lnet/minecraft/block/entity/BlockEntity;FI)V",
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;renderTileEntity(Lnet/minecraft/tileentity/TileEntity;FI)V",
|
||||
//#endif
|
||||
shift = At.Shift.AFTER
|
||||
))
|
||||
private void postTileEntityRender(CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(TileEntityExporter.class).postTileEntitiesRender();
|
||||
}
|
||||
}
|
||||
//$$ shift = At.Shift.AFTER
|
||||
//$$ ))
|
||||
//$$ private void postTileEntityRender(CallbackInfo ci) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(TileEntityExporter.class).postTileEntitiesRender();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -10,8 +10,8 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumer;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -34,11 +34,11 @@ import net.minecraft.client.render.model.BakedModel;
|
||||
//#endif
|
||||
public abstract class MixinRenderItem {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderBakedItemModel", at = @At("HEAD"))
|
||||
//$$ private void onRenderModel(BakedModel model, ItemStack stack, int int_1, int int_2, MatrixStack matrixStack_1, VertexConsumer vertexConsumer_1, CallbackInfo ci) {
|
||||
@Inject(method = "renderBakedItemModel", at = @At("HEAD"))
|
||||
private void onRenderModel(BakedModel model, ItemStack stack, int int_1, int int_2, MatrixStack matrixStack_1, VertexConsumer vertexConsumer_1, CallbackInfo ci) {
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderItemModel", at = @At("HEAD"))
|
||||
//$$ @Inject(method = "renderItemModel", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderModel(Lnet/minecraft/client/renderer/model/IBakedModel;Lnet/minecraft/item/ItemStack;)V",
|
||||
@@ -53,7 +53,7 @@ public abstract class MixinRenderItem {
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
private void onRenderModel(BakedModel model, ItemStack stack, CallbackInfo ci) {
|
||||
//$$ private void onRenderModel(BakedModel model, ItemStack stack, CallbackInfo ci) {
|
||||
//#endif
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
|
||||
@@ -21,20 +21,20 @@ import net.minecraft.client.render.entity.LivingEntityRenderer;
|
||||
//#endif
|
||||
public abstract class MixinRenderLivingBase {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/entity/LivingEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(
|
||||
@Inject(method = "render(Lnet/minecraft/entity/LivingEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(
|
||||
//#else
|
||||
//#if FABRIC>=1
|
||||
@Inject(method = "render(Lnet/minecraft/entity/LivingEntity;DDDFF)V", at = @At(
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/entity/LivingEntity;DDDFF)V", at = @At(
|
||||
//#else
|
||||
//$$ @Inject(method = "doRender(Lnet/minecraft/entity/LivingEntity;DDDFF)V", at = @At(
|
||||
//#endif
|
||||
//#endif
|
||||
value = "INVOKE",
|
||||
//#if MC>=11500
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;scale(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/util/math/MatrixStack;F)V",
|
||||
target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;scale(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/util/math/MatrixStack;F)V",
|
||||
//#else
|
||||
//#if MC>=10904
|
||||
target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;scaleAndTranslate(Lnet/minecraft/entity/LivingEntity;F)F",
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;scaleAndTranslate(Lnet/minecraft/entity/LivingEntity;F)F",
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/entity/RendererLivingEntity;preRenderCallback(Lnet/minecraft/entity/EntityLivingBase;F)V",
|
||||
//#endif
|
||||
|
||||
@@ -10,8 +10,8 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
@@ -25,10 +25,10 @@ public abstract class MixinRenderManager {
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11500
|
||||
//$$ method = "render",
|
||||
method = "render",
|
||||
//#else
|
||||
//#if MC>=11400 && FABRIC>=1
|
||||
method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//$$ method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ method = "renderEntity",
|
||||
@@ -39,17 +39,17 @@ public abstract class MixinRenderManager {
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
//#if MC>=11500
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V"))
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V"))
|
||||
//#else
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V"))
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V"))
|
||||
//#endif
|
||||
public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
MatrixStack matrixStack,
|
||||
VertexConsumerProvider vertexConsumerProvider,
|
||||
int int_1,
|
||||
//#else
|
||||
boolean box,
|
||||
//$$ boolean box,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
CallbackInfo ci) {
|
||||
@@ -64,10 +64,10 @@ public abstract class MixinRenderManager {
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11500
|
||||
//$$ method = "render",
|
||||
method = "render",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//$$ method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ method = "renderEntity",
|
||||
@@ -78,18 +78,18 @@ public abstract class MixinRenderManager {
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
//#if MC>=11500
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V",
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V",
|
||||
//#else
|
||||
target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V",
|
||||
//$$ target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V",
|
||||
//#endif
|
||||
shift = At.Shift.AFTER))
|
||||
public void postRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
MatrixStack matrixStack,
|
||||
VertexConsumerProvider vertexConsumerProvider,
|
||||
int int_1,
|
||||
//#else
|
||||
boolean box,
|
||||
//$$ boolean box,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
CallbackInfo ci) {
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.TileEntityExporter;
|
||||
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(BlockEntityRenderDispatcher.class)
|
||||
public abstract class MixinTileEntityRendererDispatcher {
|
||||
|
||||
//$$ package com.replaymod.render.blend.mixin;
|
||||
//$$
|
||||
//$$ import com.replaymod.render.blend.BlendState;
|
||||
//$$ import com.replaymod.render.blend.exporters.TileEntityExporter;
|
||||
//$$ import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
|
||||
//$$ import net.minecraft.block.entity.BlockEntity;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$
|
||||
//$$ @Mixin(BlockEntityRenderDispatcher.class)
|
||||
//$$ public abstract class MixinTileEntityRendererDispatcher {
|
||||
//$$
|
||||
//#if MC>=11400
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V",
|
||||
at = @At("HEAD"))
|
||||
//$$ @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V",
|
||||
//$$ at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V",
|
||||
//$$ at = @At("HEAD"))
|
||||
//#endif
|
||||
public void preRender(BlockEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) {
|
||||
float alpha = 1;
|
||||
//$$ public void preRender(BlockEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) {
|
||||
//$$ float alpha = 1;
|
||||
//#else
|
||||
//#if MC>=11200
|
||||
//$$ @Inject(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntity;DDDFIF)V",
|
||||
@@ -36,21 +36,21 @@ public abstract class MixinTileEntityRendererDispatcher {
|
||||
//$$ float alpha = 1;
|
||||
//#endif
|
||||
//#endif
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(TileEntityExporter.class).preRender(tileEntity, x, y, z, renderPartialTicks, destroyStage, alpha);
|
||||
}
|
||||
}
|
||||
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(TileEntityExporter.class).preRender(tileEntity, x, y, z, renderPartialTicks, destroyStage, alpha);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//#if MC>=11400
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V",
|
||||
at = @At("RETURN"))
|
||||
//$$ @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V",
|
||||
//$$ at = @At("RETURN"))
|
||||
//#else
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V",
|
||||
//$$ at = @At("RETURN"))
|
||||
//#endif
|
||||
public void postRender(BlockEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) {
|
||||
//$$ public void postRender(BlockEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) {
|
||||
//#else
|
||||
//#if MC>=11200
|
||||
//$$ @Inject(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntity;DDDFIF)V",
|
||||
@@ -62,10 +62,10 @@ public abstract class MixinTileEntityRendererDispatcher {
|
||||
//$$ public void postRender(TileEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, CallbackInfo ci) {
|
||||
//#endif
|
||||
//#endif
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(TileEntityExporter.class).postRender();
|
||||
}
|
||||
}
|
||||
}
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(TileEntityExporter.class).postRender();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
// FIXME 1.15
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.blend.mixin;
|
||||
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public interface WorldRendererAccessor {
|
||||
@Accessor("chunkInfos")
|
||||
List getRenderInfos();
|
||||
}
|
||||
//$$ package com.replaymod.render.blend.mixin;
|
||||
//$$
|
||||
//$$ import net.minecraft.client.render.WorldRenderer;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
//$$
|
||||
//$$ import java.util.List;
|
||||
//$$
|
||||
//$$ @Mixin(WorldRenderer.class)
|
||||
//$$ public interface WorldRendererAccessor {
|
||||
//$$ @Accessor("chunkInfos")
|
||||
//$$ List getRenderInfos();
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -81,21 +81,21 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
shaderProgram.use();
|
||||
setTexture("texture", 0);
|
||||
//#if MC>=11500
|
||||
//$$ setTexture("overlay", 1);
|
||||
//$$ setTexture("lightMap", 2);
|
||||
setTexture("overlay", 1);
|
||||
setTexture("lightMap", 2);
|
||||
//#else
|
||||
setTexture("lightMap", 1);
|
||||
//$$ setTexture("lightMap", 1);
|
||||
//#endif
|
||||
|
||||
renderStateEvents = new EventRegistrations();
|
||||
Program.Uniform[] texture2DUniforms = new Program.Uniform[]{
|
||||
shaderProgram.getUniformVariable("textureEnabled"),
|
||||
//#if MC>=11500
|
||||
//$$ shaderProgram.getUniformVariable("overlayEnabled"),
|
||||
//$$ shaderProgram.getUniformVariable("lightMapEnabled"),
|
||||
//#else
|
||||
shaderProgram.getUniformVariable("lightMapEnabled"),
|
||||
shaderProgram.getUniformVariable("overlayEnabled"),
|
||||
shaderProgram.getUniformVariable("lightMapEnabled"),
|
||||
//#else
|
||||
//$$ shaderProgram.getUniformVariable("lightMapEnabled"),
|
||||
//$$ shaderProgram.getUniformVariable("overlayEnabled"),
|
||||
//#endif
|
||||
};
|
||||
renderStateEvents.on(Texture2DStateCallback.EVENT, (id, enabled) -> {
|
||||
|
||||
@@ -130,7 +130,7 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
mainWindow.setFramebufferWidth(width);
|
||||
mainWindow.setFramebufferHeight(height);
|
||||
//#if MC>=11500
|
||||
//$$ mc.gameRenderer.onResized(width, height);
|
||||
mc.gameRenderer.onResized(width, height);
|
||||
//#endif
|
||||
//#else
|
||||
//$$ if (width != mc.displayWidth || height != mc.displayHeight) {
|
||||
|
||||
@@ -446,9 +446,9 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
||||
}
|
||||
|
||||
//#if MC<10800 || MC>=11500
|
||||
//$$ if (method == RenderSettings.RenderMethod.BLEND) {
|
||||
//$$ return "replaymod.gui.rendersettings.no_blend_on_1_7_10";
|
||||
//$$ }
|
||||
if (method == RenderSettings.RenderMethod.BLEND) {
|
||||
return "replaymod.gui.rendersettings.no_blend_on_1_7_10";
|
||||
}
|
||||
//#endif
|
||||
|
||||
return null;
|
||||
|
||||
@@ -7,16 +7,16 @@ import java.lang.reflect.Field;
|
||||
|
||||
//#if MC>=11500
|
||||
//#else
|
||||
import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor;
|
||||
import com.replaymod.render.mixin.WorldRendererAccessor;
|
||||
import com.replaymod.render.utils.JailingQueue;
|
||||
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
import java.util.Iterator;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
//$$ import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor;
|
||||
//$$ import com.replaymod.render.mixin.WorldRendererAccessor;
|
||||
//$$ import com.replaymod.render.utils.JailingQueue;
|
||||
//$$ import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//$$ import java.util.Iterator;
|
||||
//$$ import static com.replaymod.core.versions.MCVer.*;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
@@ -35,14 +35,14 @@ public class ChunkLoadingRenderGlobal {
|
||||
|
||||
//#if MC>=11500
|
||||
//#else
|
||||
private ChunkBuilder renderDispatcher;
|
||||
//$$ private ChunkBuilder renderDispatcher;
|
||||
//#if MC>=11400
|
||||
private JailingQueue<ChunkRenderTask> workerJailingQueue;
|
||||
//$$ private JailingQueue<ChunkRenderTask> workerJailingQueue;
|
||||
//#else
|
||||
//$$ private JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
|
||||
//#endif
|
||||
private ChunkRenderWorkerAccessor renderWorker;
|
||||
private int frame;
|
||||
//$$ private ChunkRenderWorkerAccessor renderWorker;
|
||||
//$$ private int frame;
|
||||
//#endif
|
||||
|
||||
public ChunkLoadingRenderGlobal(
|
||||
@@ -55,10 +55,10 @@ public class ChunkLoadingRenderGlobal {
|
||||
this.hooked = renderGlobal;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ install();
|
||||
//#else
|
||||
setup(((WorldRendererAccessor) renderGlobal).getRenderDispatcher());
|
||||
install();
|
||||
//#else
|
||||
//$$ setup(((WorldRendererAccessor) renderGlobal).getRenderDispatcher());
|
||||
//$$ install();
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -77,94 +77,94 @@ public class ChunkLoadingRenderGlobal {
|
||||
|
||||
//#if MC>=11500
|
||||
//#else
|
||||
public void updateRenderDispatcher(ChunkBuilder renderDispatcher) {
|
||||
if (this.renderDispatcher != null) {
|
||||
workerJailingQueue.freeAll();
|
||||
this.renderDispatcher = null;
|
||||
}
|
||||
if (renderDispatcher != null) {
|
||||
setup(renderDispatcher);
|
||||
}
|
||||
}
|
||||
|
||||
private void setup(ChunkBuilder renderDispatcher) {
|
||||
this.renderDispatcher = renderDispatcher;
|
||||
this.renderWorker = (ChunkRenderWorkerAccessor) new ChunkRenderWorker(renderDispatcher, new BlockBufferBuilderStorage());
|
||||
ChunkRenderDispatcherAccessor renderDispatcherAcc = (ChunkRenderDispatcherAccessor) renderDispatcher;
|
||||
|
||||
int workerThreads = renderDispatcherAcc.getListThreadedWorkers().size();
|
||||
//$$ public void updateRenderDispatcher(ChunkBuilder renderDispatcher) {
|
||||
//$$ if (this.renderDispatcher != null) {
|
||||
//$$ workerJailingQueue.freeAll();
|
||||
//$$ this.renderDispatcher = null;
|
||||
//$$ }
|
||||
//$$ if (renderDispatcher != null) {
|
||||
//$$ setup(renderDispatcher);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private void setup(ChunkBuilder renderDispatcher) {
|
||||
//$$ this.renderDispatcher = renderDispatcher;
|
||||
//$$ this.renderWorker = (ChunkRenderWorkerAccessor) new ChunkRenderWorker(renderDispatcher, new BlockBufferBuilderStorage());
|
||||
//$$ ChunkRenderDispatcherAccessor renderDispatcherAcc = (ChunkRenderDispatcherAccessor) renderDispatcher;
|
||||
//$$
|
||||
//$$ int workerThreads = renderDispatcherAcc.getListThreadedWorkers().size();
|
||||
//#if MC>=10904
|
||||
PriorityBlockingQueue<ChunkRenderTask> queueChunkUpdates = renderDispatcherAcc.getQueueChunkUpdates();
|
||||
//$$ PriorityBlockingQueue<ChunkRenderTask> queueChunkUpdates = renderDispatcherAcc.getQueueChunkUpdates();
|
||||
//#else
|
||||
//$$ BlockingQueue<ChunkCompileTaskGenerator> queueChunkUpdates = renderDispatcherAcc.getQueueChunkUpdates();
|
||||
//#endif
|
||||
workerJailingQueue = new JailingQueue<>(queueChunkUpdates);
|
||||
renderDispatcherAcc.setQueueChunkUpdates(workerJailingQueue);
|
||||
//$$ workerJailingQueue = new JailingQueue<>(queueChunkUpdates);
|
||||
//$$ renderDispatcherAcc.setQueueChunkUpdates(workerJailingQueue);
|
||||
//#if MC>=10904
|
||||
ChunkRenderTask element = new ChunkRenderTask(
|
||||
null,
|
||||
null,
|
||||
0
|
||||
//$$ ChunkRenderTask element = new ChunkRenderTask(
|
||||
//$$ null,
|
||||
//$$ null,
|
||||
//$$ 0
|
||||
//#if MC>=11400
|
||||
, null
|
||||
//$$ , null
|
||||
//#endif
|
||||
);
|
||||
//$$ );
|
||||
//#else
|
||||
//$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null);
|
||||
//#endif
|
||||
element.cancel();
|
||||
for (int i = 0; i < workerThreads; i++) {
|
||||
queueChunkUpdates.add(element);
|
||||
}
|
||||
|
||||
// Temporary workaround for dead lock, will be replaced by a new (ShaderMod compatible) mechanism later
|
||||
//noinspection StatementWithEmptyBody
|
||||
while (renderDispatcher.runTasksSync(0)) {}
|
||||
|
||||
workerJailingQueue.jail(workerThreads);
|
||||
renderDispatcherAcc.setQueueChunkUpdates(queueChunkUpdates);
|
||||
}
|
||||
|
||||
public void updateChunks() {
|
||||
while (renderDispatcher.runTasksSync(0)) {
|
||||
((WorldRendererAccessor) hooked).setDisplayListEntitiesDirty(true);
|
||||
}
|
||||
|
||||
//$$ element.cancel();
|
||||
//$$ for (int i = 0; i < workerThreads; i++) {
|
||||
//$$ queueChunkUpdates.add(element);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Temporary workaround for dead lock, will be replaced by a new (ShaderMod compatible) mechanism later
|
||||
//$$ //noinspection StatementWithEmptyBody
|
||||
//$$ while (renderDispatcher.runTasksSync(0)) {}
|
||||
//$$
|
||||
//$$ workerJailingQueue.jail(workerThreads);
|
||||
//$$ renderDispatcherAcc.setQueueChunkUpdates(queueChunkUpdates);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public void updateChunks() {
|
||||
//$$ while (renderDispatcher.runTasksSync(0)) {
|
||||
//$$ ((WorldRendererAccessor) hooked).setDisplayListEntitiesDirty(true);
|
||||
//$$ }
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
PriorityBlockingQueue<ChunkRenderTask> queueChunkUpdates;
|
||||
//$$ PriorityBlockingQueue<ChunkRenderTask> queueChunkUpdates;
|
||||
//#else
|
||||
//$$ BlockingQueue<ChunkCompileTaskGenerator> queueChunkUpdates;
|
||||
//#endif
|
||||
queueChunkUpdates = ((ChunkRenderDispatcherAccessor) renderDispatcher).getQueueChunkUpdates();
|
||||
while (!queueChunkUpdates.isEmpty()) {
|
||||
try {
|
||||
renderWorker.doRunTask(queueChunkUpdates.poll());
|
||||
} catch (InterruptedException ignored) { }
|
||||
}
|
||||
|
||||
Iterator<ChunkRenderer> iterator = ((WorldRendererAccessor) hooked).getChunksToUpdate().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
ChunkRenderer renderchunk = iterator.next();
|
||||
|
||||
renderDispatcher.rebuildSync(renderchunk);
|
||||
|
||||
//$$ queueChunkUpdates = ((ChunkRenderDispatcherAccessor) renderDispatcher).getQueueChunkUpdates();
|
||||
//$$ while (!queueChunkUpdates.isEmpty()) {
|
||||
//$$ try {
|
||||
//$$ renderWorker.doRunTask(queueChunkUpdates.poll());
|
||||
//$$ } catch (InterruptedException ignored) { }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ Iterator<ChunkRenderer> iterator = ((WorldRendererAccessor) hooked).getChunksToUpdate().iterator();
|
||||
//$$ while (iterator.hasNext()) {
|
||||
//$$ ChunkRenderer renderchunk = iterator.next();
|
||||
//$$
|
||||
//$$ renderDispatcher.rebuildSync(renderchunk);
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
renderchunk.unscheduleRebuild();
|
||||
//$$ renderchunk.unscheduleRebuild();
|
||||
//#else
|
||||
//$$ renderchunk.setNeedsUpdate(false);
|
||||
//#endif
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public int nextFrameId() {
|
||||
return frame++;
|
||||
}
|
||||
//$$ iterator.remove();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public int nextFrameId() {
|
||||
//$$ return frame++;
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
public void uninstall() {
|
||||
//#if MC<11500
|
||||
workerJailingQueue.freeAll();
|
||||
//$$ workerJailingQueue.freeAll();
|
||||
//#endif
|
||||
|
||||
try {
|
||||
@@ -180,9 +180,9 @@ public class ChunkLoadingRenderGlobal {
|
||||
}
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ public interface IBlockOnChunkRebuilds {
|
||||
//$$ boolean uploadEverythingBlocking();
|
||||
//$$ }
|
||||
public interface IBlockOnChunkRebuilds {
|
||||
boolean uploadEverythingBlocking();
|
||||
}
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -9,7 +9,7 @@ import lombok.Getter;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -64,9 +64,9 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
|
||||
if (mc.world != null && mc.player != null) {
|
||||
//#if MC>=11500
|
||||
//$$ mc.gameRenderer.renderWorld(partialTicks, finishTimeNano, new MatrixStack());
|
||||
mc.gameRenderer.renderWorld(partialTicks, finishTimeNano, new MatrixStack());
|
||||
//#else
|
||||
mc.gameRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
//$$ mc.gameRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
//#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
//#if MC>=10800 && MC<11500
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
//$$ package com.replaymod.render.mixin;
|
||||
//$$
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
//$$
|
||||
//$$ import java.util.List;
|
||||
//#if MC>=10904
|
||||
import java.util.concurrent.PriorityBlockingQueue;
|
||||
//$$ import java.util.concurrent.PriorityBlockingQueue;
|
||||
//#else
|
||||
//$$ import java.util.concurrent.BlockingQueue;
|
||||
//#endif
|
||||
|
||||
@Mixin(ChunkBuilder.class)
|
||||
public interface ChunkRenderDispatcherAccessor {
|
||||
@Accessor("workers")
|
||||
List<ChunkRenderWorker> getListThreadedWorkers();
|
||||
|
||||
//$$
|
||||
//$$ @Mixin(ChunkBuilder.class)
|
||||
//$$ public interface ChunkRenderDispatcherAccessor {
|
||||
//$$ @Accessor("workers")
|
||||
//$$ List<ChunkRenderWorker> getListThreadedWorkers();
|
||||
//$$
|
||||
//#if MC>=10904
|
||||
@Accessor("pendingChunks")
|
||||
PriorityBlockingQueue<ChunkRenderTask> getQueueChunkUpdates();
|
||||
@Accessor("pendingChunks")
|
||||
void setQueueChunkUpdates(PriorityBlockingQueue<ChunkRenderTask> value);
|
||||
//$$ @Accessor("pendingChunks")
|
||||
//$$ PriorityBlockingQueue<ChunkRenderTask> getQueueChunkUpdates();
|
||||
//$$ @Accessor("pendingChunks")
|
||||
//$$ void setQueueChunkUpdates(PriorityBlockingQueue<ChunkRenderTask> value);
|
||||
//#else
|
||||
//$$ @Accessor
|
||||
//$$ BlockingQueue<ChunkCompileTaskGenerator> getQueueChunkUpdates();
|
||||
//$$ @Accessor
|
||||
//$$ void setQueueChunkUpdates(BlockingQueue<ChunkCompileTaskGenerator> value);
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=10800 && MC<11500
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(ChunkRenderWorker.class)
|
||||
public abstract class MixinChunkRenderWorker implements MCVer.ChunkRenderWorkerAccessor {
|
||||
@Shadow abstract void runTask(ChunkRenderTask task) throws InterruptedException;
|
||||
|
||||
public void doRunTask(ChunkRenderTask task) throws InterruptedException {
|
||||
runTask(task);
|
||||
}
|
||||
}
|
||||
//$$
|
||||
//$$ import com.replaymod.core.versions.MCVer;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderTask;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderWorker;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||
//$$
|
||||
//$$ @Mixin(ChunkRenderWorker.class)
|
||||
//$$ public abstract class MixinChunkRenderWorker implements MCVer.ChunkRenderWorkerAccessor {
|
||||
//$$ @Shadow abstract void runTask(ChunkRenderTask task) throws InterruptedException;
|
||||
//$$
|
||||
//$$ public void doRunTask(ChunkRenderTask task) throws InterruptedException {
|
||||
//$$ runTask(task);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@@ -14,8 +14,8 @@ import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -98,7 +98,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_renderSpectatorHand(
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
//#if MC>=11400
|
||||
Camera camera,
|
||||
@@ -140,76 +140,76 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
*/
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "method_22973", at = @At("RETURN"), cancellable = true)
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(CallbackInfoReturnable<Matrix4f> ci) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ Matrix4f offset;
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ offset = Matrix4f.translate(0.07f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ offset = Matrix4f.translate(-0.07f, 0, 0);
|
||||
//$$ } else {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ offset.multiply(ci.getReturnValue());
|
||||
//$$ ci.setReturnValue(offset);
|
||||
//$$ }
|
||||
//$$ }
|
||||
@Inject(method = "method_22973", at = @At("RETURN"), cancellable = true)
|
||||
private void replayModRender_setupStereoscopicProjection(CallbackInfoReturnable<Matrix4f> ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
Matrix4f offset;
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
offset = Matrix4f.translate(0.07f, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
offset = Matrix4f.translate(-0.07f, 0, 0);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
offset.multiply(ci.getReturnValue());
|
||||
ci.setReturnValue(offset);
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||
//$$ @Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 0, remap = false))
|
||||
//#endif
|
||||
private void replayModRender_setupStereoscopicProjection(
|
||||
float partialTicks,
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(
|
||||
//$$ float partialTicks,
|
||||
//#if MC<11400
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
GL11.glTranslatef(0.07f, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
GL11.glTranslatef(-0.07f, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//$$ private void replayModRender_setupStereoscopicProjection(float partialTicks, long frameStartNano, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ matrixStack.translate(0.1, 0, 0);
|
||||
//$$ GL11.glTranslatef(0.07f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ matrixStack.translate(-0.1, 0, 0);
|
||||
//$$ GL11.glTranslatef(-0.07f, 0, 0);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false))
|
||||
//#endif
|
||||
private void replayModRender_setupStereoscopicModelView(
|
||||
float partialTicks,
|
||||
//#if MC<11400
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
|
||||
//#if MC>=11500
|
||||
@Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
private void replayModRender_setupStereoscopicProjection(float partialTicks, long frameStartNano, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
GL11.glTranslatef(0.1f, 0, 0);
|
||||
matrixStack.translate(0.1, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
GL11.glTranslatef(-0.1f, 0, 0);
|
||||
matrixStack.translate(-0.1, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false))
|
||||
//#endif
|
||||
//$$ private void replayModRender_setupStereoscopicModelView(
|
||||
//$$ float partialTicks,
|
||||
//#if MC<11400
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ if (replayModRender_getHandler() != null) {
|
||||
//$$ if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
//$$ GL11.glTranslatef(0.1f, 0, 0);
|
||||
//$$ } else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
//$$ GL11.glTranslatef(-0.1f, 0, 0);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
/*
|
||||
@@ -217,25 +217,25 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
*/
|
||||
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
@Redirect(method = "method_22973", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;viewboxMatrix(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
private Matrix4f replayModRender_perspective$0(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
//#if MC<11500
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;"))
|
||||
//#endif
|
||||
private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
@Redirect(method = "renderAboveClouds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//$$ private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) {
|
||||
//$$ return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Redirect(method = "renderAboveClouds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//$$ private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) {
|
||||
//$$ return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
@@ -243,7 +243,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
fovY = 90;
|
||||
aspect = 1;
|
||||
}
|
||||
return Matrix4f.method_4929(fovY, aspect, zNear, zFar);
|
||||
return Matrix4f.viewboxMatrix(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//#else
|
||||
//$$ @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
|
||||
@@ -18,7 +18,7 @@ public abstract class MixinFogRenderer {
|
||||
@Inject(method = "applyFog", at = @At("HEAD"), cancellable = true)
|
||||
private
|
||||
//#if MC>=11500
|
||||
//$$ static
|
||||
static
|
||||
//#endif
|
||||
void replayModRender_onSetupFog(CallbackInfo ci) {
|
||||
EntityRendererHandler handler =
|
||||
|
||||
@@ -20,9 +20,9 @@ import net.minecraft.client.render.Frustum;
|
||||
//#endif
|
||||
public abstract class MixinFrustum {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "isAnyCornerVisible", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "isAnyCornerVisible", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
@Inject(method = "intersects", at = @At("HEAD"), cancellable = true)
|
||||
//$$ @Inject(method = "intersects", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
public void intersects(CallbackInfoReturnable<Boolean> ci) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
|
||||
@@ -13,11 +13,11 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumer;
|
||||
//$$ import net.minecraft.util.math.Quaternion;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.util.math.Quaternion;
|
||||
//#else
|
||||
import com.replaymod.render.blend.mixin.ParticleAccessor;
|
||||
import net.minecraft.client.render.BufferBuilder;
|
||||
//$$ import com.replaymod.render.blend.mixin.ParticleAccessor;
|
||||
//$$ import net.minecraft.client.render.BufferBuilder;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -29,40 +29,40 @@ import net.minecraft.client.render.Camera;
|
||||
@Mixin(ParticleManager.class)
|
||||
public abstract class MixinParticleManager {
|
||||
//#if MC>=11500
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/VertexConsumer;Lnet/minecraft/client/render/Camera;F)V"))
|
||||
//$$ private void buildOrientedGeometry(Particle particle, VertexConsumer vertexConsumer, Camera camera, float partialTicks) {
|
||||
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
//$$ if (handler == null || !handler.omnidirectional) {
|
||||
//$$ buildGeometry(particle, vertexConsumer, camera, partialTicks);
|
||||
//$$ } else {
|
||||
//$$ Quaternion rotation = camera.getRotation();
|
||||
//$$ Quaternion org = rotation.copy();
|
||||
//$$ try {
|
||||
//$$ Vec3d from = new Vec3d(0, 0, 1);
|
||||
//$$ Vec3d to = MCVer.getPosition(particle, partialTicks).subtract(camera.getPos()).normalize();
|
||||
//$$ Vec3d axis = from.crossProduct(to);
|
||||
//$$ rotation.set((float) axis.x, (float) axis.y, (float) axis.z, (float) (1 + from.dotProduct(to)));
|
||||
//$$ rotation.normalize();
|
||||
//$$
|
||||
//$$ buildGeometry(particle, vertexConsumer, camera, partialTicks);
|
||||
//$$ } finally {
|
||||
//$$ rotation.set(org.getA(), org.getB(), org.getC(), org.getD());
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private void buildGeometry(Particle particle, VertexConsumer vertexConsumer, Camera camera, float partialTicks) {
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
|
||||
//$$ }
|
||||
//$$ particle.buildGeometry(vertexConsumer, camera, partialTicks);
|
||||
//$$ }
|
||||
@Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/VertexConsumer;Lnet/minecraft/client/render/Camera;F)V"))
|
||||
private void buildOrientedGeometry(Particle particle, VertexConsumer vertexConsumer, Camera camera, float partialTicks) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
if (handler == null || !handler.omnidirectional) {
|
||||
buildGeometry(particle, vertexConsumer, camera, partialTicks);
|
||||
} else {
|
||||
Quaternion rotation = camera.getRotation();
|
||||
Quaternion org = rotation.copy();
|
||||
try {
|
||||
Vec3d from = new Vec3d(0, 0, 1);
|
||||
Vec3d to = MCVer.getPosition(particle, partialTicks).subtract(camera.getPos()).normalize();
|
||||
Vec3d axis = from.crossProduct(to);
|
||||
rotation.set((float) axis.x, (float) axis.y, (float) axis.z, (float) (1 + from.dotProduct(to)));
|
||||
rotation.normalize();
|
||||
|
||||
buildGeometry(particle, vertexConsumer, camera, partialTicks);
|
||||
} finally {
|
||||
rotation.set(org.getA(), org.getB(), org.getC(), org.getD());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void buildGeometry(Particle particle, VertexConsumer vertexConsumer, Camera camera, float partialTicks) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
|
||||
}
|
||||
particle.buildGeometry(vertexConsumer, camera, partialTicks);
|
||||
}
|
||||
//#else
|
||||
//#if MC>=11200
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/client/render/Camera;FFFFFF)V"))
|
||||
private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks,
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/client/render/Camera;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks,
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks,
|
||||
@@ -71,11 +71,11 @@ public abstract class MixinParticleManager {
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/VertexBuffer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks,
|
||||
//#endif
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
|
||||
// Seems to be gone by 1.14
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Seems to be gone by 1.14
|
||||
//#if MC<11400
|
||||
//#if MC>=11200
|
||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
@@ -88,41 +88,41 @@ public abstract class MixinParticleManager {
|
||||
//$$ renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private void renderParticle(Particle particle,
|
||||
BufferBuilder vertexBuffer,
|
||||
//$$
|
||||
//$$ private void renderParticle(Particle particle,
|
||||
//$$ BufferBuilder vertexBuffer,
|
||||
//#if MC>=11400
|
||||
Camera view,
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
//$$ Entity view,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
// Align all particles towards the camera
|
||||
//$$ float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler();
|
||||
//$$ if (handler != null && handler.omnidirectional) {
|
||||
//$$ // Align all particles towards the camera
|
||||
//#if MC>=11400
|
||||
Vec3d pos = view.getPos();
|
||||
//$$ Vec3d pos = view.getPos();
|
||||
//#else
|
||||
//$$ Vec3d pos = new Vec3d(view.posX, view.posY, view.posZ);
|
||||
//#endif
|
||||
Vec3d d = MCVer.getPosition(particle, partialTicks).subtract(pos);
|
||||
double pitch = -Math.atan2(d.y, Math.sqrt(d.x * d.x + d.z * d.z));
|
||||
double yaw = -Math.atan2(d.x, d.z);
|
||||
|
||||
rotX = (float) Math.cos(yaw);
|
||||
rotZ = (float) Math.sin(yaw);
|
||||
rotXZ = (float) Math.cos(pitch);
|
||||
|
||||
rotYZ = (float) (-rotZ * Math.sin(pitch));
|
||||
rotXY = (float) (rotX * Math.sin(pitch));
|
||||
}
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
|
||||
}
|
||||
particle.buildGeometry(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
//$$ Vec3d d = MCVer.getPosition(particle, partialTicks).subtract(pos);
|
||||
//$$ double pitch = -Math.atan2(d.y, Math.sqrt(d.x * d.x + d.z * d.z));
|
||||
//$$ double yaw = -Math.atan2(d.x, d.z);
|
||||
//$$
|
||||
//$$ rotX = (float) Math.cos(yaw);
|
||||
//$$ rotZ = (float) Math.sin(yaw);
|
||||
//$$ rotXZ = (float) Math.cos(pitch);
|
||||
//$$
|
||||
//$$ rotYZ = (float) (-rotZ * Math.sin(pitch));
|
||||
//$$ rotXY = (float) (rotX * Math.sin(pitch));
|
||||
//$$ }
|
||||
//$$ BlendState blendState = BlendState.getState();
|
||||
//$$ if (blendState != null) {
|
||||
//$$ blendState.get(ParticlesExporter.class).onRender(particle, partialTicks);
|
||||
//$$ }
|
||||
//$$ particle.buildGeometry(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -11,10 +11,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
@Mixin(EntityRenderer.class)
|
||||
public abstract class MixinRender {
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
|
||||
//$$ @Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//$$ @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
|
||||
@@ -10,10 +10,10 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.VertexConsumerProvider;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
//$$ import net.minecraft.util.math.Quaternion;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.util.math.Quaternion;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
@@ -25,17 +25,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
@Mixin(EntityRenderDispatcher.class)
|
||||
public abstract class MixinRenderManager {
|
||||
//#if MC>=11500
|
||||
//$$ @Shadow private Quaternion rotation;
|
||||
@Shadow private Quaternion rotation;
|
||||
//#else
|
||||
@Shadow private float cameraPitch;
|
||||
@Shadow private float cameraYaw;
|
||||
//$$ @Shadow private float cameraPitch;
|
||||
//$$ @Shadow private float cameraYaw;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "render", at = @At("HEAD"))
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400 && FABRIC>=1
|
||||
@Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderEntity", at = @At("HEAD"))
|
||||
@@ -47,11 +47,11 @@ public abstract class MixinRenderManager {
|
||||
//#if MC>=10904
|
||||
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks,
|
||||
//#if MC>=11500
|
||||
//$$ MatrixStack matrixStack,
|
||||
//$$ VertexConsumerProvider vertexConsumerProvider,
|
||||
//$$ int int_1,
|
||||
MatrixStack matrixStack,
|
||||
VertexConsumerProvider vertexConsumerProvider,
|
||||
int int_1,
|
||||
//#else
|
||||
boolean iDoNotCare,
|
||||
//$$ boolean iDoNotCare,
|
||||
//#endif
|
||||
CallbackInfo ci) {
|
||||
//#else
|
||||
@@ -62,12 +62,12 @@ public abstract class MixinRenderManager {
|
||||
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
||||
double yaw = -Math.atan2(dx, dz);
|
||||
//#if MC>=11500
|
||||
//$$ this.rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F);
|
||||
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) -yaw));
|
||||
//$$ this.rotation.hamiltonProduct(Vector3f.POSITIVE_X.getDegreesQuaternion((float) pitch));
|
||||
this.rotation = new Quaternion(0.0F, 0.0F, 0.0F, 1.0F);
|
||||
this.rotation.hamiltonProduct(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) -yaw));
|
||||
this.rotation.hamiltonProduct(Vector3f.POSITIVE_X.getDegreesQuaternion((float) pitch));
|
||||
//#else
|
||||
this.cameraPitch = (float) Math.toDegrees(pitch);
|
||||
this.cameraYaw = (float) Math.toDegrees(yaw);
|
||||
//$$ this.cameraPitch = (float) Math.toDegrees(pitch);
|
||||
//$$ this.cameraYaw = (float) Math.toDegrees(yaw);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,111 +1,111 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
//$$ import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
//$$ import net.minecraft.util.thread.TaskExecutor;
|
||||
//$$ import org.spongepowered.asm.mixin.Final;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//$$
|
||||
//$$ import java.util.Queue;
|
||||
//$$ import java.util.concurrent.CompletableFuture;
|
||||
//$$ import java.util.concurrent.locks.Condition;
|
||||
//$$ import java.util.concurrent.locks.Lock;
|
||||
//$$ import java.util.concurrent.locks.ReentrantLock;
|
||||
//$$
|
||||
//$$ @Mixin(ChunkBuilder.class)
|
||||
//$$ public abstract class Mixin_BlockOnChunkRebuilds implements ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds {
|
||||
//$$ @Shadow @Final private Queue<BlockBufferBuilderStorage> threadBuffers;
|
||||
//$$
|
||||
//$$ @Shadow public abstract boolean upload();
|
||||
//$$
|
||||
//$$ @Shadow @Final private TaskExecutor<Runnable> mailbox;
|
||||
//$$
|
||||
//$$ @Shadow protected abstract void scheduleRunTasks();
|
||||
//$$
|
||||
//$$ @Shadow @Final private Queue<Runnable> uploadQueue;
|
||||
//$$ private final Lock waitingForWorkLock = new ReentrantLock();
|
||||
//$$ private final Condition newWork = waitingForWorkLock.newCondition();
|
||||
//$$ private volatile boolean allDone;
|
||||
//$$
|
||||
//$$ private int totalBufferCount;
|
||||
//$$
|
||||
//$$ @Inject(method = "<init>", at = @At("RETURN"))
|
||||
//$$ private void rememberTotalThreads(CallbackInfo ci) {
|
||||
//$$ this.totalBufferCount = this.threadBuffers.size();
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "scheduleRunTasks", at = @At("RETURN"))
|
||||
//$$ private void notifyMainThreadIfEverythingIsDone(CallbackInfo ci) {
|
||||
//$$ if (this.threadBuffers.size() == this.totalBufferCount) {
|
||||
//$$ // Looks like we're done, better notify the main thread in case the previous task didn't generate an upload
|
||||
//$$ this.waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ this.allDone = true;
|
||||
//$$ this.newWork.signalAll();
|
||||
//$$ } finally {
|
||||
//$$ this.waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ } else {
|
||||
//$$ this.allDone = false;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Inject(method = "scheduleUpload", at = @At("RETURN"))
|
||||
//$$ private void notifyMainThreadOfNewUpload(CallbackInfoReturnable<CompletableFuture<Void>> ci) {
|
||||
//$$ this.waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ this.newWork.signal();
|
||||
//$$ } finally {
|
||||
//$$ this.waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ private boolean waitForMainThreadWork() {
|
||||
//$$ boolean allDone = this.mailbox.<Boolean>ask(reply -> () -> {
|
||||
//$$ scheduleRunTasks();
|
||||
//$$ reply.send(this.threadBuffers.size() == this.totalBufferCount);
|
||||
//$$ }).join();
|
||||
//$$
|
||||
//$$ if (allDone) {
|
||||
//$$ return true;
|
||||
//$$ } else {
|
||||
//$$ this.waitingForWorkLock.lock();
|
||||
//$$ try {
|
||||
//$$ while (true) {
|
||||
//$$ if (this.allDone) {
|
||||
//$$ return true;
|
||||
//$$ } else if (!this.uploadQueue.isEmpty()) {
|
||||
//$$ return false;
|
||||
//$$ } else {
|
||||
//$$ this.newWork.awaitUninterruptibly();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ } finally {
|
||||
//$$ this.waitingForWorkLock.unlock();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ @Override
|
||||
//$$ public boolean uploadEverythingBlocking() {
|
||||
//$$ boolean anything = false;
|
||||
//$$
|
||||
//$$ boolean allChunksBuilt;
|
||||
//$$ do {
|
||||
//$$ allChunksBuilt = waitForMainThreadWork();
|
||||
//$$ while (upload()) {
|
||||
//$$ anything = true;
|
||||
//$$ }
|
||||
//$$ } while (!allChunksBuilt);
|
||||
//$$
|
||||
//$$ return anything;
|
||||
//$$ }
|
||||
//$$ }
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
import net.minecraft.client.render.chunk.BlockBufferBuilderStorage;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
import net.minecraft.util.thread.TaskExecutor;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.locks.Condition;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
@Mixin(ChunkBuilder.class)
|
||||
public abstract class Mixin_BlockOnChunkRebuilds implements ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds {
|
||||
@Shadow @Final private Queue<BlockBufferBuilderStorage> threadBuffers;
|
||||
|
||||
@Shadow public abstract boolean upload();
|
||||
|
||||
@Shadow @Final private TaskExecutor<Runnable> mailbox;
|
||||
|
||||
@Shadow protected abstract void scheduleRunTasks();
|
||||
|
||||
@Shadow @Final private Queue<Runnable> uploadQueue;
|
||||
private final Lock waitingForWorkLock = new ReentrantLock();
|
||||
private final Condition newWork = waitingForWorkLock.newCondition();
|
||||
private volatile boolean allDone;
|
||||
|
||||
private int totalBufferCount;
|
||||
|
||||
@Inject(method = "<init>", at = @At("RETURN"))
|
||||
private void rememberTotalThreads(CallbackInfo ci) {
|
||||
this.totalBufferCount = this.threadBuffers.size();
|
||||
}
|
||||
|
||||
@Inject(method = "scheduleRunTasks", at = @At("RETURN"))
|
||||
private void notifyMainThreadIfEverythingIsDone(CallbackInfo ci) {
|
||||
if (this.threadBuffers.size() == this.totalBufferCount) {
|
||||
// Looks like we're done, better notify the main thread in case the previous task didn't generate an upload
|
||||
this.waitingForWorkLock.lock();
|
||||
try {
|
||||
this.allDone = true;
|
||||
this.newWork.signalAll();
|
||||
} finally {
|
||||
this.waitingForWorkLock.unlock();
|
||||
}
|
||||
} else {
|
||||
this.allDone = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "scheduleUpload", at = @At("RETURN"))
|
||||
private void notifyMainThreadOfNewUpload(CallbackInfoReturnable<CompletableFuture<Void>> ci) {
|
||||
this.waitingForWorkLock.lock();
|
||||
try {
|
||||
this.newWork.signal();
|
||||
} finally {
|
||||
this.waitingForWorkLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean waitForMainThreadWork() {
|
||||
boolean allDone = this.mailbox.<Boolean>ask(reply -> () -> {
|
||||
scheduleRunTasks();
|
||||
reply.send(this.threadBuffers.size() == this.totalBufferCount);
|
||||
}).join();
|
||||
|
||||
if (allDone) {
|
||||
return true;
|
||||
} else {
|
||||
this.waitingForWorkLock.lock();
|
||||
try {
|
||||
while (true) {
|
||||
if (this.allDone) {
|
||||
return true;
|
||||
} else if (!this.uploadQueue.isEmpty()) {
|
||||
return false;
|
||||
} else {
|
||||
this.newWork.awaitUninterruptibly();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
this.waitingForWorkLock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean uploadEverythingBlocking() {
|
||||
boolean anything = false;
|
||||
|
||||
boolean allChunksBuilt;
|
||||
do {
|
||||
allChunksBuilt = waitForMainThreadWork();
|
||||
while (upload()) {
|
||||
anything = true;
|
||||
}
|
||||
} while (!allChunksBuilt);
|
||||
|
||||
return anything;
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -10,9 +10,9 @@ import org.spongepowered.asm.mixin.injection.Constant;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyConstant;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
//#else
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
//$$ import net.minecraft.client.render.GameRenderer;
|
||||
//#endif
|
||||
|
||||
/**
|
||||
@@ -20,17 +20,17 @@ import net.minecraft.client.render.GameRenderer;
|
||||
* at 4 or greater.
|
||||
*/
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(WorldRenderer.class)
|
||||
@Mixin(WorldRenderer.class)
|
||||
//#else
|
||||
@Mixin(GameRenderer.class)
|
||||
//$$ @Mixin(GameRenderer.class)
|
||||
//#endif
|
||||
public abstract class Mixin_ChromaKeyForceSky {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @ModifyConstant(method = "render", constant = @Constant(intValue = 4))
|
||||
@ModifyConstant(method = "render", constant = @Constant(intValue = 4))
|
||||
//#else
|
||||
@ModifyConstant(method = "renderCenter", constant = @Constant(intValue = 4))
|
||||
//$$ @ModifyConstant(method = "renderCenter", constant = @Constant(intValue = 4))
|
||||
//#endif
|
||||
private int forceSkyWhenChromaKeying(int value) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) this.client.gameRenderer).replayModRender_getHandler();
|
||||
|
||||
@@ -8,19 +8,19 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
//#else
|
||||
import org.lwjgl.opengl.GL11;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getMinecraft;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(value = net.minecraft.client.render.GameRenderer.class)
|
||||
@Mixin(value = net.minecraft.client.render.GameRenderer.class)
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Mixin(value = net.minecraft.client.render.Camera.class)
|
||||
//$$ @Mixin(value = net.minecraft.client.render.Camera.class)
|
||||
//#else
|
||||
//$$ @Mixin(value = net.minecraft.client.renderer.EntityRenderer.class)
|
||||
//#endif
|
||||
@@ -31,19 +31,19 @@ public abstract class Mixin_CubicRotation {
|
||||
}
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
@Inject(method = "renderWorld", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Inject(method = "update", at = @At("HEAD"))
|
||||
//$$ @Inject(method = "update", at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
//#endif
|
||||
//#endif
|
||||
private void replayModRender_setupCubicFrameRotation(
|
||||
//#if MC>=11500
|
||||
//$$ float partialTicks,
|
||||
//$$ long frameStartNano,
|
||||
//$$ MatrixStack matrixStack,
|
||||
float partialTicks,
|
||||
long frameStartNano,
|
||||
MatrixStack matrixStack,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
@@ -79,20 +79,20 @@ public abstract class Mixin_CubicRotation {
|
||||
break;
|
||||
}
|
||||
//#if MC>=11500
|
||||
//$$ matrixStack.multiply(new Vector3f(x, y, 0).getDegreesQuaternion(angle));
|
||||
matrixStack.multiply(new Vector3f(x, y, 0).getDegreesQuaternion(angle));
|
||||
//#else
|
||||
GL11.glRotatef(angle, x, y, 0);
|
||||
//$$ GL11.glRotatef(angle, x, y, 0);
|
||||
//#endif
|
||||
}
|
||||
//#if MC<11500
|
||||
if (getHandler() != null && getHandler().omnidirectional) {
|
||||
// Minecraft goes back a little so we have to revert that
|
||||
//$$ if (getHandler() != null && getHandler().omnidirectional) {
|
||||
//$$ // Minecraft goes back a little so we have to revert that
|
||||
//#if MC>=11400
|
||||
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//#else
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
//#endif
|
||||
}
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,14 +12,14 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import java.util.Set;
|
||||
import java.util.Set;
|
||||
//#else
|
||||
import net.minecraft.client.render.VisibleRegion;
|
||||
import net.minecraft.entity.Entity;
|
||||
//$$ import net.minecraft.client.render.VisibleRegion;
|
||||
//$$ import net.minecraft.entity.Entity;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400 && MC<11500
|
||||
import net.minecraft.client.render.Camera;
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -43,118 +43,118 @@ public abstract class Mixin_ForceChunkLoading {
|
||||
public ChunkLoadingRenderGlobal replayModRender_hook;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Shadow private Set<ChunkBuilder.BuiltChunk> chunksToRebuild;
|
||||
//$$
|
||||
//$$ @Shadow private ChunkBuilder chunkBuilder;
|
||||
//$$
|
||||
//$$ @Shadow private boolean needsTerrainUpdate;
|
||||
//$$
|
||||
//$$ @Shadow public abstract void scheduleTerrainUpdate();
|
||||
//$$
|
||||
//$$ @Shadow protected abstract void setupTerrain(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2);
|
||||
//$$
|
||||
//$$ @Shadow private int frame;
|
||||
//$$
|
||||
//$$ private boolean passThrough;
|
||||
//$$ @Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true)
|
||||
//$$ private void forceAllChunks(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2, CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook == null) {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ if (passThrough) {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$ ci.cancel();
|
||||
//$$
|
||||
//$$ passThrough = true;
|
||||
//$$ try {
|
||||
//$$ do {
|
||||
//$$ // Determine which chunks shall be visible
|
||||
//$$ setupTerrain(camera_1, frustum_1, boolean_1, frame++, boolean_2);
|
||||
//$$
|
||||
//$$ // Schedule all chunks which need rebuilding (we schedule even important rebuilds because we wait for
|
||||
//$$ // all of them anyway and this way we can take advantage of threading)
|
||||
//$$ for (ChunkBuilder.BuiltChunk builtChunk : this.chunksToRebuild) {
|
||||
//$$ builtChunk.scheduleRebuild(this.chunkBuilder);
|
||||
//$$ builtChunk.cancelRebuild();
|
||||
//$$ }
|
||||
//$$ this.chunksToRebuild.clear();
|
||||
//$$
|
||||
//$$ // Upload all chunks
|
||||
//$$ this.needsTerrainUpdate |= ((ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds) this.chunkBuilder).uploadEverythingBlocking();
|
||||
//$$
|
||||
//$$ // Repeat until no more updates are needed
|
||||
//$$ } while (this.needsTerrainUpdate);
|
||||
//$$ } finally {
|
||||
//$$ passThrough = false;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
private boolean replayModRender_passThroughSetupTerrain;
|
||||
@Shadow private Set<ChunkBuilder.BuiltChunk> chunksToRebuild;
|
||||
|
||||
@Shadow
|
||||
public boolean needsTerrainUpdate;
|
||||
@Shadow private ChunkBuilder chunkBuilder;
|
||||
|
||||
@Shadow
|
||||
public ChunkBuilder chunkBuilder;
|
||||
@Shadow private boolean needsTerrainUpdate;
|
||||
|
||||
@Shadow
|
||||
public abstract void setUpTerrain(
|
||||
//#if MC>=11400
|
||||
Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
VisibleRegion camera,
|
||||
int frameCount,
|
||||
boolean playerSpectator
|
||||
);
|
||||
@Shadow public abstract void scheduleTerrainUpdate();
|
||||
|
||||
@Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_setupTerrain(
|
||||
//#if MC>=11400
|
||||
Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
VisibleRegion camera,
|
||||
int frameCount,
|
||||
boolean playerSpectator,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (replayModRender_hook != null && !replayModRender_passThroughSetupTerrain) {
|
||||
replayModRender_passThroughSetupTerrain = true;
|
||||
@Shadow protected abstract void setupTerrain(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2);
|
||||
|
||||
@Shadow private int frame;
|
||||
|
||||
private boolean passThrough;
|
||||
@Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true)
|
||||
private void forceAllChunks(Camera camera_1, Frustum frustum_1, boolean boolean_1, int int_1, boolean boolean_2, CallbackInfo ci) {
|
||||
if (replayModRender_hook == null) {
|
||||
return;
|
||||
}
|
||||
if (passThrough) {
|
||||
return;
|
||||
}
|
||||
ci.cancel();
|
||||
|
||||
passThrough = true;
|
||||
try {
|
||||
do {
|
||||
setUpTerrain(
|
||||
viewEntity,
|
||||
// Determine which chunks shall be visible
|
||||
setupTerrain(camera_1, frustum_1, boolean_1, frame++, boolean_2);
|
||||
|
||||
// Schedule all chunks which need rebuilding (we schedule even important rebuilds because we wait for
|
||||
// all of them anyway and this way we can take advantage of threading)
|
||||
for (ChunkBuilder.BuiltChunk builtChunk : this.chunksToRebuild) {
|
||||
builtChunk.scheduleRebuild(this.chunkBuilder);
|
||||
builtChunk.cancelRebuild();
|
||||
}
|
||||
this.chunksToRebuild.clear();
|
||||
|
||||
// Upload all chunks
|
||||
this.needsTerrainUpdate |= ((ChunkLoadingRenderGlobal.IBlockOnChunkRebuilds) this.chunkBuilder).uploadEverythingBlocking();
|
||||
|
||||
// Repeat until no more updates are needed
|
||||
} while (this.needsTerrainUpdate);
|
||||
} finally {
|
||||
passThrough = false;
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//$$ private boolean replayModRender_passThroughSetupTerrain;
|
||||
//$$
|
||||
//$$ @Shadow
|
||||
//$$ public boolean needsTerrainUpdate;
|
||||
//$$
|
||||
//$$ @Shadow
|
||||
//$$ public ChunkBuilder chunkBuilder;
|
||||
//$$
|
||||
//$$ @Shadow
|
||||
//$$ public abstract void setUpTerrain(
|
||||
//#if MC>=11400
|
||||
//$$ Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
//$$ VisibleRegion camera,
|
||||
//$$ int frameCount,
|
||||
//$$ boolean playerSpectator
|
||||
//$$ );
|
||||
//$$
|
||||
//$$ @Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true)
|
||||
//$$ private void replayModRender_setupTerrain(
|
||||
//#if MC>=11400
|
||||
//$$ Camera viewEntity,
|
||||
//#else
|
||||
//$$ Entity viewEntity,
|
||||
//#if MC>=11400
|
||||
//$$ float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
//$$ VisibleRegion camera,
|
||||
//$$ int frameCount,
|
||||
//$$ boolean playerSpectator,
|
||||
//$$ CallbackInfo ci
|
||||
//$$ ) {
|
||||
//$$ if (replayModRender_hook != null && !replayModRender_passThroughSetupTerrain) {
|
||||
//$$ replayModRender_passThroughSetupTerrain = true;
|
||||
//$$
|
||||
//$$ do {
|
||||
//$$ setUpTerrain(
|
||||
//$$ viewEntity,
|
||||
//#if MC<11400
|
||||
//$$ partialTicks,
|
||||
//#endif
|
||||
camera,
|
||||
replayModRender_hook.nextFrameId(),
|
||||
playerSpectator
|
||||
);
|
||||
replayModRender_hook.updateChunks();
|
||||
} while (this.needsTerrainUpdate);
|
||||
|
||||
this.needsTerrainUpdate = true;
|
||||
|
||||
replayModRender_passThroughSetupTerrain = false;
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
//$$ camera,
|
||||
//$$ replayModRender_hook.nextFrameId(),
|
||||
//$$ playerSpectator
|
||||
//$$ );
|
||||
//$$ replayModRender_hook.updateChunks();
|
||||
//$$ } while (this.needsTerrainUpdate);
|
||||
//$$
|
||||
//$$ this.needsTerrainUpdate = true;
|
||||
//$$
|
||||
//$$ replayModRender_passThroughSetupTerrain = false;
|
||||
//$$ ci.cancel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//#if MC<10904
|
||||
//$$ @Inject(method = "isPositionInRenderChunk", at = @At("HEAD"), cancellable = true)
|
||||
//$$ public void replayModRender_isPositionInRenderChunk(BlockPos pos, RenderChunk chunk, CallbackInfoReturnable<Boolean> ci) {
|
||||
@@ -163,31 +163,31 @@ public abstract class Mixin_ForceChunkLoading {
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "updateChunks", at = @At("HEAD"), cancellable = true)
|
||||
public void replayModRender_updateChunks(long finishTimeNano, CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateChunks();
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
// Prior to 1.9.4, MC always uses the same ChunkRenderDispatcher instance
|
||||
//$$
|
||||
//$$ @Inject(method = "updateChunks", at = @At("HEAD"), cancellable = true)
|
||||
//$$ public void replayModRender_updateChunks(long finishTimeNano, CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook != null) {
|
||||
//$$ replayModRender_hook.updateChunks();
|
||||
//$$ ci.cancel();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Prior to 1.9.4, MC always uses the same ChunkRenderDispatcher instance
|
||||
//#if MC>=10904
|
||||
@Inject(method = "setWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/chunk/ChunkBuilder;stop()V"))
|
||||
private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateRenderDispatcher(null);
|
||||
}
|
||||
}
|
||||
//$$ @Inject(method = "setWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/chunk/ChunkBuilder;stop()V"))
|
||||
//$$ private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook != null) {
|
||||
//$$ replayModRender_hook.updateRenderDispatcher(null);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "reload", at = @At(value = "RETURN"))
|
||||
private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateRenderDispatcher(this.chunkBuilder);
|
||||
}
|
||||
}
|
||||
//$$
|
||||
//$$ @Inject(method = "reload", at = @At(value = "RETURN"))
|
||||
//$$ private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
//$$ if (replayModRender_hook != null) {
|
||||
//$$ replayModRender_hook.updateRenderDispatcher(this.chunkBuilder);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class Mixin_SkipBlockOutlinesDuringRender {
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
|
||||
@Inject(method = "drawHighlightedBlockOutline", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "drawBlockOutline", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_drawSelectionBox(CallbackInfo ci) {
|
||||
if (((EntityRendererHandler.IEntityRenderer) this.client.gameRenderer).replayModRender_getHandler() != null) {
|
||||
ci.cancel();
|
||||
|
||||
@@ -10,30 +10,30 @@ import java.util.Set;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
//#else
|
||||
import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public interface WorldRendererAccessor {
|
||||
//#if MC<11500
|
||||
@Accessor("field_4076")
|
||||
void setRenderEntitiesStartupCounter(int value);
|
||||
|
||||
//$$ @Accessor("field_4076")
|
||||
//$$ void setRenderEntitiesStartupCounter(int value);
|
||||
//$$
|
||||
//#if MC>=10800
|
||||
@Accessor("chunkBuilder")
|
||||
ChunkBuilder getRenderDispatcher();
|
||||
|
||||
@Accessor("needsTerrainUpdate")
|
||||
void setDisplayListEntitiesDirty(boolean value);
|
||||
|
||||
@Accessor("chunksToRebuild")
|
||||
//$$ @Accessor("chunkBuilder")
|
||||
//$$ ChunkBuilder getRenderDispatcher();
|
||||
//$$
|
||||
//$$ @Accessor("needsTerrainUpdate")
|
||||
//$$ void setDisplayListEntitiesDirty(boolean value);
|
||||
//$$
|
||||
//$$ @Accessor("chunksToRebuild")
|
||||
//#if MC>=11500
|
||||
//$$ Set<BuiltChunk> getChunksToUpdate();
|
||||
//#else
|
||||
Set<ChunkRenderer> getChunksToUpdate();
|
||||
//$$ Set<ChunkRenderer> getChunksToUpdate();
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
@@ -33,9 +33,9 @@ import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
//$$ import net.minecraft.client.util.Window;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import net.minecraft.client.util.Window;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -169,7 +169,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
//#if MC<11500
|
||||
((WorldRendererAccessor) mc.worldRenderer).setRenderEntitiesStartupCounter(0);
|
||||
//$$ ((WorldRendererAccessor) mc.worldRenderer).setRenderEntitiesStartupCounter(0);
|
||||
//#endif
|
||||
|
||||
renderingPipeline.run();
|
||||
@@ -377,7 +377,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
acc.setFramebufferWidth(displayWidth);
|
||||
acc.setFramebufferHeight(displayHeight);
|
||||
//#if MC>=11500
|
||||
//$$ mc.gameRenderer.onResized(displayWidth, displayHeight);
|
||||
mc.gameRenderer.onResized(displayWidth, displayHeight);
|
||||
//#endif
|
||||
//#else
|
||||
//$$ mc.resize(displayWidth, displayHeight);
|
||||
@@ -441,21 +441,21 @@ public class VideoRenderer implements RenderInfo {
|
||||
guiFramebuffer.beginWrite(true);
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ Window window = getWindow(mc);
|
||||
//$$ RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.translatef(0, 0, -2000);
|
||||
Window window = getWindow(mc);
|
||||
RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
RenderSystem.loadIdentity();
|
||||
RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
RenderSystem.loadIdentity();
|
||||
RenderSystem.translatef(0, 0, -2000);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
getWindow(mc).method_4493(
|
||||
//$$ getWindow(mc).method_4493(
|
||||
//#if MC>=11400
|
||||
false
|
||||
//$$ false
|
||||
//#endif
|
||||
);
|
||||
//$$ );
|
||||
//#else
|
||||
//$$ mc.entityRenderer.setupOverlayRendering();
|
||||
//#endif
|
||||
@@ -504,10 +504,10 @@ public class VideoRenderer implements RenderInfo {
|
||||
popMatrix();
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ getWindow(mc).swapBuffers();
|
||||
getWindow(mc).swapBuffers();
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
getWindow(mc).setFullscreen(false);
|
||||
//$$ getWindow(mc).setFullscreen(false);
|
||||
//#else
|
||||
//$$ // if not in high performance mode, update the gui size if screen size changed
|
||||
//$$ // otherwise just swap the progress gui to screen
|
||||
|
||||
@@ -585,7 +585,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
entId,
|
||||
GameMode.SPECTATOR,
|
||||
//#if MC>=11500
|
||||
//$$ packet.getSeed(),
|
||||
packet.getSeed(),
|
||||
//#endif
|
||||
false,
|
||||
packet.getDimension(),
|
||||
@@ -594,7 +594,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
packet.getChunkLoadDistance(),
|
||||
packet.hasReducedDebugInfo()
|
||||
//#if MC>=11500
|
||||
//$$ , packet.showsDeathScreen()
|
||||
, packet.showsDeathScreen()
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
@@ -637,7 +637,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|
||||
p = new PlayerRespawnS2CPacket(
|
||||
respawn.getDimension(),
|
||||
//#if MC>=11500
|
||||
//$$ respawn.getSha256Seed(),
|
||||
respawn.getSha256Seed(),
|
||||
//#endif
|
||||
respawn.getGeneratorType(),
|
||||
GameMode.SPECTATOR
|
||||
|
||||
@@ -13,7 +13,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import net.minecraft.client.util.ScreenshotUtils;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -64,10 +64,10 @@ public class NoGuiScreenshot {
|
||||
GlStateManager.enableTexture();
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime(), new MatrixStack());
|
||||
mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime(), new MatrixStack());
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime());
|
||||
//$$ mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime());
|
||||
//#else
|
||||
//#if MC>=10809
|
||||
//$$ mc.entityRenderer.updateCameraAndRender(MCVer.getRenderPartialTicks(), System.nanoTime());
|
||||
@@ -94,7 +94,7 @@ public class NoGuiScreenshot {
|
||||
// Read it, create the screenshot and finish the future
|
||||
try {
|
||||
//#if MC>=11400
|
||||
Image image = new Image(ScreenshotUtils.method_1663(frameWidth, frameHeight, mc.getFramebuffer()));
|
||||
Image image = new Image(ScreenshotUtils.takeScreenshot(frameWidth, frameHeight, mc.getFramebuffer()));
|
||||
//#else
|
||||
//$$ // We're using Minecraft's ScreenShotHelper even though it writes the screenshot to
|
||||
//$$ // disk for better maintainability
|
||||
|
||||
@@ -99,14 +99,14 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
|
||||
protected Packet<?> decode(com.github.steveice10.netty.buffer.ByteBuf byteBuf) throws IOException {
|
||||
int packetId = new ByteBufNetInput(byteBuf).readVarInt();
|
||||
//#if MC>=11500
|
||||
//$$ Packet<?> mcPacket = NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENTBOUND, packetId);
|
||||
Packet<?> mcPacket = NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENTBOUND, packetId);
|
||||
//#else
|
||||
Packet<?> mcPacket;
|
||||
try {
|
||||
mcPacket = NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENTBOUND, packetId);
|
||||
} catch (IllegalAccessException | InstantiationException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
//$$ Packet<?> mcPacket;
|
||||
//$$ try {
|
||||
//$$ mcPacket = NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENTBOUND, packetId);
|
||||
//$$ } catch (IllegalAccessException | InstantiationException e) {
|
||||
//$$ throw new IOException(e);
|
||||
//$$ }
|
||||
//#endif
|
||||
if (mcPacket != null) {
|
||||
int size = byteBuf.readableBytes();
|
||||
@@ -196,7 +196,7 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
|
||||
//$$ 0,
|
||||
//#endif
|
||||
//#if MC>=11500
|
||||
//$$ 0,
|
||||
0,
|
||||
//#endif
|
||||
//#if MC<11400
|
||||
//$$ EnumDifficulty.NORMAL,
|
||||
|
||||
@@ -37,8 +37,8 @@ import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
@@ -622,17 +622,17 @@ public class ReplayHandler {
|
||||
enableTexture();
|
||||
mc.getFramebuffer().beginWrite(true);
|
||||
//#if MC>=11500
|
||||
//$$ Window window = getWindow(mc);
|
||||
//$$ RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
//$$ RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
//$$ RenderSystem.loadIdentity();
|
||||
//$$ RenderSystem.translatef(0, 0, -2000);
|
||||
Window window = getWindow(mc);
|
||||
RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
|
||||
RenderSystem.matrixMode(GL11.GL_PROJECTION);
|
||||
RenderSystem.loadIdentity();
|
||||
RenderSystem.ortho(0, window.getFramebufferWidth() / window.getScaleFactor(), window.getFramebufferHeight() / window.getScaleFactor(), 0, 1000, 3000);
|
||||
RenderSystem.matrixMode(GL11.GL_MODELVIEW);
|
||||
RenderSystem.loadIdentity();
|
||||
RenderSystem.translatef(0, 0, -2000);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
getWindow(mc).method_4493(true);
|
||||
//$$ getWindow(mc).method_4493(true);
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ mc.mainWindow.setupOverlayRendering();
|
||||
@@ -666,10 +666,10 @@ public class ReplayHandler {
|
||||
popMatrix();
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ getWindow(mc).swapBuffers();
|
||||
getWindow(mc).swapBuffers();
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
getWindow(mc).setFullscreen(true);
|
||||
//$$ getWindow(mc).setFullscreen(true);
|
||||
//#else
|
||||
//$$ Display.update();
|
||||
//#endif
|
||||
|
||||
@@ -7,15 +7,15 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
@Mixin(LivingEntity.class)
|
||||
public interface EntityLivingBaseAccessor {
|
||||
//#if MC>=11400
|
||||
@Accessor("field_6224")
|
||||
@Accessor("serverX")
|
||||
double getInterpTargetX();
|
||||
@Accessor("field_6245")
|
||||
@Accessor("serverY")
|
||||
double getInterpTargetY();
|
||||
@Accessor("field_6263")
|
||||
@Accessor("serverZ")
|
||||
double getInterpTargetZ();
|
||||
@Accessor("field_6284")
|
||||
@Accessor("serverYaw")
|
||||
double getInterpTargetYaw();
|
||||
@Accessor("field_6221")
|
||||
@Accessor("serverPitch")
|
||||
double getInterpTargetPitch();
|
||||
//#endif
|
||||
|
||||
|
||||
@@ -9,51 +9,51 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.MinecraftClient;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
//$$ import net.minecraft.client.util.math.Vector3f;
|
||||
//$$ import org.spongepowered.asm.mixin.Final;
|
||||
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
//#else
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import net.minecraft.world.BlockView;
|
||||
//$$ import com.mojang.blaze3d.platform.GlStateManager;
|
||||
//$$ import net.minecraft.world.BlockView;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(net.minecraft.client.render.GameRenderer.class)
|
||||
@Mixin(net.minecraft.client.render.GameRenderer.class)
|
||||
//#else
|
||||
@Mixin(net.minecraft.client.render.Camera.class)
|
||||
//$$ @Mixin(net.minecraft.client.render.Camera.class)
|
||||
//#endif
|
||||
public class MixinCamera {
|
||||
//#if MC>=11500
|
||||
//$$ @Shadow @Final private MinecraftClient client;
|
||||
//$$ @Inject(
|
||||
//$$ method = "renderWorld",
|
||||
//$$ at = @At(
|
||||
//$$ value = "INVOKE",
|
||||
//$$ target = "Lnet/minecraft/client/render/Camera;getPitch()F"
|
||||
//$$ )
|
||||
//$$ )
|
||||
//$$ private void applyRoll(float float_1, long long_1, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
//$$ Entity entity = this.client.getCameraEntity() == null ? this.client.player : this.client.getCameraEntity();
|
||||
//$$ if (entity instanceof CameraEntity) {
|
||||
//$$ matrixStack.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(((CameraEntity) entity).roll));
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
@Shadow @Final private MinecraftClient client;
|
||||
@Inject(
|
||||
method = "update",
|
||||
method = "renderWorld",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lcom/mojang/blaze3d/platform/GlStateManager;rotatef(FFFF)V",
|
||||
ordinal = 0
|
||||
target = "Lnet/minecraft/client/render/Camera;getPitch()F"
|
||||
)
|
||||
)
|
||||
private void applyRoll(BlockView blockView, Entity view, boolean boolean_1, boolean boolean_2, float float_1, CallbackInfo ci) {
|
||||
if (view instanceof CameraEntity) {
|
||||
GlStateManager.rotatef(((CameraEntity) view).roll, 0.0F, 0.0F, 1.0F);
|
||||
private void applyRoll(float float_1, long long_1, MatrixStack matrixStack, CallbackInfo ci) {
|
||||
Entity entity = this.client.getCameraEntity() == null ? this.client.player : this.client.getCameraEntity();
|
||||
if (entity instanceof CameraEntity) {
|
||||
matrixStack.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(((CameraEntity) entity).roll));
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//$$ @Inject(
|
||||
//$$ method = "update",
|
||||
//$$ at = @At(
|
||||
//$$ value = "INVOKE",
|
||||
//$$ target = "Lcom/mojang/blaze3d/platform/GlStateManager;rotatef(FFFF)V",
|
||||
//$$ ordinal = 0
|
||||
//$$ )
|
||||
//$$ )
|
||||
//$$ private void applyRoll(BlockView blockView, Entity view, boolean boolean_1, boolean boolean_2, float float_1, CallbackInfo ci) {
|
||||
//$$ if (view instanceof CameraEntity) {
|
||||
//$$ GlStateManager.rotatef(((CameraEntity) view).roll, 0.0F, 0.0F, 1.0F);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -13,7 +13,7 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
@Mixin(SpectatorHud.class)
|
||||
public abstract class MixinGuiSpectator {
|
||||
//#if MC>=10904
|
||||
@Inject(method = "method_1976", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "cycleSlot", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
//$$ @Inject(method = "func_175260_a", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
|
||||
@@ -28,7 +28,7 @@ public abstract class MixinKeyboardListener {
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
//#if MC>=11400
|
||||
target = "Lnet/minecraft/client/util/ScreenshotUtils;method_1659(Ljava/io/File;IILnet/minecraft/client/gl/Framebuffer;Ljava/util/function/Consumer;)V"
|
||||
target = "Lnet/minecraft/client/util/ScreenshotUtils;saveScreenshot(Ljava/io/File;IILnet/minecraft/client/gl/Framebuffer;Ljava/util/function/Consumer;)V"
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
//$$ target = "Lnet/minecraft/util/ScreenShotHelper;saveScreenshot(Ljava/io/File;IILnet/minecraft/client/shader/Framebuffer;Ljava/util/function/Consumer;)V"
|
||||
|
||||
@@ -9,9 +9,9 @@ import net.minecraft.entity.Entity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.Frustum;
|
||||
import net.minecraft.client.render.Frustum;
|
||||
//#else
|
||||
import net.minecraft.client.render.VisibleRegion;
|
||||
//$$ import net.minecraft.client.render.VisibleRegion;
|
||||
//#endif
|
||||
|
||||
@Mixin(ArrowEntityRenderer.class)
|
||||
@@ -22,15 +22,15 @@ public abstract class MixinRenderArrow extends EntityRenderer {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean isVisible(Entity entity,
|
||||
public boolean shouldRender(Entity entity,
|
||||
//#if MC>=11500
|
||||
//$$ Frustum camera,
|
||||
Frustum camera,
|
||||
//#else
|
||||
VisibleRegion camera,
|
||||
//$$ VisibleRegion camera,
|
||||
//#endif
|
||||
double camX, double camY, double camZ) {
|
||||
// Force arrows to always render, otherwise they stop rendering when you get close to them
|
||||
return ReplayModReplay.instance.getReplayHandler() != null || super.isVisible(entity, camera, camX, camY, camZ);
|
||||
return ReplayModReplay.instance.getReplayHandler() != null || super.shouldRender(entity, camera, camX, camY, camZ);
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -13,17 +13,17 @@ import net.minecraft.util.Util;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(net.minecraft.client.render.RenderPhase.class)
|
||||
@Mixin(net.minecraft.client.render.RenderPhase.class)
|
||||
//#else
|
||||
@Mixin(net.minecraft.client.render.item.ItemRenderer.class)
|
||||
//$$ @Mixin(net.minecraft.client.render.item.ItemRenderer.class)
|
||||
//#endif
|
||||
public class MixinRenderItem {
|
||||
//#if MC>=11400
|
||||
//#if MC>=11500
|
||||
//$$ @Redirect(method = "setupGlintTexturing", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
@Redirect(method = "setupGlintTexturing", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "renderGlint", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
//$$ @Redirect(method = "renderGlint", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J"))
|
||||
//#endif
|
||||
|
||||
@@ -13,17 +13,17 @@ import net.minecraft.util.Util;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ @Mixin(net.minecraft.client.render.RenderPhase.PortalTexturing.class)
|
||||
@Mixin(net.minecraft.client.render.RenderPhase.PortalTexturing.class)
|
||||
//#else
|
||||
@Mixin(net.minecraft.client.render.block.entity.EndPortalBlockEntityRenderer.class)
|
||||
//$$ @Mixin(net.minecraft.client.render.block.entity.EndPortalBlockEntityRenderer.class)
|
||||
//#endif
|
||||
public class MixinTileEntityEndPortalRenderer {
|
||||
//#if MC>=11500
|
||||
//$$ @Redirect(method = "method_23557", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
//$$ static
|
||||
@Redirect(method = "method_23557", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
static
|
||||
//#else
|
||||
//#if MC>=11400
|
||||
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
//$$ @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;getMeasuringTimeMs()J"))
|
||||
//#else
|
||||
//#if MC>=11200
|
||||
//$$ @Redirect(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntityEndPortal;DDDFIF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J"))
|
||||
|
||||
@@ -8,9 +8,9 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
import net.minecraft.client.render.chunk.ChunkBuilder.BuiltChunk;
|
||||
//#else
|
||||
import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//$$ import net.minecraft.client.render.chunk.ChunkRenderer;
|
||||
//#endif
|
||||
|
||||
@Mixin(BuiltChunkStorage.class)
|
||||
@@ -21,9 +21,9 @@ public abstract class MixinViewFrustum {
|
||||
value = "INVOKE",
|
||||
//#if MC>=10904
|
||||
//#if MC>=11500
|
||||
//$$ target = "Lnet/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk;setOrigin(III)V"
|
||||
target = "Lnet/minecraft/client/render/chunk/ChunkBuilder$BuiltChunk;setOrigin(III)V"
|
||||
//#else
|
||||
target = "Lnet/minecraft/client/render/chunk/ChunkRenderer;setOrigin(III)V"
|
||||
//$$ target = "Lnet/minecraft/client/render/chunk/ChunkRenderer;setOrigin(III)V"
|
||||
//#endif
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/chunk/RenderChunk;setPosition(Lnet/minecraft/util/BlockPos;)V"
|
||||
@@ -32,9 +32,9 @@ public abstract class MixinViewFrustum {
|
||||
)
|
||||
private void replayModReplay_updatePositionAndMarkForUpdate(
|
||||
//#if MC>=11500
|
||||
//$$ BuiltChunk renderChunk,
|
||||
BuiltChunk renderChunk,
|
||||
//#else
|
||||
ChunkRenderer renderChunk,
|
||||
//$$ ChunkRenderer renderChunk,
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
int x, int y, int z
|
||||
|
||||
@@ -25,8 +25,8 @@ import org.apache.commons.lang3.tuple.Triple;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
//$$ import net.minecraft.client.util.math.MatrixStack;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
//#endif
|
||||
|
||||
//#if FABRIC>=1
|
||||
@@ -61,9 +61,9 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
//#if FABRIC>=1
|
||||
{ on(PostRenderWorldCallback.EVENT, this::renderCameraPath); }
|
||||
//#if MC>=11500
|
||||
//$$ private void renderCameraPath(MatrixStack matrixStack) {
|
||||
private void renderCameraPath(MatrixStack matrixStack) {
|
||||
//#else
|
||||
private void renderCameraPath() {
|
||||
//$$ private void renderCameraPath() {
|
||||
//#endif
|
||||
//#else
|
||||
//$$ @SubscribeEvent
|
||||
@@ -92,10 +92,10 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
Triple<Double, Double, Double> viewPos = Triple.of(
|
||||
Entity_getX(view),
|
||||
//#if MC>=10800 && MC<11500
|
||||
// Eye height is subtracted to make path appear higher (at eye height) than it actually is (at foot height)
|
||||
Entity_getY(view) - view.getStandingEyeHeight(),
|
||||
//$$ // Eye height is subtracted to make path appear higher (at eye height) than it actually is (at foot height)
|
||||
//$$ Entity_getY(view) - view.getStandingEyeHeight(),
|
||||
//#else
|
||||
//$$ Entity_getY(view),
|
||||
Entity_getY(view),
|
||||
//#endif
|
||||
Entity_getZ(view)
|
||||
);
|
||||
@@ -107,7 +107,7 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
|
||||
//#if MC>=11500
|
||||
//$$ RenderSystem.multMatrix(matrixStack.peek().getModel());
|
||||
RenderSystem.multMatrix(matrixStack.peek().getModel());
|
||||
//#endif
|
||||
|
||||
for (PathSegment segment : path.getSegments()) {
|
||||
@@ -291,11 +291,11 @@ public class PathPreviewRenderer extends EventRegistrations {
|
||||
);
|
||||
GL11.glNormal3f(0, 1, 0);
|
||||
//#if MC>=11500
|
||||
//$$ GL11.glRotatef(-getRenderManager().camera.getYaw(), 0, 1, 0);
|
||||
//$$ GL11.glRotatef(getRenderManager().camera.getPitch(), 1, 0, 0);
|
||||
GL11.glRotatef(-getRenderManager().camera.getYaw(), 0, 1, 0);
|
||||
GL11.glRotatef(getRenderManager().camera.getPitch(), 1, 0, 0);
|
||||
//#else
|
||||
GL11.glRotatef(-getRenderManager().cameraYaw, 0, 1, 0);
|
||||
GL11.glRotatef(getRenderManager().cameraPitch, 1, 0, 0);
|
||||
//$$ GL11.glRotatef(-getRenderManager().cameraYaw, 0, 1, 0);
|
||||
//$$ GL11.glRotatef(getRenderManager().cameraPitch, 1, 0, 0);
|
||||
//#endif
|
||||
|
||||
Tessellator_getInstance().draw();
|
||||
|
||||
Reference in New Issue
Block a user