eaglercraft-1_8/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.edit.java

637 lines
16 KiB
Java

# Eagler Context Redacted Diff
# Copyright (c) 2025 lax1dude. All rights reserved.
# Version: 1.0
# Author: lax1dude
> DELETE 2 @ 2 : 8
> CHANGE 4 : 32 @ 4 : 7
~
~ import net.lax1dude.eaglercraft.v1_8.ClientUUIDLoadingCache;
~ import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
~ import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID;
~
~ import com.carrotsearch.hppc.cursors.ObjectIntCursor;
~ import com.google.common.collect.Maps;
~
~ import net.lax1dude.eaglercraft.v1_8.netty.Unpooled;
~ import net.lax1dude.eaglercraft.v1_8.notifications.ServerNotificationManager;
~ import net.lax1dude.eaglercraft.v1_8.skin_cache.ServerTextureCache;
~ import net.lax1dude.eaglercraft.v1_8.socket.EaglercraftNetworkManager;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePluginMessageConstants;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.GamePluginMessageProtocol;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.client.ClientMessageHandler;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.handshake.StandardCaps;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.message.InjectedMessageController;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.message.LegacyMessageController;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.message.MessageController;
~ import net.lax1dude.eaglercraft.v1_8.socket.protocol.pkt.GameMessagePacket;
~ import net.lax1dude.eaglercraft.v1_8.sp.lan.LANClientNetworkManager;
~ import net.lax1dude.eaglercraft.v1_8.sp.socket.ClientIntegratedServerNetworkManager;
~ import net.lax1dude.eaglercraft.v1_8.voice.VoiceClientController;
~ import net.lax1dude.eaglercraft.v1_8.webview.WebViewOverlayController;
~ import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
~ import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
~ import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerFolderResourcePack;
~ import net.lax1dude.eaglercraft.v1_8.mojang.authlib.GameProfile;
> DELETE 14 @ 14 : 16
> DELETE 9 @ 9 : 10
> DELETE 5 @ 5 : 8
> DELETE 47 @ 47 : 48
> DELETE 2 @ 2 : 3
> INSERT 36 : 37 @ 36
+ import net.minecraft.network.play.server.S20PacketEntityProperties.Snapshot;
> INSERT 2 : 3 @ 2
+ import net.minecraft.network.play.server.S22PacketMultiBlockChange.BlockUpdateData;
> INSERT 22 : 23 @ 22
+ import net.minecraft.network.play.server.S38PacketPlayerListItem.AddPlayerData;
> DELETE 18 @ 18 : 19
> DELETE 32 @ 32 : 34
> CHANGE 3 : 4 @ 3 : 4
~ private final EaglercraftNetworkManager netManager;
> CHANGE 5 : 6 @ 5 : 6
~ private final Map<EaglercraftUUID, NetworkPlayerInfo> playerInfoMap = Maps.newHashMap();
> CHANGE 2 : 13 @ 2 : 3
~ private boolean isIntegratedServer = false;
~ private final EaglercraftRandom avRandomizer = new EaglercraftRandom();
~ private final ServerTextureCache textureCache;
~ private final ServerNotificationManager notifManager;
~ public boolean currentFNAWSkinAllowedState = true;
~ public boolean currentFNAWSkinForcedState = true;
~ private final MessageController eaglerMessageController;
~ public byte[] cachedServerInfoHash = null;
~ public byte[] cachedServerInfoData = null;
~ public boolean allowedDisplayWebview = false;
~ public boolean allowedDisplayWebviewYes = false;
> CHANGE 1 : 3 @ 1 : 3
~ public NetHandlerPlayClient(Minecraft mcIn, GuiScreen parGuiScreen, EaglercraftNetworkManager parNetworkManager,
~ GameProfile parGameProfile, GamePluginMessageProtocol eaglerProtocol) {
> INSERT 3 : 4 @ 3
+ this.netManager.setNetHandler(this);
> INSERT 1 : 15 @ 1
+ this.isIntegratedServer = (parNetworkManager instanceof ClientIntegratedServerNetworkManager)
+ || (parNetworkManager instanceof LANClientNetworkManager);
+ ClientMessageHandler handler = ClientMessageHandler.createClientHandler(eaglerProtocol.ver, this);
+ if (eaglerProtocol.ver >= 5) {
+ this.eaglerMessageController = new InjectedMessageController(eaglerProtocol, handler,
+ GamePluginMessageConstants.CLIENT_TO_SERVER, parNetworkManager::injectRawFrame);
+ parNetworkManager.setInjectedMessageController((InjectedMessageController) eaglerMessageController);
+ } else {
+ this.eaglerMessageController = new LegacyMessageController(eaglerProtocol, handler,
+ GamePluginMessageConstants.CLIENT_TO_SERVER,
+ (ch, msg) -> addToSendQueue(new C17PacketCustomPayload(ch, msg)));
+ }
+ this.textureCache = ServerTextureCache.create(this, mcIn.getTextureManager());
+ this.notifManager = new ServerNotificationManager(mcIn.getTextureManager());
> INSERT 4 : 6 @ 4
+ this.textureCache.destroy();
+ this.notifManager.destroy();
> INSERT 2 : 38 @ 2
+ public ServerTextureCache getTextureCache() {
+ return this.textureCache;
+ }
+
+ public ServerNotificationManager getNotifManager() {
+ return this.notifManager;
+ }
+
+ public MessageController getEaglerMessageController() {
+ return eaglerMessageController;
+ }
+
+ public GamePluginMessageProtocol getEaglerMessageProtocol() {
+ return eaglerMessageController != null ? eaglerMessageController.getProtocol() : null;
+ }
+
+ public void sendEaglerMessage(GameMessagePacket packet) {
+ eaglerMessageController.sendPacket(packet);
+ }
+
+ public boolean webViewSendHandler(GameMessagePacket pkt) {
+ if (eaglerMessageController == null) {
+ return false;
+ }
+ if (this.gameController.thePlayer == null || this.gameController.thePlayer.sendQueue != this) {
+ logger.error("WebView sent message on a dead handler!");
+ return false;
+ }
+ if (eaglerMessageController.getProtocol().ver >= 4) {
+ sendEaglerMessage(pkt);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
> DELETE 1 @ 1 : 2
> CHANGE 1 : 3 @ 1 : 5
~ this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.getGameType(), false,
~ packetIn.isHardcoreMode(), packetIn.getWorldType()), packetIn.getDimension(), packetIn.getDifficulty());
> INSERT 11 : 24 @ 11
+ if (VoiceClientController.isClientSupported()) {
+ if (netManager.getServerCapabilities().hasCapability(StandardCaps.VOICE, 0)) {
+ VoiceClientController.initializeVoiceClient(this::sendEaglerMessage,
+ eaglerMessageController.getProtocol().ver);
+ } else {
+ VoiceClientController.initializeVoiceClient(null, -1);
+ }
+ }
+ if (netManager.getServerCapabilities().hasCapability(StandardCaps.WEBVIEW, 0)) {
+ WebViewOverlayController.setPacketSendCallback(this::webViewSendHandler);
+ } else {
+ WebViewOverlayController.setPacketSendCallback(null);
+ }
> DELETE 3 @ 3 : 4
> CHANGE 3 : 7 @ 3 : 5
~ Entity object = null;
~ boolean b = false;
~ switch (packetIn.getType()) {
~ case 10:
> CHANGE 2 : 5 @ 2 : 3
~ break;
~ case 90:
~ b = true;
> CHANGE 4 : 6 @ 4 : 7
~ break;
~ case 60:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 61:
> CHANGE 1 : 4 @ 1 : 2
~ break;
~ case 71:
~ b = true;
> CHANGE 3 : 6 @ 3 : 5
~ break;
~ case 77:
~ b = true;
> CHANGE 2 : 4 @ 2 : 4
~ break;
~ case 65:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 72:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 76:
> CHANGE 1 : 4 @ 1 : 2
~ break;
~ case 63:
~ b = true;
> CHANGE 3 : 6 @ 3 : 5
~ break;
~ case 64:
~ b = true;
> CHANGE 3 : 6 @ 3 : 5
~ break;
~ case 66:
~ b = true;
> CHANGE 3 : 5 @ 3 : 5
~ break;
~ case 62:
> CHANGE 1 : 4 @ 1 : 2
~ break;
~ case 73:
~ b = true;
> CHANGE 1 : 4 @ 1 : 3
~ break;
~ case 75:
~ b = true;
> CHANGE 1 : 3 @ 1 : 3
~ break;
~ case 1:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 50:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 78:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 51:
> CHANGE 1 : 3 @ 1 : 2
~ break;
~ case 2:
> CHANGE 1 : 4 @ 1 : 2
~ break;
~ case 70:
~ b = true;
> INSERT 2 : 7 @ 2
+ break;
+ }
+
+ if (b) {
+ // fix for compiler bug
> CHANGE 4 : 10 @ 4 : 10
~ object.serverPosX = packetIn.getX();
~ object.serverPosY = packetIn.getY();
~ object.serverPosZ = packetIn.getZ();
~ object.rotationPitch = (float) (packetIn.getPitch() * 360) / 256.0F;
~ object.rotationYaw = (float) (packetIn.getYaw() * 360) / 256.0F;
~ Entity[] aentity = object.getParts();
> CHANGE 1 : 2 @ 1 : 2
~ int i = packetIn.getEntityID() - object.getEntityId();
> CHANGE 6 : 8 @ 6 : 8
~ object.setEntityId(packetIn.getEntityID());
~ this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), object);
> CHANGE 8 : 10 @ 8 : 10
~ object.setVelocity((double) packetIn.getSpeedX() / 8000.0D, (double) packetIn.getSpeedY() / 8000.0D,
~ (double) packetIn.getSpeedZ() / 8000.0D);
> DELETE 6 @ 6 : 7
> DELETE 12 @ 12 : 13
> DELETE 21 @ 21 : 22
> DELETE 6 @ 6 : 7
> DELETE 8 @ 8 : 9
> DELETE 8 @ 8 : 9
> DELETE 31 @ 31 : 32
> DELETE 22 @ 22 : 23
> DELETE 8 @ 8 : 9
> DELETE 17 @ 17 : 18
> DELETE 8 @ 8 : 10
> DELETE 7 @ 7 : 8
> CHANGE 47 : 50 @ 47 : 51
~ BlockUpdateData[] dat = packetIn.getChangedBlocks();
~ for (int i = 0; i < dat.length; ++i) {
~ BlockUpdateData s22packetmultiblockchange$blockupdatedata = dat[i];
> DELETE 7 @ 7 : 8
> DELETE 22 @ 22 : 23
> CHANGE 8 : 14 @ 8 : 9
~ VoiceClientController.handleServerDisconnect();
~ Minecraft.getMinecraft().getRenderManager()
~ .setEnableFNAWSkins(this.gameController.gameSettings.enableFNAWSkins);
~ if (this.gameController.theWorld != null) {
~ this.gameController.loadWorld((WorldClient) null);
~ }
> CHANGE 1 : 3 @ 1 : 9
~ this.gameController.shutdownIntegratedServer(
~ new GuiDisconnected(this.guiScreenServer, "disconnect.lost", ichatcomponent));
> CHANGE 1 : 2 @ 1 : 2
~ this.gameController.shutdownIntegratedServer(
> DELETE 2 @ 2 : 3
> DELETE 7 @ 7 : 8
> DELETE 23 @ 23 : 24
> DELETE 9 @ 9 : 10
> DELETE 20 @ 20 : 21
> DELETE 4 @ 4 : 5
> DELETE 35 @ 35 : 36
> DELETE 5 @ 5 : 6
> DELETE 5 @ 5 : 6
> DELETE 39 @ 39 : 40
> DELETE 12 @ 12 : 13
> DELETE 6 @ 6 : 7
> DELETE 5 @ 5 : 6
> CHANGE 5 : 6 @ 5 : 6
~ packetIn.getDimensionID(), packetIn.getDifficulty());
> DELETE 11 @ 11 : 12
> DELETE 9 @ 9 : 10
> DELETE 27 @ 27 : 28
> DELETE 27 @ 27 : 28
> DELETE 16 @ 16 : 17
> DELETE 10 @ 10 : 11
> DELETE 11 @ 11 : 12
> INSERT 8 : 9 @ 8
+ tileentitysign.clearProfanityFilterCache();
> DELETE 14 @ 14 : 15
> DELETE 16 @ 16 : 17
> DELETE 8 @ 8 : 9
> DELETE 8 @ 8 : 9
> DELETE 4 @ 4 : 5
> DELETE 5 @ 5 : 6
> DELETE 5 @ 5 : 7
> DELETE 18 @ 18 : 19
> CHANGE 21 : 24 @ 21 : 40
~
~ // minecraft demo screen
~
> DELETE 18 @ 18 : 19
> DELETE 6 @ 6 : 7
> DELETE 11 @ 11 : 12
> CHANGE 2 : 5 @ 2 : 5
~ for (ObjectIntCursor<StatBase> entry : packetIn.func_148974_c()) {
~ StatBase statbase = entry.key;
~ int i = entry.value;
> DELETE 4 @ 4 : 5
> DELETE 25 @ 25 : 26
> DELETE 10 @ 10 : 26
> INSERT 1 : 3 @ 1
+ // used by twitch stream
+
> DELETE 3 @ 3 : 4
> CHANGE 5 : 6 @ 5 : 6
~
> DELETE 8 @ 8 : 9
> DELETE 4 @ 4 : 5
> DELETE 36 @ 36 : 37
> CHANGE 8 : 11 @ 8 : 11
~ List<AddPlayerData> lst = packetIn.func_179767_a();
~ for (int i = 0, l = lst.size(); i < l; ++i) {
~ S38PacketPlayerListItem.AddPlayerData s38packetplayerlistitem$addplayerdata = lst.get(i);
> CHANGE 1 : 5 @ 1 : 2
~ EaglercraftUUID uuid = s38packetplayerlistitem$addplayerdata.getProfile().getId();
~ this.playerInfoMap.remove(uuid);
~ this.textureCache.evictPlayer(uuid);
~ ClientUUIDLoadingCache.evict(uuid);
> DELETE 34 @ 34 : 35
> DELETE 10 @ 10 : 11
> DELETE 9 @ 9 : 10
> CHANGE 7 : 30 @ 7 : 31
~ if (!EaglerFolderResourcePack.isSupported() || s.startsWith("level://")) {
~ this.netManager
~ .sendPacket(new C19PacketResourcePackStatus(s1, C19PacketResourcePackStatus.Action.DECLINED));
~ return;
~ }
~ if (this.gameController.getCurrentServerData() != null && this.gameController.getCurrentServerData()
~ .getResourceMode() == ServerData.ServerResourceMode.ENABLED) {
~ NetHandlerPlayClient.this.netManager
~ .sendPacket(new C19PacketResourcePackStatus(s1, C19PacketResourcePackStatus.Action.ACCEPTED));
~ NetHandlerPlayClient.this.gameController.getResourcePackRepository().downloadResourcePack(s, s1,
~ success -> {
~ if (success) {
~ NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(s1,
~ C19PacketResourcePackStatus.Action.SUCCESSFULLY_LOADED));
~ } else {
~ NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(s1,
~ C19PacketResourcePackStatus.Action.FAILED_DOWNLOAD));
~ }
~ });
~ } else if (this.gameController.getCurrentServerData() != null && this.gameController.getCurrentServerData()
~ .getResourceMode() != ServerData.ServerResourceMode.PROMPT) {
~ this.netManager
~ .sendPacket(new C19PacketResourcePackStatus(s1, C19PacketResourcePackStatus.Action.DECLINED));
> CHANGE 1 : 9 @ 1 : 11
~ NetHandlerPlayClient.this.gameController.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() {
~ public void confirmClicked(boolean flag, int var2) {
~ NetHandlerPlayClient.this.gameController = Minecraft.getMinecraft();
~ if (flag) {
~ if (NetHandlerPlayClient.this.gameController.getCurrentServerData() != null) {
~ NetHandlerPlayClient.this.gameController.getCurrentServerData()
~ .setResourceMode(ServerData.ServerResourceMode.ENABLED);
~ }
> CHANGE 1 : 11 @ 1 : 20
~ NetHandlerPlayClient.this.netManager.sendPacket(
~ new C19PacketResourcePackStatus(s1, C19PacketResourcePackStatus.Action.ACCEPTED));
~ NetHandlerPlayClient.this.gameController.getResourcePackRepository().downloadResourcePack(s, s1,
~ success -> {
~ if (success) {
~ NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(
~ s1, C19PacketResourcePackStatus.Action.SUCCESSFULLY_LOADED));
~ } else {
~ NetHandlerPlayClient.this.netManager.sendPacket(new C19PacketResourcePackStatus(
~ s1, C19PacketResourcePackStatus.Action.FAILED_DOWNLOAD));
> INSERT 1 : 7 @ 1
+ });
+ } else {
+ if (NetHandlerPlayClient.this.gameController.getCurrentServerData() != null) {
+ NetHandlerPlayClient.this.gameController.getCurrentServerData()
+ .setResourceMode(ServerData.ServerResourceMode.DISABLED);
+ }
> CHANGE 1 : 3 @ 1 : 34
~ NetHandlerPlayClient.this.netManager.sendPacket(
~ new C19PacketResourcePackStatus(s1, C19PacketResourcePackStatus.Action.DECLINED));
> DELETE 1 @ 1 : 3
> INSERT 1 : 6 @ 1
+ ServerList.func_147414_b(NetHandlerPlayClient.this.gameController.getCurrentServerData());
+ NetHandlerPlayClient.this.gameController.displayGuiScreen((GuiScreen) null);
+ }
+ }, I18n.format("multiplayer.texturePrompt.line1", new Object[0]),
+ I18n.format("multiplayer.texturePrompt.line2", new Object[0]), 0));
> DELETE 4 @ 4 : 5
> DELETE 8 @ 8 : 9
> DELETE 2 @ 2 : 3
> DELETE 11 @ 11 : 13
> INSERT 9 : 18 @ 9
+ } else if (eaglerMessageController instanceof LegacyMessageController) {
+ try {
+ ((LegacyMessageController) eaglerMessageController).handlePacket(packetIn.getChannelName(),
+ packetIn.getBufferData());
+ } catch (IOException e) {
+ logger.error("Couldn't read \"{}\" packet as an eaglercraft plugin message!",
+ packetIn.getChannelName());
+ logger.error(e);
+ }
> DELETE 1 @ 1 : 2
> DELETE 3 @ 3 : 4
> DELETE 19 @ 19 : 20
> DELETE 16 @ 16 : 17
> DELETE 11 @ 11 : 12
> DELETE 39 @ 39 : 40
> DELETE 35 @ 35 : 36
> CHANGE 8 : 11 @ 8 : 9
~ List<Snapshot> lst = packetIn.func_149441_d();
~ for (int i = 0, l = lst.size(); i < l; ++i) {
~ S20PacketEntityProperties.Snapshot s20packetentityproperties$snapshot = lst.get(i);
> CHANGE 20 : 21 @ 20 : 21
~ public EaglercraftNetworkManager getNetworkManager() {
> CHANGE 7 : 8 @ 7 : 8
~ public NetworkPlayerInfo getPlayerInfo(EaglercraftUUID parUUID) {
> INSERT 16 : 20 @ 16
+
+ public boolean isClientInEaglerSingleplayerOrLAN() {
+ return isIntegratedServer;
+ }
> EOF