Switch core to 1.14 (generated via ./gradlew :1.14:setCoreVersion)
This commit is contained in:
@@ -11,14 +11,14 @@ import com.replaymod.recording.mixin.NetworkManagerAccessor;
|
||||
import com.replaymod.recording.packet.PacketListener;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.util.AttributeKey;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
|
||||
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
|
||||
//#else
|
||||
import net.minecraftforge.fml.network.NetworkRegistry;
|
||||
//$$ import net.minecraftforge.fml.network.NetworkRegistry;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
@@ -68,10 +68,10 @@ public class ReplayModRecording implements Module {
|
||||
new GuiHandler(core).register();
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ ClientSidePacketRegistry.INSTANCE.register(Restrictions.PLUGIN_CHANNEL, (packetContext, packetByteBuf) -> {});
|
||||
ClientSidePacketRegistry.INSTANCE.register(Restrictions.PLUGIN_CHANNEL, (packetContext, packetByteBuf) -> {});
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
NetworkRegistry.newEventChannel(Restrictions.PLUGIN_CHANNEL, () -> "0", any -> true, any -> true);
|
||||
//$$ NetworkRegistry.newEventChannel(Restrictions.PLUGIN_CHANNEL, () -> "0", any -> true, any -> true);
|
||||
//#else
|
||||
//$$ NetworkRegistry.INSTANCE.newChannel(Restrictions.PLUGIN_CHANNEL, new RestrictionsChannelHandler());
|
||||
//#endif
|
||||
@@ -83,7 +83,7 @@ public class ReplayModRecording implements Module {
|
||||
//$$ private static class RestrictionsChannelHandler extends ChannelDuplexHandler {}
|
||||
//#endif
|
||||
|
||||
public void initiateRecording(NetworkManager networkManager) {
|
||||
public void initiateRecording(ClientConnection networkManager) {
|
||||
Channel channel = ((NetworkManagerAccessor) networkManager).getChannel();
|
||||
if (channel.pipeline().get("ReplayModReplay_replaySender") != null) return;
|
||||
//#if MC>=11300
|
||||
|
||||
@@ -11,16 +11,16 @@ import de.johni0702.minecraft.gui.element.GuiButton;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||
import net.minecraft.client.gui.GuiIngameMenu;
|
||||
import net.minecraft.client.gui.menu.PauseMenuScreen;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
|
||||
import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
|
||||
//#else
|
||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getGui;
|
||||
//$$ import net.minecraftforge.client.event.GuiScreenEvent;
|
||||
//$$ import net.minecraftforge.common.MinecraftForge;
|
||||
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
//$$
|
||||
//$$ import static com.replaymod.core.versions.MCVer.getGui;
|
||||
//#endif
|
||||
|
||||
public class GuiRecordingControls extends EventRegistrations {
|
||||
@@ -67,18 +67,18 @@ public class GuiRecordingControls extends EventRegistrations {
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> {
|
||||
//$$ if (screen instanceof PauseMenuScreen) {
|
||||
//$$ show((PauseMenuScreen) screen);
|
||||
//$$ }
|
||||
//$$ }); }
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
|
||||
if (getGui(event) instanceof GuiIngameMenu) {
|
||||
show((GuiIngameMenu) getGui(event));
|
||||
{ on(InitScreenCallback.EVENT, (screen, buttons) -> {
|
||||
if (screen instanceof PauseMenuScreen) {
|
||||
show((PauseMenuScreen) screen);
|
||||
}
|
||||
}
|
||||
}); }
|
||||
//#else
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
|
||||
//$$ if (getGui(event) instanceof GuiIngameMenu) {
|
||||
//$$ show((GuiIngameMenu) getGui(event));
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private void updateState() {
|
||||
@@ -88,7 +88,7 @@ public class GuiRecordingControls extends EventRegistrations {
|
||||
buttonPauseResume.setEnabled(!stopped);
|
||||
}
|
||||
|
||||
public void show(GuiIngameMenu gui) {
|
||||
public void show(PauseMenuScreen gui) {
|
||||
VanillaGuiScreen.setup(gui).setLayout(new CustomLayout<GuiScreen>() {
|
||||
@Override
|
||||
protected void layout(GuiScreen container, int width, int height) {
|
||||
|
||||
@@ -6,16 +6,16 @@ import com.replaymod.recording.Setting;
|
||||
import de.johni0702.minecraft.gui.GuiRenderer;
|
||||
import de.johni0702.minecraft.gui.MinecraftGuiRenderer;
|
||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.resource.language.I18n;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback;
|
||||
import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback;
|
||||
//#else
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
//$$ import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||
//$$ import net.minecraftforge.common.MinecraftForge;
|
||||
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.ReplayMod.TEXTURE;
|
||||
@@ -30,11 +30,11 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
* Renders overlay during recording.
|
||||
*/
|
||||
public class GuiRecordingOverlay extends EventRegistrations {
|
||||
private final Minecraft mc;
|
||||
private final MinecraftClient mc;
|
||||
private final SettingsRegistry settingsRegistry;
|
||||
private final GuiRecordingControls guiControls;
|
||||
|
||||
public GuiRecordingOverlay(Minecraft mc, SettingsRegistry settingsRegistry, GuiRecordingControls guiControls) {
|
||||
public GuiRecordingOverlay(MinecraftClient mc, SettingsRegistry settingsRegistry, GuiRecordingControls guiControls) {
|
||||
this.mc = mc;
|
||||
this.settingsRegistry = settingsRegistry;
|
||||
this.guiControls = guiControls;
|
||||
@@ -44,18 +44,18 @@ public class GuiRecordingOverlay extends EventRegistrations {
|
||||
* Render the recording icon and text in the top left corner of the screen.
|
||||
*/
|
||||
//#if MC>=11400
|
||||
//$$ { on(PostRenderHudCallback.EVENT, partialTicks -> renderRecordingIndicator()); }
|
||||
//$$ private void renderRecordingIndicator() {
|
||||
{ on(PostRenderHudCallback.EVENT, partialTicks -> renderRecordingIndicator()); }
|
||||
private void renderRecordingIndicator() {
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void renderRecordingIndicator(RenderGameOverlayEvent.Post event) {
|
||||
if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return;
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void renderRecordingIndicator(RenderGameOverlayEvent.Post event) {
|
||||
//$$ if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return;
|
||||
//#endif
|
||||
if (guiControls.isStopped()) return;
|
||||
if (settingsRegistry.get(Setting.INDICATOR)) {
|
||||
FontRenderer fontRenderer = mc.fontRenderer;
|
||||
String text = guiControls.isPaused() ? I18n.format("replaymod.gui.paused") : I18n.format("replaymod.gui.recording");
|
||||
fontRenderer.drawString(text.toUpperCase(), 30, 18 - (fontRenderer.FONT_HEIGHT / 2), 0xffffffff);
|
||||
TextRenderer fontRenderer = mc.textRenderer;
|
||||
String text = guiControls.isPaused() ? I18n.translate("replaymod.gui.paused") : I18n.translate("replaymod.gui.recording");
|
||||
fontRenderer.draw(text.toUpperCase(), 30, 18 - (fontRenderer.fontHeight / 2), 0xffffffff);
|
||||
bindTexture(TEXTURE);
|
||||
enableAlpha();
|
||||
GuiRenderer renderer = new MinecraftGuiRenderer(MCVer.newScaledResolution(mc));
|
||||
|
||||
@@ -14,8 +14,8 @@ import com.replaymod.replaystudio.replay.ReplayMetaData;
|
||||
import com.replaymod.replaystudio.replay.ZipReplayFile;
|
||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||
import io.netty.channel.Channel;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=10800
|
||||
@@ -40,7 +40,7 @@ public class ConnectionEventHandler {
|
||||
private static final String packetHandlerKey = "packet_handler";
|
||||
private static final String DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss";
|
||||
private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
|
||||
private static final Minecraft mc = getMinecraft();
|
||||
private static final MinecraftClient mc = getMinecraft();
|
||||
|
||||
private final Logger logger;
|
||||
private final ReplayMod core;
|
||||
@@ -55,13 +55,13 @@ public class ConnectionEventHandler {
|
||||
this.core = core;
|
||||
}
|
||||
|
||||
public void onConnectedToServerEvent(NetworkManager networkManager) {
|
||||
public void onConnectedToServerEvent(ClientConnection networkManager) {
|
||||
try {
|
||||
boolean local = networkManager.isLocalChannel();
|
||||
boolean local = networkManager.isLocal();
|
||||
if (local) {
|
||||
//#if MC>=10800
|
||||
//#if MC>=11300
|
||||
if (mc.getIntegratedServer().getWorld(DimensionType.OVERWORLD).getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
|
||||
if (mc.getServer().getWorld(DimensionType.OVERWORLD).getGeneratorType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
|
||||
//#else
|
||||
//$$ if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
|
||||
//#endif
|
||||
@@ -82,9 +82,9 @@ public class ConnectionEventHandler {
|
||||
|
||||
String worldName;
|
||||
if (local) {
|
||||
worldName = mc.getIntegratedServer().getWorldName();
|
||||
} else if (mc.getCurrentServerData() != null) {
|
||||
worldName = mc.getCurrentServerData().serverIP;
|
||||
worldName = mc.getServer().getLevelName();
|
||||
} else if (mc.getCurrentServerEntry() != null) {
|
||||
worldName = mc.getCurrentServerEntry().address;
|
||||
//#if MC>=11100
|
||||
} else if (mc.isConnectedToRealms()) {
|
||||
// we can't access the server name without tapping too deep in the Realms Library
|
||||
|
||||
@@ -8,18 +8,18 @@ import de.johni0702.minecraft.gui.container.VanillaGuiScreen;
|
||||
import de.johni0702.minecraft.gui.element.GuiCheckbox;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||
import net.minecraft.client.gui.GuiMultiplayer;
|
||||
import net.minecraft.client.gui.GuiWorldSelection;
|
||||
import net.minecraft.client.gui.menu.MultiplayerScreen;
|
||||
import net.minecraft.client.gui.menu.LevelSelectScreen;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
|
||||
//$$ import net.minecraft.client.gui.Screen;
|
||||
import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
|
||||
import net.minecraft.client.gui.Screen;
|
||||
//#else
|
||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.getGui;
|
||||
//$$ import net.minecraftforge.client.event.GuiScreenEvent;
|
||||
//$$ import net.minecraftforge.common.MinecraftForge;
|
||||
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
//$$
|
||||
//$$ import static com.replaymod.core.versions.MCVer.getGui;
|
||||
//#endif
|
||||
|
||||
public class GuiHandler extends EventRegistrations {
|
||||
@@ -31,15 +31,15 @@ public class GuiHandler extends EventRegistrations {
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); }
|
||||
//$$ private void onGuiInit(Screen gui) {
|
||||
{ on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); }
|
||||
private void onGuiInit(Screen gui) {
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
|
||||
net.minecraft.client.gui.GuiScreen gui = getGui(event);
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
|
||||
//$$ net.minecraft.client.gui.GuiScreen gui = getGui(event);
|
||||
//#endif
|
||||
if (gui instanceof GuiWorldSelection || gui instanceof GuiMultiplayer) {
|
||||
boolean sp = gui instanceof GuiWorldSelection;
|
||||
if (gui instanceof LevelSelectScreen || gui instanceof MultiplayerScreen) {
|
||||
boolean sp = gui instanceof LevelSelectScreen;
|
||||
SettingsRegistry settingsRegistry = mod.getSettingsRegistry();
|
||||
Setting<Boolean> setting = sp ? Setting.RECORD_SINGLEPLAYER : Setting.RECORD_SERVER;
|
||||
|
||||
|
||||
@@ -3,32 +3,32 @@ package com.replaymod.recording.handler;
|
||||
import com.replaymod.recording.mixin.IntegratedServerAccessor;
|
||||
import com.replaymod.recording.packet.PacketListener;
|
||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.*;
|
||||
import net.minecraft.client.network.packet.*;
|
||||
import net.minecraft.server.integrated.IntegratedServer;
|
||||
// FIXME not (yet?) 1.13 import net.minecraftforge.event.entity.minecart.MinecartInteractEvent;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import com.replaymod.core.events.PreRenderCallback;
|
||||
//$$ import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
|
||||
import com.replaymod.core.events.PreRenderCallback;
|
||||
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
|
||||
//#else
|
||||
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||
//$$ import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
|
||||
//$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
//$$ import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||
//$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import com.replaymod.recording.mixin.EntityLivingBaseAccessor;
|
||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.entity.EquipmentSlot;
|
||||
import net.minecraft.entity.data.DataTracker;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
@@ -43,7 +43,7 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
public class RecordingEventHandler extends EventRegistrations {
|
||||
|
||||
private final Minecraft mc = getMinecraft();
|
||||
private final MinecraftClient mc = getMinecraft();
|
||||
private final PacketListener packetListener;
|
||||
|
||||
private Double lastX, lastY, lastZ;
|
||||
@@ -54,7 +54,7 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
private Integer rotationYawHeadBefore;
|
||||
//#if MC>=10904
|
||||
private boolean wasHandActive;
|
||||
private EnumHand lastActiveHand;
|
||||
private Hand lastActiveHand;
|
||||
//#endif
|
||||
|
||||
public RecordingEventHandler(PacketListener packetListener) {
|
||||
@@ -64,13 +64,13 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
@Override
|
||||
public void register() {
|
||||
super.register();
|
||||
((RecordingEventSender) mc.renderGlobal).setRecordingEventHandler(this);
|
||||
((RecordingEventSender) mc.worldRenderer).setRecordingEventHandler(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregister() {
|
||||
super.unregister();
|
||||
RecordingEventSender recordingEventSender = ((RecordingEventSender) mc.renderGlobal);
|
||||
RecordingEventSender recordingEventSender = ((RecordingEventSender) mc.worldRenderer);
|
||||
if (recordingEventSender.getRecordingEventHandler() == this) {
|
||||
recordingEventSender.setRecordingEventHandler(null);
|
||||
}
|
||||
@@ -84,7 +84,7 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
|
||||
public void onPlayerJoin() {
|
||||
try {
|
||||
packetListener.save(new SPacketSpawnPlayer(mc.player));
|
||||
packetListener.save(new PlayerSpawnS2CPacket(mc.player));
|
||||
} catch(Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
@@ -92,7 +92,7 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
|
||||
public void onPlayerRespawn() {
|
||||
try {
|
||||
packetListener.save(new SPacketSpawnPlayer(mc.player));
|
||||
packetListener.save(new PlayerSpawnS2CPacket(mc.player));
|
||||
lastX = lastY = lastZ = null;
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -104,7 +104,7 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
double x, double y, double z, float volume, float pitch) {
|
||||
try {
|
||||
// Send to all other players in ServerWorldEventHandler#playSoundToAllNearExcept
|
||||
packetListener.save(new SPacketSoundEffect(sound, category, x, y, z, volume, pitch));
|
||||
packetListener.save(new PlaySoundS2CPacket(sound, category, x, y, z, volume, pitch));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -113,7 +113,7 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
public void onClientEffect(int type, BlockPos pos, int data) {
|
||||
try {
|
||||
// Send to all other players in ServerWorldEventHandler#playEvent
|
||||
packetListener.save(new SPacketEffect(type, pos, data, false));
|
||||
packetListener.save(new WorldEventS2CPacket(type, pos, data, false));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -121,23 +121,23 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ { on(PreTickCallback.EVENT, this::onPlayerTick); }
|
||||
//$$ private void onPlayerTick() {
|
||||
//$$ if (mc.player == null) return;
|
||||
{ on(PreTickCallback.EVENT, this::onPlayerTick); }
|
||||
private void onPlayerTick() {
|
||||
if (mc.player == null) return;
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void onPlayerTick(TickEvent.PlayerTickEvent e) {
|
||||
if(e.player != mc.player) return;
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void onPlayerTick(TickEvent.PlayerTickEvent e) {
|
||||
//$$ if(e.player != mc.player) return;
|
||||
//#endif
|
||||
EntityPlayerSP player = mc.player;
|
||||
ClientPlayerEntity player = mc.player;
|
||||
try {
|
||||
|
||||
boolean force = false;
|
||||
if(lastX == null || lastY == null || lastZ == null) {
|
||||
force = true;
|
||||
lastX = player.posX;
|
||||
lastY = player.posY;
|
||||
lastZ = player.posZ;
|
||||
lastX = player.x;
|
||||
lastY = player.y;
|
||||
lastZ = player.z;
|
||||
}
|
||||
|
||||
ticksSinceLastCorrection++;
|
||||
@@ -146,18 +146,18 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
force = true;
|
||||
}
|
||||
|
||||
double dx = player.posX - lastX;
|
||||
double dy = player.posY - lastY;
|
||||
double dz = player.posZ - lastZ;
|
||||
double dx = player.x - lastX;
|
||||
double dy = player.y - lastY;
|
||||
double dz = player.z - lastZ;
|
||||
|
||||
lastX = player.posX;
|
||||
lastY = player.posY;
|
||||
lastZ = player.posZ;
|
||||
lastX = player.x;
|
||||
lastY = player.y;
|
||||
lastZ = player.z;
|
||||
|
||||
Packet packet;
|
||||
if (force || Math.abs(dx) > 8.0 || Math.abs(dy) > 8.0 || Math.abs(dz) > 8.0) {
|
||||
//#if MC>=10800
|
||||
packet = new SPacketEntityTeleport(player);
|
||||
packet = new EntityPositionS2CPacket(player);
|
||||
//#else
|
||||
//$$ // In 1.7.10 the client player entity has its posY at eye height
|
||||
//$$ // but for all other entities it's at their feet (as it should be).
|
||||
@@ -175,11 +175,11 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
//$$ );
|
||||
//#endif
|
||||
} else {
|
||||
byte newYaw = (byte) ((int) (player.rotationYaw * 256.0F / 360.0F));
|
||||
byte newPitch = (byte) ((int) (player.rotationPitch * 256.0F / 360.0F));
|
||||
byte newYaw = (byte) ((int) (player.yaw * 256.0F / 360.0F));
|
||||
byte newPitch = (byte) ((int) (player.pitch * 256.0F / 360.0F));
|
||||
|
||||
//#if MC>=10904
|
||||
packet = new SPacketEntity.Move(
|
||||
packet = new EntityS2CPacket.RotateAndMoveRelative(
|
||||
player.getEntityId(),
|
||||
(short) Math.round(dx * 4096), (short) Math.round(dy * 4096), (short) Math.round(dz * 4096),
|
||||
newYaw, newPitch, player.onGround
|
||||
@@ -198,28 +198,28 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
packetListener.save(packet);
|
||||
|
||||
//HEAD POS
|
||||
int rotationYawHead = ((int)(player.rotationYawHead * 256.0F / 360.0F));
|
||||
int rotationYawHead = ((int)(player.headYaw * 256.0F / 360.0F));
|
||||
|
||||
if(!Objects.equals(rotationYawHead, rotationYawHeadBefore)) {
|
||||
packetListener.save(new SPacketEntityHeadLook(player, (byte) rotationYawHead));
|
||||
packetListener.save(new EntitySetHeadYawS2CPacket(player, (byte) rotationYawHead));
|
||||
rotationYawHeadBefore = rotationYawHead;
|
||||
}
|
||||
|
||||
packetListener.save(new SPacketEntityVelocity(player.getEntityId(),
|
||||
packetListener.save(new EntityVelocityUpdateS2CPacket(player.getEntityId(),
|
||||
//#if MC>=11400
|
||||
//$$ player.getVelocity()
|
||||
player.getVelocity()
|
||||
//#else
|
||||
player.motionX, player.motionY, player.motionZ
|
||||
//$$ player.motionX, player.motionY, player.motionZ
|
||||
//#endif
|
||||
));
|
||||
|
||||
//Animation Packets
|
||||
//Swing Animation
|
||||
if (player.isSwingInProgress && player.swingProgressInt == -1) {
|
||||
packetListener.save(new SPacketAnimation(
|
||||
if (player.isHandSwinging && player.handSwingTicks == -1) {
|
||||
packetListener.save(new EntityAnimationS2CPacket(
|
||||
player,
|
||||
//#if MC>=10904
|
||||
player.swingingHand == EnumHand.MAIN_HAND ? 0 : 3
|
||||
player.preferredHand == Hand.MAIN ? 0 : 3
|
||||
//#else
|
||||
//$$ 0
|
||||
//#endif
|
||||
@@ -248,34 +248,34 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
|
||||
//Inventory Handling
|
||||
//#if MC>=10904
|
||||
if (playerItems[0] != player.getHeldItem(EnumHand.MAIN_HAND)) {
|
||||
playerItems[0] = player.getHeldItem(EnumHand.MAIN_HAND);
|
||||
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.MAINHAND, playerItems[0]));
|
||||
if (playerItems[0] != player.getStackInHand(Hand.MAIN)) {
|
||||
playerItems[0] = player.getStackInHand(Hand.MAIN);
|
||||
packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HAND_MAIN, playerItems[0]));
|
||||
}
|
||||
|
||||
if (playerItems[1] != player.getHeldItem(EnumHand.OFF_HAND)) {
|
||||
playerItems[1] = player.getHeldItem(EnumHand.OFF_HAND);
|
||||
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.OFFHAND, playerItems[1]));
|
||||
if (playerItems[1] != player.getStackInHand(Hand.OFF)) {
|
||||
playerItems[1] = player.getStackInHand(Hand.OFF);
|
||||
packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HAND_OFF, playerItems[1]));
|
||||
}
|
||||
|
||||
if (playerItems[2] != player.getItemStackFromSlot(EntityEquipmentSlot.FEET)) {
|
||||
playerItems[2] = player.getItemStackFromSlot(EntityEquipmentSlot.FEET);
|
||||
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.FEET, playerItems[2]));
|
||||
if (playerItems[2] != player.getEquippedStack(EquipmentSlot.FEET)) {
|
||||
playerItems[2] = player.getEquippedStack(EquipmentSlot.FEET);
|
||||
packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.FEET, playerItems[2]));
|
||||
}
|
||||
|
||||
if (playerItems[3] != player.getItemStackFromSlot(EntityEquipmentSlot.LEGS)) {
|
||||
playerItems[3] = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
|
||||
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.LEGS, playerItems[3]));
|
||||
if (playerItems[3] != player.getEquippedStack(EquipmentSlot.LEGS)) {
|
||||
playerItems[3] = player.getEquippedStack(EquipmentSlot.LEGS);
|
||||
packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.LEGS, playerItems[3]));
|
||||
}
|
||||
|
||||
if (playerItems[4] != player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) {
|
||||
playerItems[4] = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
|
||||
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.CHEST, playerItems[4]));
|
||||
if (playerItems[4] != player.getEquippedStack(EquipmentSlot.CHEST)) {
|
||||
playerItems[4] = player.getEquippedStack(EquipmentSlot.CHEST);
|
||||
packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.CHEST, playerItems[4]));
|
||||
}
|
||||
|
||||
if (playerItems[5] != player.getItemStackFromSlot(EntityEquipmentSlot.HEAD)) {
|
||||
playerItems[5] = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
||||
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.HEAD, playerItems[5]));
|
||||
if (playerItems[5] != player.getEquippedStack(EquipmentSlot.HEAD)) {
|
||||
playerItems[5] = player.getEquippedStack(EquipmentSlot.HEAD);
|
||||
packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HEAD, playerItems[5]));
|
||||
}
|
||||
//#else
|
||||
//$$ if(playerItems[0] != mc.thePlayer.getHeldItem()) {
|
||||
@@ -311,14 +311,14 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
|
||||
//Leaving Ride
|
||||
|
||||
if((!player.isPassenger() && lastRiding != -1) ||
|
||||
(player.isPassenger() && lastRiding != getRiddenEntity(player).getEntityId())) {
|
||||
if(!player.isPassenger()) {
|
||||
if((!player.isRiding() && lastRiding != -1) ||
|
||||
(player.isRiding() && lastRiding != getRiddenEntity(player).getEntityId())) {
|
||||
if(!player.isRiding()) {
|
||||
lastRiding = -1;
|
||||
} else {
|
||||
lastRiding = getRiddenEntity(player).getEntityId();
|
||||
}
|
||||
packetListener.save(new SPacketEntityAttach(
|
||||
packetListener.save(new EntityAttachS2CPacket(
|
||||
//#if MC<10904
|
||||
//$$ 0,
|
||||
//#endif
|
||||
@@ -327,24 +327,24 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
}
|
||||
|
||||
//Sleeping
|
||||
if(!player.isPlayerSleeping() && wasSleeping) {
|
||||
packetListener.save(new SPacketAnimation(player, 2));
|
||||
if(!player.isSleeping() && wasSleeping) {
|
||||
packetListener.save(new EntityAnimationS2CPacket(player, 2));
|
||||
wasSleeping = false;
|
||||
}
|
||||
|
||||
//#if MC>=10904
|
||||
// Active hand (e.g. eating, drinking, blocking)
|
||||
if (player.isHandActive() ^ wasHandActive || player.getActiveHand() != lastActiveHand) {
|
||||
wasHandActive = player.isHandActive();
|
||||
if (player.isUsingItem() ^ wasHandActive || player.getActiveHand() != lastActiveHand) {
|
||||
wasHandActive = player.isUsingItem();
|
||||
lastActiveHand = player.getActiveHand();
|
||||
EntityDataManager dataManager = new EntityDataManager(null);
|
||||
int state = (wasHandActive ? 1 : 0) | (lastActiveHand == EnumHand.OFF_HAND ? 2 : 0);
|
||||
DataTracker dataManager = new DataTracker(null);
|
||||
int state = (wasHandActive ? 1 : 0) | (lastActiveHand == Hand.OFF ? 2 : 0);
|
||||
//#if MC>=11300
|
||||
dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state);
|
||||
dataManager.startTracking(EntityLivingBaseAccessor.getLivingFlags(), (byte) state);
|
||||
//#else
|
||||
//$$ dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state);
|
||||
//#endif
|
||||
packetListener.save(new SPacketEntityMetadata(player.getEntityId(), dataManager, true));
|
||||
packetListener.save(new EntityTrackerUpdateS2CPacket(player.getEntityId(), dataManager, true));
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -354,20 +354,20 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ // FIXME fabric
|
||||
// FIXME fabric
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void onPickupItem(ItemPickupEvent event) {
|
||||
try {
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void onPickupItem(ItemPickupEvent event) {
|
||||
//$$ try {
|
||||
//#if MC>=11100
|
||||
//#if MC>=11200
|
||||
//#if MC>=11300
|
||||
ItemStack stack = event.getStack();
|
||||
packetListener.save(new SPacketCollectItem(
|
||||
event.getOriginalEntity().getEntityId(),
|
||||
event.getPlayer().getEntityId(),
|
||||
event.getStack().getCount()
|
||||
));
|
||||
//$$ ItemStack stack = event.getStack();
|
||||
//$$ packetListener.save(new SPacketCollectItem(
|
||||
//$$ event.getOriginalEntity().getEntityId(),
|
||||
//$$ event.getPlayer().getEntityId(),
|
||||
//$$ event.getStack().getCount()
|
||||
//$$ ));
|
||||
//#else
|
||||
//$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId(),
|
||||
//$$ event.pickedUp.getItem().getMaxStackSize()));
|
||||
@@ -379,24 +379,24 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
//#else
|
||||
//$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId()));
|
||||
//#endif
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
//$$ } catch(Exception e) {
|
||||
//$$ e.printStackTrace();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ // FIXME fabric
|
||||
// FIXME fabric
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void onSleep(PlayerSleepInBedEvent event) {
|
||||
try {
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void onSleep(PlayerSleepInBedEvent event) {
|
||||
//$$ try {
|
||||
//#if MC>=10904
|
||||
if (event.getEntityPlayer() != mc.player) {
|
||||
return;
|
||||
}
|
||||
|
||||
packetListener.save(new SPacketUseBed(event.getEntityPlayer(), event.getPos()));
|
||||
//$$ if (event.getEntityPlayer() != mc.player) {
|
||||
//$$ return;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ packetListener.save(new SPacketUseBed(event.getEntityPlayer(), event.getPos()));
|
||||
//#else
|
||||
//$$ if (event.entityPlayer != mc.thePlayer) {
|
||||
//$$ return;
|
||||
@@ -410,13 +410,13 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
//#endif
|
||||
//$$ ));
|
||||
//#endif
|
||||
|
||||
wasSleeping = true;
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
//$$
|
||||
//$$ wasSleeping = true;
|
||||
//$$
|
||||
//$$ } catch(Exception e) {
|
||||
//$$ e.printStackTrace();
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
/* FIXME event not (yet?) on 1.13
|
||||
@@ -451,9 +451,9 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
//#else
|
||||
//$$ public void onBlockBreakAnim(int breakerId, int x, int y, int z, int progress) {
|
||||
//#endif
|
||||
EntityPlayer thePlayer = mc.player;
|
||||
PlayerEntity thePlayer = mc.player;
|
||||
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
||||
packetListener.save(new SPacketBlockBreakAnim(breakerId,
|
||||
packetListener.save(new BlockBreakingProgressS2CPacket(breakerId,
|
||||
//#if MC>=10800
|
||||
pos,
|
||||
//#else
|
||||
@@ -464,15 +464,15 @@ public class RecordingEventHandler extends EventRegistrations {
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ { on(PreRenderCallback.EVENT, this::checkForGamePaused); }
|
||||
//$$ private void checkForGamePaused() {
|
||||
{ on(PreRenderCallback.EVENT, this::checkForGamePaused); }
|
||||
private void checkForGamePaused() {
|
||||
//#else
|
||||
@SubscribeEvent
|
||||
public void checkForGamePaused(TickEvent.RenderTickEvent event) {
|
||||
if (event.phase != TickEvent.Phase.START) return;
|
||||
//$$ @SubscribeEvent
|
||||
//$$ public void checkForGamePaused(TickEvent.RenderTickEvent event) {
|
||||
//$$ if (event.phase != TickEvent.Phase.START) return;
|
||||
//#endif
|
||||
if (mc.isIntegratedServerRunning()) {
|
||||
IntegratedServer server = mc.getIntegratedServer();
|
||||
IntegratedServer server = mc.getServer();
|
||||
if (server != null && ((IntegratedServerAccessor) server).isGamePaused()) {
|
||||
packetListener.setServerWasPaused();
|
||||
}
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
package com.replaymod.recording.mixin;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.network.datasync.DataParameter;
|
||||
import net.minecraft.entity.data.TrackedData;
|
||||
//#endif
|
||||
|
||||
@Mixin(EntityLivingBase.class)
|
||||
@Mixin(LivingEntity.class)
|
||||
public interface EntityLivingBaseAccessor {
|
||||
//#if MC>=10904
|
||||
@Accessor("LIVING_FLAGS")
|
||||
@Nonnull
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
static DataParameter<Byte> getLivingFlags() { return null; }
|
||||
static TrackedData<Byte> getLivingFlags() { return null; }
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -6,6 +6,6 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(IntegratedServer.class)
|
||||
public interface IntegratedServerAccessor {
|
||||
@Accessor("isGamePaused")
|
||||
@Accessor("field_5524")
|
||||
boolean isGamePaused();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.replaymod.recording.mixin;
|
||||
|
||||
import com.replaymod.recording.packet.ResourcePackRecorder;
|
||||
import de.johni0702.minecraft.gui.utils.Consumer;
|
||||
import net.minecraft.client.resources.DownloadingPackFinder;
|
||||
import net.minecraft.client.resource.ClientResourcePackCreator;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
@@ -19,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//$$ import java.util.Map;
|
||||
//#endif
|
||||
|
||||
@Mixin(DownloadingPackFinder.class)
|
||||
@Mixin(ClientResourcePackCreator.class)
|
||||
public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder.IDownloadingPackFinder {
|
||||
private Consumer<File> requestCallback;
|
||||
|
||||
@@ -29,7 +29,7 @@ public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Inject(method = "func_195741_a", at = @At("HEAD"))
|
||||
@Inject(method = "loadServerPack", at = @At("HEAD"))
|
||||
private void recordDownloadedPack(File file, CallbackInfoReturnable ci) {
|
||||
if (requestCallback != null) {
|
||||
requestCallback.consume(file);
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.replaymod.recording.mixin;
|
||||
|
||||
import com.replaymod.replay.InputReplayTimer;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import net.minecraft.client.MouseHelper;
|
||||
import net.minecraft.client.Mouse;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -11,22 +11,22 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||
|
||||
@Mixin(MouseHelper.class)
|
||||
@Mixin(Mouse.class)
|
||||
public abstract class MixinMouseHelper {
|
||||
@Shadow
|
||||
private boolean mouseGrabbed;
|
||||
private boolean isCursorLocked;
|
||||
|
||||
@Inject(method = "grabMouse", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "lockCursor", at = @At("HEAD"), cancellable = true)
|
||||
private void noGrab(CallbackInfo ci) {
|
||||
// Used to be provided by Forge for 1.12.2 and below
|
||||
if (Boolean.valueOf(System.getProperty("fml.noGrab", "false"))) {
|
||||
this.mouseGrabbed = true;
|
||||
this.isCursorLocked = true;
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "scrollCallback",
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/EntityPlayerSP;isSpectator()Z"),
|
||||
@Inject(method = "onMouseScroll",
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSpectator()Z"),
|
||||
locals = LocalCapture.CAPTURE_FAILHARD,
|
||||
cancellable = true)
|
||||
private void handleReplayModScroll(
|
||||
@@ -34,9 +34,9 @@ public abstract class MixinMouseHelper {
|
||||
CallbackInfo ci,
|
||||
double _l1,
|
||||
//#if MC>=11400
|
||||
//$$ float yOffsetAccumulated
|
||||
float yOffsetAccumulated
|
||||
//#else
|
||||
double yOffsetAccumulated
|
||||
//$$ double yOffsetAccumulated
|
||||
//#endif
|
||||
) {
|
||||
if (ReplayModReplay.instance.getReplayHandler() != null) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.replaymod.recording.mixin;
|
||||
|
||||
import com.replaymod.recording.ReplayModRecording;
|
||||
import net.minecraft.client.network.NetHandlerLoginClient;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.client.network.ClientLoginNetworkHandler;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -13,39 +13,39 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.login.server.SPacketCustomPayloadLogin;
|
||||
import net.minecraft.network.login.server.SPacketLoginSuccess;
|
||||
import net.minecraft.client.network.packet.LoginQueryRequestS2CPacket;
|
||||
import net.minecraft.client.network.packet.LoginSuccessS2CPacket;
|
||||
//#else
|
||||
//$$ import net.minecraftforge.fml.common.network.FMLNetworkEvent;
|
||||
//#endif
|
||||
|
||||
@Mixin(NetHandlerLoginClient.class)
|
||||
@Mixin(ClientLoginNetworkHandler.class)
|
||||
public abstract class MixinNetHandlerLoginClient {
|
||||
|
||||
@Shadow
|
||||
//#if MC>=10800
|
||||
private NetworkManager networkManager;
|
||||
private ClientConnection connection;
|
||||
//#else
|
||||
//$$ private NetworkManager field_147393_d;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
@Inject(method = "func_209521_a", at=@At("HEAD"))
|
||||
private void earlyInitiateRecording(SPacketCustomPayloadLogin packet, CallbackInfo ci) {
|
||||
@Inject(method = "onQueryRequest", at=@At("HEAD"))
|
||||
private void earlyInitiateRecording(LoginQueryRequestS2CPacket packet, CallbackInfo ci) {
|
||||
initiateRecording(packet);
|
||||
}
|
||||
|
||||
@Inject(method = "handleLoginSuccess", at=@At("HEAD"))
|
||||
private void lateInitiateRecording(SPacketLoginSuccess packet, CallbackInfo ci) {
|
||||
@Inject(method = "onLoginSuccess", at=@At("HEAD"))
|
||||
private void lateInitiateRecording(LoginSuccessS2CPacket packet, CallbackInfo ci) {
|
||||
initiateRecording(packet);
|
||||
}
|
||||
|
||||
private void initiateRecording(Packet<?> packet) {
|
||||
RecordingEventSender eventSender = (RecordingEventSender) MCVer.getMinecraft().renderGlobal;
|
||||
RecordingEventSender eventSender = (RecordingEventSender) MCVer.getMinecraft().worldRenderer;
|
||||
if (eventSender.getRecordingEventHandler() != null) {
|
||||
return; // already recording
|
||||
}
|
||||
ReplayModRecording.instance.initiateRecording(this.networkManager);
|
||||
ReplayModRecording.instance.initiateRecording(this.connection);
|
||||
if (eventSender.getRecordingEventHandler() != null) {
|
||||
eventSender.getRecordingEventHandler().onPacket(packet);
|
||||
}
|
||||
@@ -68,9 +68,9 @@ public abstract class MixinNetHandlerLoginClient {
|
||||
|
||||
// Race condition in Forge's networking (not sure if still present in 1.13)
|
||||
//#if MC>=11200 && MC<11400
|
||||
@Inject(method = "handleLoginSuccess", at=@At("RETURN"))
|
||||
public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) {
|
||||
((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true);
|
||||
}
|
||||
//$$ @Inject(method = "handleLoginSuccess", at=@At("RETURN"))
|
||||
//$$ public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) {
|
||||
//$$ ((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true);
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ package com.replaymod.recording.mixin;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.recording.handler.RecordingEventHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.network.play.server.*;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.client.network.packet.*;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -16,9 +16,9 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPlayerListEn
|
||||
import com.github.steveice10.packetlib.io.buffer.ByteBufferNetInput;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.network.play.server.SPacketPlayerListItem;
|
||||
import net.minecraft.client.network.NetworkPlayerInfo;
|
||||
import net.minecraft.util.PacketByteBuf;
|
||||
import net.minecraft.client.network.packet.PlayerListS2CPacket;
|
||||
import net.minecraft.client.network.PlayerListEntry;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
@@ -26,18 +26,18 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
//#endif
|
||||
|
||||
@Mixin(NetHandlerPlayClient.class)
|
||||
@Mixin(ClientPlayNetworkHandler.class)
|
||||
public abstract class MixinNetHandlerPlayClient {
|
||||
|
||||
private static Minecraft gameController = MCVer.getMinecraft();
|
||||
private static MinecraftClient gameController = MCVer.getMinecraft();
|
||||
|
||||
//#if MC>=10800
|
||||
@Shadow
|
||||
private Map<UUID, NetworkPlayerInfo> playerInfoMap;
|
||||
private Map<UUID, PlayerListEntry> playerListEntries;
|
||||
//#endif
|
||||
|
||||
public RecordingEventHandler getRecordingEventHandler() {
|
||||
return ((RecordingEventHandler.RecordingEventSender) gameController.renderGlobal).getRecordingEventHandler();
|
||||
return ((RecordingEventHandler.RecordingEventSender) gameController.worldRenderer).getRecordingEventHandler();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,19 +48,19 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
* @param ci Callback info
|
||||
*/
|
||||
//#if MC>=10800
|
||||
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
||||
public void recordOwnJoin(SPacketPlayerListItem packet, CallbackInfo ci) {
|
||||
@Inject(method = "onPlayerList", at=@At("HEAD"))
|
||||
public void recordOwnJoin(PlayerListS2CPacket packet, CallbackInfo ci) {
|
||||
if (gameController.player == null) return;
|
||||
|
||||
RecordingEventHandler handler = getRecordingEventHandler();
|
||||
if (handler != null && packet.getAction() == SPacketPlayerListItem.Action.ADD_PLAYER) {
|
||||
if (handler != null && packet.getAction() == PlayerListS2CPacket.Action.ADD) {
|
||||
// We cannot reference SPacketPlayerListItem.AddPlayerData directly for complicated (and yet to be
|
||||
// resolved) reasons (see https://github.com/MinecraftForge/ForgeGradle/issues/472), so we "simply" convert
|
||||
// the back to the MCProtocolLib equivalent and deal with that one.
|
||||
ByteBuf byteBuf = Unpooled.buffer();
|
||||
ServerPlayerListEntryPacket mcpl = new ServerPlayerListEntryPacket(null, null);
|
||||
try {
|
||||
packet.writePacketData(new PacketBuffer(byteBuf));
|
||||
packet.write(new PacketByteBuf(byteBuf));
|
||||
|
||||
byteBuf.readerIndex(0);
|
||||
byte[] array = new byte[byteBuf.readableBytes()];
|
||||
@@ -77,7 +77,7 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
if (data.getProfile() == null || data.getProfile().getId() == null) continue;
|
||||
// Only add spawn packet for our own player and only if he isn't known yet
|
||||
if (data.getProfile().getId().equals(gameController.player.getGameProfile().getId())
|
||||
&& !this.playerInfoMap.containsKey(data.getProfile().getId())) {
|
||||
&& !this.playerListEntries.containsKey(data.getProfile().getId())) {
|
||||
handler.onPlayerJoin();
|
||||
}
|
||||
}
|
||||
@@ -100,8 +100,8 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
* @param packet The packet
|
||||
* @param ci Callback info
|
||||
*/
|
||||
@Inject(method = "handleRespawn", at=@At("RETURN"))
|
||||
public void recordOwnRespawn(SPacketRespawn packet, CallbackInfo ci) {
|
||||
@Inject(method = "onPlayerRespawn", at=@At("RETURN"))
|
||||
public void recordOwnRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) {
|
||||
RecordingEventHandler handler = getRecordingEventHandler();
|
||||
if (handler != null) {
|
||||
handler.onPlayerRespawn();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.replaymod.recording.mixin;
|
||||
|
||||
import com.replaymod.recording.handler.RecordingEventHandler;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -27,7 +27,7 @@ public abstract class MixinRenderGlobal implements RecordingEventHandler.Recordi
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Inject(method = "sendBlockBreakProgress", at = @At("HEAD"))
|
||||
@Inject(method = "setBlockBreakingProgress", at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "destroyBlockPartially", at = @At("HEAD"))
|
||||
//#endif
|
||||
|
||||
@@ -2,15 +2,15 @@ package com.replaymod.recording.mixin;
|
||||
|
||||
//#if MC>=10904
|
||||
import com.replaymod.recording.handler.RecordingEventHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.WorldClient;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.profiler.Profiler;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.profiler.Profiler;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.storage.WorldInfo;
|
||||
import net.minecraft.world.level.LevelProperties;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -18,52 +18,52 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.world.chunk.ChunkManager;
|
||||
//$$ import net.minecraft.world.dimension.Dimension;
|
||||
//$$ import net.minecraft.world.dimension.DimensionType;
|
||||
//$$ import java.util.function.BiFunction;
|
||||
//#else
|
||||
import net.minecraft.world.storage.ISaveHandler;
|
||||
//#if MC>=11300
|
||||
import net.minecraft.world.chunk.ChunkManager;
|
||||
import net.minecraft.world.dimension.Dimension;
|
||||
import net.minecraft.world.storage.WorldSavedDataStorage;
|
||||
import net.minecraft.world.dimension.DimensionType;
|
||||
import java.util.function.BiFunction;
|
||||
//#else
|
||||
//$$ import net.minecraft.world.storage.ISaveHandler;
|
||||
//#if MC>=11300
|
||||
//$$ import net.minecraft.world.dimension.Dimension;
|
||||
//$$ import net.minecraft.world.storage.WorldSavedDataStorage;
|
||||
//#else
|
||||
//$$ import net.minecraft.world.WorldProvider;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
|
||||
@Mixin(WorldClient.class)
|
||||
@Mixin(ClientWorld.class)
|
||||
public abstract class MixinWorldClient extends World implements RecordingEventHandler.RecordingEventSender {
|
||||
@Shadow
|
||||
private Minecraft mc;
|
||||
private MinecraftClient client;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ protected MixinWorldClient(LevelProperties levelProperties_1, DimensionType dimensionType_1, BiFunction<World, Dimension, ChunkManager> biFunction_1, Profiler profiler_1, boolean boolean_1) {
|
||||
//$$ super(levelProperties_1, dimensionType_1, biFunction_1, profiler_1, boolean_1);
|
||||
//$$ }
|
||||
protected MixinWorldClient(LevelProperties levelProperties_1, DimensionType dimensionType_1, BiFunction<World, Dimension, ChunkManager> biFunction_1, Profiler profiler_1, boolean boolean_1) {
|
||||
super(levelProperties_1, dimensionType_1, biFunction_1, profiler_1, boolean_1);
|
||||
}
|
||||
//#else
|
||||
protected MixinWorldClient(ISaveHandler saveHandlerIn,
|
||||
//$$ protected MixinWorldClient(ISaveHandler saveHandlerIn,
|
||||
//#if MC>=11300
|
||||
WorldSavedDataStorage mapStorage,
|
||||
//$$ WorldSavedDataStorage mapStorage,
|
||||
//#endif
|
||||
WorldInfo info,
|
||||
//$$ WorldInfo info,
|
||||
//#if MC>=11300
|
||||
Dimension providerIn,
|
||||
//$$ Dimension providerIn,
|
||||
//#else
|
||||
//$$ WorldProvider providerIn,
|
||||
//#endif
|
||||
Profiler profilerIn, boolean client) {
|
||||
super(saveHandlerIn,
|
||||
//$$ Profiler profilerIn, boolean client) {
|
||||
//$$ super(saveHandlerIn,
|
||||
//#if MC>=11300
|
||||
mapStorage,
|
||||
//$$ mapStorage,
|
||||
//#endif
|
||||
info, providerIn, profilerIn, client);
|
||||
}
|
||||
//$$ info, providerIn, profilerIn, client);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
private RecordingEventHandler replayModRecording_getRecordingEventHandler() {
|
||||
return ((RecordingEventHandler.RecordingEventSender) mc.renderGlobal).getRecordingEventHandler();
|
||||
return ((RecordingEventHandler.RecordingEventSender) client.worldRenderer).getRecordingEventHandler();
|
||||
}
|
||||
|
||||
// Sounds that are emitted by thePlayer no longer take the long way over the server
|
||||
@@ -71,15 +71,15 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
|
||||
// other clients so we have to record them manually.
|
||||
// E.g. Block place sounds
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FF)V",
|
||||
//$$ at = @At("HEAD"))
|
||||
//#else
|
||||
@Inject(method = "playSound(Lnet/minecraft/entity/player/EntityPlayer;DDDLnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V",
|
||||
@Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FF)V",
|
||||
at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/EntityPlayer;DDDLnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V",
|
||||
//$$ at = @At("HEAD"))
|
||||
//#endif
|
||||
public void replayModRecording_recordClientSound(EntityPlayer player, double x, double y, double z, SoundEvent sound, SoundCategory category,
|
||||
public void replayModRecording_recordClientSound(PlayerEntity player, double x, double y, double z, SoundEvent sound, SoundCategory category,
|
||||
float volume, float pitch, CallbackInfo ci) {
|
||||
if (player == mc.player) {
|
||||
if (player == client.player) {
|
||||
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
||||
if (handler != null) {
|
||||
handler.onClientSound(sound, category, x, y, z, volume, pitch);
|
||||
@@ -89,14 +89,14 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
|
||||
|
||||
// Same goes for level events (also called effects). E.g. door open, block break, etc.
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "playLevelEvent", at = @At("HEAD"))
|
||||
//$$ private void playLevelEvent (PlayerEntity player, int type, BlockPos pos, int data, CallbackInfo ci) {
|
||||
@Inject(method = "playLevelEvent", at = @At("HEAD"))
|
||||
private void playLevelEvent (PlayerEntity player, int type, BlockPos pos, int data, CallbackInfo ci) {
|
||||
//#else
|
||||
// These are handled in the World class, so we override the method in WorldClient and add our special handling.
|
||||
@Override
|
||||
public void playEvent (EntityPlayer player, int type, BlockPos pos, int data) {
|
||||
//$$ // These are handled in the World class, so we override the method in WorldClient and add our special handling.
|
||||
//$$ @Override
|
||||
//$$ public void playEvent (EntityPlayer player, int type, BlockPos pos, int data) {
|
||||
//#endif
|
||||
if (player == mc.player) {
|
||||
if (player == client.player) {
|
||||
// We caused this event, the server won't send it to us
|
||||
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
||||
if (handler != null) {
|
||||
@@ -104,7 +104,7 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
|
||||
}
|
||||
}
|
||||
//#if MC<11400
|
||||
super.playEvent(player, type, pos, data);
|
||||
//$$ super.playEvent(player, type, pos, data);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.replaymod.recording.mixin;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(NetworkManager.class)
|
||||
@Mixin(ClientConnection.class)
|
||||
public interface NetworkManagerAccessor {
|
||||
@Accessor
|
||||
Channel getChannel();
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.replaymod.recording.mixin;
|
||||
|
||||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.network.play.server.SPacketSpawnMob;
|
||||
import net.minecraft.entity.data.DataTracker;
|
||||
import net.minecraft.client.network.packet.MobSpawnS2CPacket;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(SPacketSpawnMob.class)
|
||||
@Mixin(MobSpawnS2CPacket.class)
|
||||
public interface SPacketSpawnMobAccessor {
|
||||
@Accessor
|
||||
EntityDataManager getDataManager();
|
||||
@Accessor
|
||||
void setDataManager(EntityDataManager value);
|
||||
@Accessor("dataTracker")
|
||||
DataTracker getDataManager();
|
||||
@Accessor("dataTracker")
|
||||
void setDataManager(DataTracker value);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.replaymod.recording.mixin;
|
||||
|
||||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.network.play.server.SPacketSpawnPlayer;
|
||||
import net.minecraft.entity.data.DataTracker;
|
||||
import net.minecraft.client.network.packet.PlayerSpawnS2CPacket;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(SPacketSpawnPlayer.class)
|
||||
@Mixin(PlayerSpawnS2CPacket.class)
|
||||
public interface SPacketSpawnPlayerAccessor {
|
||||
@Accessor("watcher")
|
||||
EntityDataManager getDataManager();
|
||||
@Accessor("watcher")
|
||||
void setDataManager(EntityDataManager value);
|
||||
@Accessor("dataTracker")
|
||||
DataTracker getDataManager();
|
||||
@Accessor("dataTracker")
|
||||
void setDataManager(DataTracker value);
|
||||
}
|
||||
|
||||
@@ -17,22 +17,22 @@ import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.network.EnumConnectionState;
|
||||
import net.minecraft.network.NetworkState;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.network.play.server.*;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.PacketByteBuf;
|
||||
import net.minecraft.client.network.packet.*;
|
||||
import net.minecraft.text.StringTextComponent;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.network.login.server.SPacketLoginSuccess;
|
||||
import net.minecraft.client.network.packet.LoginSuccessS2CPacket;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.entity.data.DataTracker;
|
||||
//#else
|
||||
//$$ import net.minecraft.entity.DataWatcher;
|
||||
//$$
|
||||
@@ -40,7 +40,7 @@ import net.minecraft.network.datasync.EntityDataManager;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.network.EnumPacketDirection;
|
||||
import net.minecraft.network.NetworkSide;
|
||||
//#if MC<11300
|
||||
//$$ import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
|
||||
//#endif
|
||||
@@ -64,7 +64,7 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
|
||||
private static final Minecraft mc = getMinecraft();
|
||||
private static final MinecraftClient mc = getMinecraft();
|
||||
private static final Logger logger = LogManager.getLogger();
|
||||
|
||||
private final ReplayMod core;
|
||||
@@ -85,7 +85,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
private long timePassedWhilePaused;
|
||||
private volatile boolean serverWasPaused;
|
||||
//#if MC>=11300
|
||||
private EnumConnectionState connectionState = EnumConnectionState.LOGIN;
|
||||
private NetworkState connectionState = NetworkState.LOGIN;
|
||||
//#else
|
||||
//$$ private EnumConnectionState connectionState = EnumConnectionState.PLAY;
|
||||
//#endif
|
||||
@@ -126,9 +126,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
|
||||
public void save(Packet packet) {
|
||||
try {
|
||||
if(packet instanceof SPacketSpawnPlayer) {
|
||||
if(packet instanceof PlayerSpawnS2CPacket) {
|
||||
//#if MC>=10800
|
||||
UUID uuid = ((SPacketSpawnPlayer) packet).getUniqueId();
|
||||
UUID uuid = ((PlayerSpawnS2CPacket) packet).getPlayerUuid();
|
||||
//#else
|
||||
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_148948_e().getId();
|
||||
//#endif
|
||||
@@ -164,8 +164,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
});
|
||||
|
||||
//#if MC>=11300
|
||||
if (packet instanceof SPacketLoginSuccess) {
|
||||
connectionState = EnumConnectionState.PLAY;
|
||||
if (packet instanceof LoginSuccessS2CPacket) {
|
||||
connectionState = NetworkState.PLAY;
|
||||
}
|
||||
//#endif
|
||||
} catch(Exception e) {
|
||||
@@ -229,9 +229,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
Packet packet = (Packet) msg;
|
||||
|
||||
//#if MC>=10904
|
||||
if(packet instanceof SPacketCollectItem) {
|
||||
if(packet instanceof ItemPickupAnimationS2CPacket) {
|
||||
if(mc.player != null ||
|
||||
((SPacketCollectItem) packet).getEntityID() == mc.player.getEntityId()) {
|
||||
((ItemPickupAnimationS2CPacket) packet).getEntityId() == mc.player.getEntityId()) {
|
||||
//#else
|
||||
//$$ if(packet instanceof S0DPacketCollectItem) {
|
||||
//$$ if(mc.thePlayer != null ||
|
||||
@@ -247,8 +247,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
if (packet instanceof SPacketResourcePackSend) {
|
||||
save(resourcePackRecorder.handleResourcePack((SPacketResourcePackSend) packet));
|
||||
if (packet instanceof ResourcePackSendS2CPacket) {
|
||||
save(resourcePackRecorder.handleResourcePack((ResourcePackSendS2CPacket) packet));
|
||||
return;
|
||||
}
|
||||
//#else
|
||||
@@ -276,10 +276,10 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
|
||||
save(packet);
|
||||
|
||||
if (packet instanceof SPacketCustomPayload) {
|
||||
SPacketCustomPayload p = (SPacketCustomPayload) packet;
|
||||
if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannelName())) {
|
||||
packet = new SPacketDisconnect(new TextComponentString("Please update to view this replay."));
|
||||
if (packet instanceof CustomPayloadS2CPacket) {
|
||||
CustomPayloadS2CPacket p = (CustomPayloadS2CPacket) packet;
|
||||
if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannel())) {
|
||||
packet = new DisconnectS2CPacket(new StringTextComponent("Please update to view this replay."));
|
||||
save(packet);
|
||||
}
|
||||
}
|
||||
@@ -293,21 +293,21 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
|
||||
//#if MC>=10904
|
||||
private <T> void DataManager_set(EntityDataManager dataManager, EntityDataManager.DataEntry<T> entry) {
|
||||
dataManager.register(entry.getKey(), entry.getValue());
|
||||
private <T> void DataManager_set(DataTracker dataManager, DataTracker.Entry<T> entry) {
|
||||
dataManager.startTracking(entry.getData(), entry.get());
|
||||
}
|
||||
//#endif
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private byte[] getPacketData(Packet packet) throws Exception {
|
||||
if (packet instanceof SPacketSpawnMob) {
|
||||
SPacketSpawnMob p = (SPacketSpawnMob) packet;
|
||||
if (packet instanceof MobSpawnS2CPacket) {
|
||||
MobSpawnS2CPacket p = (MobSpawnS2CPacket) packet;
|
||||
SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p;
|
||||
if (pa.getDataManager() == null) {
|
||||
pa.setDataManager(new EntityDataManager(null));
|
||||
if (p.getDataManagerEntries() != null) {
|
||||
pa.setDataManager(new DataTracker(null));
|
||||
if (p.getTrackedValues() != null) {
|
||||
//#if MC>=10904
|
||||
for (EntityDataManager.DataEntry<?> entry : p.getDataManagerEntries()) {
|
||||
for (DataTracker.Entry<?> entry : p.getTrackedValues()) {
|
||||
DataManager_set(pa.getDataManager(), entry);
|
||||
}
|
||||
//#else
|
||||
@@ -319,14 +319,14 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
if (packet instanceof SPacketSpawnPlayer) {
|
||||
SPacketSpawnPlayer p = (SPacketSpawnPlayer) packet;
|
||||
if (packet instanceof PlayerSpawnS2CPacket) {
|
||||
PlayerSpawnS2CPacket p = (PlayerSpawnS2CPacket) packet;
|
||||
SPacketSpawnPlayerAccessor pa = (SPacketSpawnPlayerAccessor) p;
|
||||
if (pa.getDataManager() == null) {
|
||||
pa.setDataManager(new EntityDataManager(null));
|
||||
if (p.getDataManagerEntries() != null) {
|
||||
pa.setDataManager(new DataTracker(null));
|
||||
if (p.getTrackedValues() != null) {
|
||||
//#if MC>=10904
|
||||
for (EntityDataManager.DataEntry<?> entry : p.getDataManagerEntries()) {
|
||||
for (DataTracker.Entry<?> entry : p.getTrackedValues()) {
|
||||
DataManager_set(pa.getDataManager(), entry);
|
||||
}
|
||||
//#else
|
||||
@@ -339,7 +339,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
Integer packetId = connectionState.getPacketId(EnumPacketDirection.CLIENTBOUND, packet);
|
||||
Integer packetId = connectionState.getPacketId(NetworkSide.CLIENT, packet);
|
||||
//#else
|
||||
//$$ Integer packetId = (Integer) connectionState.func_150755_b().inverse().get(packet.getClass());
|
||||
//#endif
|
||||
@@ -347,9 +347,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
throw new IOException("Unknown packet type:" + packet.getClass());
|
||||
}
|
||||
ByteBuf byteBuf = Unpooled.buffer();
|
||||
PacketBuffer packetBuffer = new PacketBuffer(byteBuf);
|
||||
PacketByteBuf packetBuffer = new PacketByteBuf(byteBuf);
|
||||
packetBuffer.writeVarInt(packetId);
|
||||
packet.writePacketData(packetBuffer);
|
||||
packet.write(packetBuffer);
|
||||
|
||||
byteBuf.readerIndex(0);
|
||||
byte[] array = new byte[byteBuf.readableBytes()];
|
||||
@@ -369,11 +369,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
Marker marker = new Marker();
|
||||
marker.setName(name);
|
||||
marker.setTime(timestamp);
|
||||
marker.setX(view.posX);
|
||||
marker.setY(view.posY);
|
||||
marker.setZ(view.posZ);
|
||||
marker.setYaw(view.rotationYaw);
|
||||
marker.setPitch(view.rotationPitch);
|
||||
marker.setX(view.x);
|
||||
marker.setY(view.y);
|
||||
marker.setZ(view.z);
|
||||
marker.setYaw(view.yaw);
|
||||
marker.setPitch(view.pitch);
|
||||
// Roll is always 0
|
||||
saveService.submit(() -> {
|
||||
synchronized (replayFile) {
|
||||
|
||||
@@ -3,19 +3,19 @@ package com.replaymod.recording.packet;
|
||||
import com.google.common.hash.Hashing;
|
||||
import com.google.common.io.Files;
|
||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiYesNo;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.client.multiplayer.ServerList;
|
||||
import net.minecraft.client.resources.DownloadingPackFinder;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.menu.YesNoScreen;
|
||||
import net.minecraft.client.options.ServerEntry;
|
||||
import net.minecraft.client.options.ServerList;
|
||||
import net.minecraft.client.resource.ClientResourcePackCreator;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.text.TranslatableTextComponent;
|
||||
import net.minecraft.text.TranslatableTextComponent;
|
||||
//#else
|
||||
import net.minecraft.client.gui.GuiYesNoCallback;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
//$$ import net.minecraft.client.gui.GuiYesNoCallback;
|
||||
//$$ import net.minecraft.client.resources.I18n;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
@@ -26,19 +26,19 @@ import de.johni0702.minecraft.gui.utils.Consumer;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.network.play.client.CPacketResourcePackStatus;
|
||||
import net.minecraft.network.play.client.CPacketResourcePackStatus.Action;
|
||||
import net.minecraft.network.play.server.SPacketResourcePackSend;
|
||||
import net.minecraft.server.network.packet.ResourcePackStatusC2SPacket;
|
||||
import net.minecraft.server.network.packet.ResourcePackStatusC2SPacket.Status;
|
||||
import net.minecraft.client.network.packet.ResourcePackSendS2CPacket;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=11400
|
||||
//$$ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
//#else
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
//$$ import com.google.common.util.concurrent.ListenableFuture;
|
||||
//#endif
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
//#else
|
||||
//$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor;
|
||||
//$$ import net.minecraft.client.multiplayer.ServerData.ServerResourceMode;
|
||||
@@ -61,7 +61,7 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
*/
|
||||
public class ResourcePackRecorder {
|
||||
private static final Logger logger = LogManager.getLogger();
|
||||
private static final Minecraft mc = getMinecraft();
|
||||
private static final MinecraftClient mc = getMinecraft();
|
||||
|
||||
private final ReplayFile replayFile;
|
||||
|
||||
@@ -102,99 +102,99 @@ public class ResourcePackRecorder {
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) {
|
||||
public ResourcePackStatusC2SPacket makeStatusPacket(String hash, Status action) {
|
||||
//#if MC>=11002
|
||||
return new CPacketResourcePackStatus(action);
|
||||
return new ResourcePackStatusC2SPacket(action);
|
||||
//#else
|
||||
//$$ return new CPacketResourcePackStatus(hash, action);
|
||||
//#endif
|
||||
}
|
||||
|
||||
|
||||
public synchronized SPacketResourcePackSend handleResourcePack(SPacketResourcePackSend packet) {
|
||||
public synchronized ResourcePackSendS2CPacket handleResourcePack(ResourcePackSendS2CPacket packet) {
|
||||
final int requestId = nextRequestId++;
|
||||
final NetHandlerPlayClient netHandler = mc.getConnection();
|
||||
final NetworkManager netManager = netHandler.getNetworkManager();
|
||||
final ClientPlayNetworkHandler netHandler = mc.getNetworkHandler();
|
||||
final ClientConnection netManager = netHandler.getClientConnection();
|
||||
final String url = packet.getURL();
|
||||
final String hash = packet.getHash();
|
||||
final String hash = packet.getSHA1();
|
||||
|
||||
if (url.startsWith("level://")) {
|
||||
String levelName = url.substring("level://".length());
|
||||
File savesDir = new File(mc.gameDir, "saves");
|
||||
File savesDir = new File(mc.runDirectory, "saves");
|
||||
final File levelDir = new File(savesDir, levelName);
|
||||
|
||||
if (levelDir.isFile()) {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED));
|
||||
netManager.send(makeStatusPacket(hash, Status.ACCEPTED));
|
||||
addCallback(setServerResourcePack(levelDir), result -> {
|
||||
recordResourcePack(levelDir, requestId);
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.SUCCESSFULLY_LOADED));
|
||||
netManager.send(makeStatusPacket(hash, Status.SUCCESSFULLY_LOADED));
|
||||
}, throwable -> {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD));
|
||||
netManager.send(makeStatusPacket(hash, Status.FAILED_DOWNLOAD));
|
||||
});
|
||||
} else {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD));
|
||||
netManager.send(makeStatusPacket(hash, Status.FAILED_DOWNLOAD));
|
||||
}
|
||||
} else {
|
||||
final ServerData serverData = mc.getCurrentServerData();
|
||||
if (serverData != null && serverData.getResourceMode() == ServerData.ServerResourceMode.ENABLED) {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED));
|
||||
final ServerEntry serverData = mc.getCurrentServerEntry();
|
||||
if (serverData != null && serverData.getResourcePack() == ServerEntry.ResourcePackState.ENABLED) {
|
||||
netManager.send(makeStatusPacket(hash, Status.ACCEPTED));
|
||||
downloadResourcePackFuture(requestId, url, hash);
|
||||
} else if (serverData != null && serverData.getResourceMode() != ServerData.ServerResourceMode.PROMPT) {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.DECLINED));
|
||||
} else if (serverData != null && serverData.getResourcePack() != ServerEntry.ResourcePackState.PROMPT) {
|
||||
netManager.send(makeStatusPacket(hash, Status.DECLINED));
|
||||
} else {
|
||||
// Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError)
|
||||
//#if MC>=11400
|
||||
//$$ mc.execute(() -> mc.openScreen(new YesNoScreen(result -> {
|
||||
mc.execute(() -> mc.openScreen(new YesNoScreen(result -> {
|
||||
//#else
|
||||
//noinspection Convert2Lambda
|
||||
mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() {
|
||||
@Override
|
||||
//$$ //noinspection Convert2Lambda
|
||||
//$$ mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() {
|
||||
//$$ @Override
|
||||
//#if MC>=11300
|
||||
public void confirmResult(boolean result, int id) {
|
||||
//$$ public void confirmResult(boolean result, int id) {
|
||||
//#else
|
||||
//$$ public void confirmClicked(boolean result, int id) {
|
||||
//#endif
|
||||
//#endif
|
||||
if (serverData != null) {
|
||||
serverData.setResourceMode(result ? ServerData.ServerResourceMode.ENABLED : ServerData.ServerResourceMode.DISABLED);
|
||||
serverData.setResourcePackState(result ? ServerEntry.ResourcePackState.ENABLED : ServerEntry.ResourcePackState.DISABLED);
|
||||
}
|
||||
if (result) {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED));
|
||||
netManager.send(makeStatusPacket(hash, Status.ACCEPTED));
|
||||
downloadResourcePackFuture(requestId, url, hash);
|
||||
} else {
|
||||
netManager.sendPacket(makeStatusPacket(hash, Action.DECLINED));
|
||||
netManager.send(makeStatusPacket(hash, Status.DECLINED));
|
||||
}
|
||||
|
||||
ServerList.saveSingleServer(serverData);
|
||||
mc.displayGuiScreen(null);
|
||||
ServerList.updateServerListEntry(serverData);
|
||||
mc.openScreen(null);
|
||||
}
|
||||
//#if MC>=11400
|
||||
//$$ , new TranslatableTextComponent("multiplayer.texturePrompt.line1"), new TranslatableTextComponent("multiplayer.texturePrompt.line2"))));
|
||||
, new TranslatableTextComponent("multiplayer.texturePrompt.line1"), new TranslatableTextComponent("multiplayer.texturePrompt.line2"))));
|
||||
//#else
|
||||
}, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0)));
|
||||
//$$ }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0)));
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
return new SPacketResourcePackSend("replay://" + requestId, "");
|
||||
return new ResourcePackSendS2CPacket("replay://" + requestId, "");
|
||||
}
|
||||
|
||||
private void downloadResourcePackFuture(int requestId, String url, final String hash) {
|
||||
addCallback(downloadResourcePack(requestId, url, hash),
|
||||
result -> mc.getConnection().sendPacket(makeStatusPacket(hash, Action.SUCCESSFULLY_LOADED)),
|
||||
throwable -> mc.getConnection().sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD)));
|
||||
result -> mc.getNetworkHandler().sendPacket(makeStatusPacket(hash, Status.SUCCESSFULLY_LOADED)),
|
||||
throwable -> mc.getNetworkHandler().sendPacket(makeStatusPacket(hash, Status.FAILED_DOWNLOAD)));
|
||||
}
|
||||
|
||||
private
|
||||
//#if MC>=11400
|
||||
//$$ CompletableFuture<?>
|
||||
CompletableFuture<?>
|
||||
//#else
|
||||
ListenableFuture<?>
|
||||
//$$ ListenableFuture<?>
|
||||
//#endif
|
||||
downloadResourcePack(final int requestId, String url, String hash) {
|
||||
DownloadingPackFinder packFinder = mc.getPackFinder();
|
||||
ClientResourcePackCreator packFinder = mc.getResourcePackDownloader();
|
||||
((IDownloadingPackFinder) packFinder).setRequestCallback(file -> recordResourcePack(file, requestId));
|
||||
return packFinder.downloadResourcePack(url, hash);
|
||||
return packFinder.download(url, hash);
|
||||
}
|
||||
|
||||
public interface IDownloadingPackFinder {
|
||||
|
||||
Reference in New Issue
Block a user