Port to 1.17-pre1

This commit is contained in:
Jonas Herzig
2021-06-05 18:05:26 +02:00
parent 5f2dca08d1
commit 1802b1a7d0
35 changed files with 582 additions and 225 deletions

View File

@@ -366,6 +366,8 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
// Entity#addedToChunk is not set and it is therefore not updated every tick.
// To counteract this, we need to manually update it's position if it hasn't been added
// to any chunk yet.
// The `updateNeeded` flag appears to have been removed in 1.17, so this should no longer be an issue.
//#if MC<11700
if (mc.world != null) {
for (PlayerEntity playerEntity : mc.world.getPlayers()) {
if (!playerEntity.updateNeeded && playerEntity instanceof OtherClientPlayerEntity) {
@@ -373,6 +375,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
}
}
}
//#endif
}
}
@@ -413,7 +416,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
|| p instanceof ExperienceOrbSpawnS2CPacket
|| p instanceof EntitiesDestroyS2CPacket) {
ClientWorld world = mc.world;
//#if MC>=11400
//#if MC>=11700
//$$ // From the looks of it, this has now been resolved (thanks to EntityChangeListener)
//#elseif MC>=11400
// Note: Not sure if it's still required but there's this really handy method anyway
world.finishRemovingEntities();
//#else
@@ -478,12 +483,16 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
int i = pb.readVarInt();
NetworkState state = loginPhase ? NetworkState.LOGIN : NetworkState.PLAY;
//#if MC>=11700
//$$ Packet p = state.getPacketHandler(NetworkSide.CLIENTBOUND, i, pb);
//#else
//#if MC>=10800
Packet p = state.getPacketHandler(NetworkSide.CLIENTBOUND, i);
//#else
//$$ Packet p = Packet.generatePacket(state.func_150755_b(), i);
//#endif
p.read(pb);
//#endif
return p;
}
@@ -1154,6 +1163,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
// 1.14+: The update issue remains but only for non-players and the unloading list bug appears to have been
// fixed (chunk unloading no longer removes the entities).
// Get the chunk that will be unloaded
//#if MC>=11700
//$$ // From the looks of it, this may be fixed now (thanks to EntityChangeListener), guess we'll see
//#else
//#if MC>=11400
ClientWorld world = mc.world;
ChunkManager chunkProvider = world.getChunkManager();
@@ -1250,6 +1262,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend
//#endif
}
}
//#endif
}
return p; // During synchronous playback everything is sent normally
}

View File

@@ -8,6 +8,9 @@ import net.minecraft.client.MinecraftClient;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.util.ScreenshotUtils;
import static com.replaymod.core.versions.MCVer.popMatrix;
import static com.replaymod.core.versions.MCVer.pushMatrix;
//#if MC>=11500
import net.minecraft.client.util.math.MatrixStack;
//#endif
@@ -58,7 +61,7 @@ public class NoGuiScreenshot {
mc.options.hudHidden = true;
// Render frame without GUI
GlStateManager.pushMatrix();
pushMatrix();
GlStateManager.clear(
16640
//#if MC>=11400
@@ -84,10 +87,10 @@ public class NoGuiScreenshot {
//#endif
mc.getFramebuffer().endWrite();
GlStateManager.popMatrix();
GlStateManager.pushMatrix();
popMatrix();
pushMatrix();
mc.getFramebuffer().draw(frameWidth, frameHeight);
GlStateManager.popMatrix();
popMatrix();
} catch (Throwable t) {
future.setException(t);
return;

View File

@@ -99,6 +99,18 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
@Override
protected Packet<?> decode(com.github.steveice10.netty.buffer.ByteBuf byteBuf) throws IOException {
int packetId = new ByteBufNetInput(byteBuf).readVarInt();
int size = byteBuf.readableBytes();
if (buf.length < size) {
buf = new byte[size];
}
byteBuf.readBytes(buf, 0, size);
ByteBuf wrappedBuf = Unpooled.wrappedBuffer(buf);
wrappedBuf.writerIndex(size);
PacketByteBuf packetByteBuf = new PacketByteBuf(wrappedBuf);
//#if MC>=11700
//$$ return NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENTBOUND, packetId, packetByteBuf);
//#else
//#if MC>=11500
Packet<?> mcPacket = NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENTBOUND, packetId);
//#else
@@ -110,16 +122,10 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
//$$ }
//#endif
if (mcPacket != null) {
int size = byteBuf.readableBytes();
if (buf.length < size) {
buf = new byte[size];
}
byteBuf.readBytes(buf, 0, size);
ByteBuf wrappedBuf = Unpooled.wrappedBuffer(buf);
wrappedBuf.writerIndex(size);
mcPacket.read(new PacketByteBuf(wrappedBuf));
mcPacket.read(packetByteBuf);
}
return mcPacket;
//#endif
}
@Override
@@ -220,7 +226,12 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe
//$$ GameMode.SPECTATOR
//#endif
));
ctx.fireChannelRead(new PlayerPositionLookS2CPacket(0, 0, 0, 0, 0, Collections.emptySet(), 0));
ctx.fireChannelRead(new PlayerPositionLookS2CPacket(
0, 0, 0, 0, 0, Collections.emptySet(), 0
//#if MC>=11700
//$$ , true
//#endif
));
}
@Override

