Skip to content

Commit

Permalink
added ServerHandshakePacketListenerImpl
Browse files Browse the repository at this point in the history
  • Loading branch information
caunt committed Apr 17, 2023
1 parent 8c4cb22 commit 43d9937
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package ua.caunt.bungeeforge.mixin.network.protocol.login;

import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.PropertyMap;
import net.minecraft.network.protocol.login.ServerLoginPacketListener;
import net.minecraft.server.network.ServerLoginPacketListenerImpl;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
Expand All @@ -14,7 +11,6 @@
import ua.caunt.bungeeforge.bridge.network.ConnectionBridge;
import ua.caunt.bungeeforge.bridge.server.network.ServerLoginPacketListenerImplBridge;

import java.util.Arrays;
import java.util.Optional;
import java.util.UUID;
import java.util.regex.Pattern;
Expand All @@ -30,8 +26,6 @@ public class ServerboundHelloPacket {
@Shadow
private String name;

private static final Pattern PROP_PATTERN = Pattern.compile("\\w{0,16}");

@Inject(method = "handle(Lnet/minecraft/network/protocol/login/ServerLoginPacketListener;)V", at = @At("HEAD"))
public void bungee$head(ServerLoginPacketListener p_134848_, CallbackInfo ci) {
var serverLoginPacketListenerImplBridge = (ServerLoginPacketListenerImplBridge)p_134848_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,8 @@

import net.minecraft.network.chat.RemoteChatSession;
import net.minecraft.network.protocol.game.ServerboundChatSessionUpdatePacket;
import net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.SignatureValidator;
import net.minecraft.world.entity.player.ProfilePublicKey;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -20,10 +17,6 @@ public class ServerGamePacketListenerImpl {
@Shadow
private RemoteChatSession chatSession;

@Final
@Shadow
private MinecraftServer server;

@Inject(method = "handleChatSessionUpdate(Lnet/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket;)V", at = @At("HEAD"))
public void bungee$handleChatSessionUpdate(ServerboundChatSessionUpdatePacket p_253950_, CallbackInfo ci) throws ProfilePublicKey.ValidationException {
var remoteChatSessionData = p_253950_.chatSession();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ua.caunt.bungeeforge.mixin.server.network;

import net.minecraft.network.Connection;
import net.minecraft.network.protocol.handshake.ClientIntentionPacket;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ua.caunt.bungeeforge.bridge.network.ConnectionBridge;
import ua.caunt.bungeeforge.bridge.network.protocol.handshake.ClientIntentionPacketBridge;

@Mixin(net.minecraft.server.network.ServerHandshakePacketListenerImpl.class)
public class ServerHandshakePacketListenerImpl {
@Final
@Shadow
private Connection connection;

@Inject(method = "handleIntention(Lnet/minecraft/network/protocol/handshake/ClientIntentionPacket;)V", at = @At("HEAD"))
public void bungee$handleIntention(ClientIntentionPacket p_9975_, CallbackInfo ci) {
ClientIntentionPacketBridge clientIntentionPacketBridge = (ClientIntentionPacketBridge) p_9975_;
ConnectionBridge connectionBridge = (ConnectionBridge) connection;

connectionBridge.bungee$setSpoofedId(clientIntentionPacketBridge.bungee$getSpoofedId());
connectionBridge.bungee$setSpoofedProperties(clientIntentionPacketBridge.bungee$getSpoofedProperties());
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package ua.caunt.bungeeforge.mixin.server.network;

import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.PropertyMap;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.Connection;
import net.minecraft.network.protocol.login.ServerboundHelloPacket;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.Redirect;
import ua.caunt.bungeeforge.bridge.network.ConnectionBridge;
import ua.caunt.bungeeforge.bridge.server.network.ServerLoginPacketListenerImplBridge;

Expand All @@ -22,26 +19,26 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListenerI
@Final
@Shadow
Connection connection;
@Shadow
public GameProfile gameProfile;

private static final Pattern PROP_PATTERN = Pattern.compile("\\w{0,16}");

@Inject(method = "handleHello(Lnet/minecraft/network/protocol/login/ServerboundHelloPacket;)V", at = @At("HEAD"))
public void bungee$handleHello(ServerboundHelloPacket p_10047_, CallbackInfo ci) {
@Redirect(method = "handleHello(Lnet/minecraft/network/protocol/login/ServerboundHelloPacket;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/server/network/ServerLoginPacketListenerImpl;gameProfile:Lcom/mojang/authlib/GameProfile;", opcode = Opcodes.PUTFIELD))
public void bungee$handleHello(net.minecraft.server.network.ServerLoginPacketListenerImpl instance, GameProfile value) {
var connectionBridge = (ConnectionBridge)bungee$getConnection();

if (!connectionBridge.bungee$hasSpoofedProfile())
if (!connectionBridge.bungee$hasSpoofedProfile()) {
instance.gameProfile = value;
return;
}

gameProfile = new GameProfile(connectionBridge.bungee$getSpoofedId().get(), gameProfile.getName());
var gameProfile = new GameProfile(connectionBridge.bungee$getSpoofedId().get(), value.getName());
var properties = gameProfile.getProperties();

Arrays.stream(connectionBridge.bungee$getSpoofedProperties().get()).filter(property -> PROP_PATTERN.matcher(property.getName()).matches()).forEach(property -> {
properties.put(property.getName(), property);
});

ci.cancel();
instance.gameProfile = gameProfile;
}

@Override
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/bungeeforge.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"network.protocol.handshake.ClientIntentionPacket",
"network.protocol.login.ServerboundHelloPacket",
"server.network.ServerGamePacketListenerImpl",
"server.network.ServerHandshakePacketListenerImpl",
"server.network.ServerLoginPacketListenerImpl"
],
"client": [],
Expand Down

0 comments on commit 43d9937

Please sign in to comment.