View File

@@ -4,6 +4,7 @@ import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.mojang.blaze3d.platform.GlStateManager;
import com.replaymod.core.ReplayMod;
import com.replaymod.core.mixin.MinecraftAccessor;
import com.replaymod.core.mixin.TimerAccessor;
@@ -40,6 +41,11 @@ import net.minecraft.network.ClientConnection;
import java.io.IOException;
import java.util.*;
//#if MC>=11700
//$$ import net.minecraft.client.render.DiffuseLighting;
//$$ import net.minecraft.util.math.Matrix4f;
//#endif
//#if MC>=11600
import net.minecraft.client.util.math.MatrixStack;
//#endif
@@ -97,7 +103,6 @@ import javax.annotation.Nullable;
import static com.replaymod.core.versions.MCVer.*;
import static com.replaymod.replay.ReplayModReplay.LOGGER;
import static com.mojang.blaze3d.platform.GlStateManager.*;
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
@@ -213,11 +218,13 @@ public class ReplayHandler {
channel.close().awaitUninterruptibly();
if (mc.player instanceof CameraEntity) {
//#if MC<11700
//#if MC>=11400
mc.player.remove();
//#else
//$$ mc.player.setDead();
//#endif
//#endif
}
if (mc.world != null) {
@@ -604,22 +611,38 @@ public class ReplayHandler {
// Perform the rendering using OpenGL
pushMatrix();
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
GlStateManager.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
//#if MC>=11400
, true
//#endif
);
enableTexture();
GlStateManager.enableTexture();
mc.getFramebuffer().beginWrite(true);
Window window = mc.getWindow();
//#if MC>=11500
RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
//#if MC>=11700
//$$ RenderSystem.setProjectionMatrix(Matrix4f.projectionMatrix(
//$$ 0,
//$$ (float) (window.getFramebufferWidth() / window.getScaleFactor()),
//$$ 0,
//$$ (float) (window.getFramebufferHeight() / window.getScaleFactor()),
//$$ 1000,
//$$ 3000
//$$ ));
//$$ MatrixStack matrixStack = RenderSystem.getModelViewStack();
//$$ matrixStack.loadIdentity();
//$$ matrixStack.translate(0, 0, -2000);
//$$ RenderSystem.applyModelViewMatrix();
//$$ DiffuseLighting.enableGuiDepthLighting();
//#else
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);
//#endif
//#else
//#if MC>=11400
//$$ window.method_4493(true);

View File

@@ -208,8 +208,10 @@ public class CameraEntity
* @param roll Roll in degrees
*/
public void setCameraRotation(float yaw, float pitch, float roll) {
this.prevYaw = this.yaw = yaw;
this.prevPitch = this.pitch = pitch;
this.prevYaw = yaw;
this.prevPitch = pitch;
this.yaw = yaw;
this.pitch = pitch;
this.roll = roll;
}
@@ -575,8 +577,13 @@ public class CameraEntity
//#endif
@Override
//#if MC>=11700
//$$ public void remove(RemovalReason reason) {
//$$ super.remove(reason);
//#else
public void remove() {
super.remove();
//#endif
if (eventHandler != null) {
eventHandler.unregister();
eventHandler = null;

View File

@@ -34,8 +34,8 @@ import net.minecraft.client.gui.widget.ButtonWidget;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Stream;
@@ -54,7 +54,7 @@ public class GuiHandler extends EventRegistrations {
}
{ on(InitScreenCallback.EVENT, this::injectIntoIngameMenu); }
private void injectIntoIngameMenu(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
private void injectIntoIngameMenu(Screen guiScreen, Collection<AbstractButtonWidget> buttonList) {
if (!(guiScreen instanceof GameMenuScreen)) {
return;
}
@@ -182,9 +182,9 @@ public class GuiHandler extends EventRegistrations {
*/
private void moveAllButtonsInRect(
//#if MC>=11400
List<AbstractButtonWidget> buttons,
Collection<AbstractButtonWidget> buttons,
//#else
//$$ List<GuiButton> buttons,
//$$ Collection<GuiButton> buttons,
//#endif
int xStart,
int xEnd,
@@ -198,8 +198,8 @@ public class GuiHandler extends EventRegistrations {
.forEach(button -> button.y += moveBy);
}
{ on(InitScreenCallback.EVENT, this::ensureReplayStopped); }
private void ensureReplayStopped(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
{ on(InitScreenCallback.EVENT, (screen, buttons) -> ensureReplayStopped(screen)); }
private void ensureReplayStopped(Screen guiScreen) {
if (!(guiScreen instanceof TitleScreen || guiScreen instanceof MultiplayerScreen)) {
return;
}
@@ -220,7 +220,7 @@ public class GuiHandler extends EventRegistrations {
}
{ on(InitScreenCallback.EVENT, this::injectIntoMainMenu); }
private void injectIntoMainMenu(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
private void injectIntoMainMenu(Screen guiScreen, Collection<AbstractButtonWidget> buttonList) {
if (!(guiScreen instanceof TitleScreen)) {
return;
}
@@ -291,7 +291,7 @@ public class GuiHandler extends EventRegistrations {
addButton(guiScreen, button);
}
private Point determineButtonPos(MainMenuButtonPosition buttonPosition, Screen guiScreen, List<AbstractButtonWidget> buttonList) {
private Point determineButtonPos(MainMenuButtonPosition buttonPosition, Screen guiScreen, Collection<AbstractButtonWidget> buttonList) {
Point topRight = new Point(guiScreen.width - 20 - 5, 5);
if (buttonPosition == MainMenuButtonPosition.TOP_LEFT) {

View File

@@ -4,10 +4,15 @@ package com.replaymod.replay.mixin;
import com.replaymod.replay.ReplayModReplay;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.ArrowEntityRenderer;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
//#if MC>=11700
//$$ import net.minecraft.client.render.entity.EntityRendererFactory.Context;
//#else
import net.minecraft.client.render.entity.EntityRenderDispatcher;
//#endif
//#if MC>=11500
import net.minecraft.client.render.Frustum;
//#else
@@ -16,9 +21,15 @@ import net.minecraft.client.render.Frustum;
@Mixin(ArrowEntityRenderer.class)
public abstract class MixinRenderArrow extends EntityRenderer {
//#if MC>=11700
//$$ protected MixinRenderArrow(Context context) {
//$$ super(context);
//$$ }
//#else
protected MixinRenderArrow(EntityRenderDispatcher renderManager) {
super(renderManager);
}
//#endif
@SuppressWarnings("unchecked")
@Override

View File

@@ -40,7 +40,7 @@ public class MixinTileEntityEndPortalRenderer {
//#endif
//#endif
//#endif
private long replayModReplay_getEnchantmentTime() {
private long replayModReplay_getPortalTime() {
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
if (replayHandler != null) {
return replayHandler.getReplaySender().currentTimeStamp();