mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-12-03 16:13:21 +01:00
d065d41c0e
Apparently caused issues we werent aware of. Unfortunately there's no way to improve it without blocking the main thread.
97 lines
5.8 KiB
Diff
97 lines
5.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Ivan Pekov <ivan@mrivanplays.com>
|
|
Date: Wed, 9 Sep 2020 16:15:22 +0300
|
|
Subject: [PATCH] ProxyForwardDataEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
index 5dde738b7499fbf432dc3dbae295eb96d5b90347..0fc3b46df54d40133c059d819b1a198e4e65dc23 100644
|
|
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
|
|
@@ -92,6 +92,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
this.getNetworkManager().socketAddress = new java.net.InetSocketAddress(event.getSocketAddressHostname(), ((java.net.InetSocketAddress) this.getNetworkManager().getSocketAddress()).getPort());
|
|
this.getNetworkManager().spoofedUUID = event.getUniqueId();
|
|
this.getNetworkManager().spoofedProfile = gson.fromJson(event.getPropertiesJson(), com.mojang.authlib.properties.Property[].class);
|
|
+ if (proxyLogicEnabled) c.proxyProfileSpoof = true; // Yatopia
|
|
handledByEvent = true; // Hooray, we did it!
|
|
}
|
|
}
|
|
@@ -105,6 +106,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
|
packethandshakinginsetprotocol.hostname = split[0];
|
|
c.socketAddress = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) c.getSocketAddress()).getPort());
|
|
c.spoofedUUID = com.mojang.util.UUIDTypeAdapter.fromString( split[2] );
|
|
+ c.proxyProfileSpoof = true; // Yatopia
|
|
} else
|
|
{
|
|
chatmessage = new ChatMessage("If you wish to use IP forwarding, please enable it in your BungeeCord config as well!");
|
|
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
|
|
index 57a3a8d09427012e5c8aba5085d187c6be047652..fa0a8a7e00a64df4d3ba09407193d984e1ff0952 100644
|
|
--- a/src/main/java/net/minecraft/server/LoginListener.java
|
|
+++ b/src/main/java/net/minecraft/server/LoginListener.java
|
|
@@ -124,6 +124,23 @@ public class LoginListener implements PacketLoginInListener {
|
|
|
|
this.i = new GameProfile( uuid, this.i.getName() );
|
|
|
|
+ // Yatopia start - situate this around an event
|
|
+ if (networkManager.proxyProfileSpoof) {
|
|
+ java.util.List<com.mojang.authlib.properties.Property> properties;
|
|
+ if (networkManager.spoofedProfile != null) {
|
|
+ properties = new java.util.ArrayList<>(Arrays.asList(networkManager.spoofedProfile));
|
|
+ } else {
|
|
+ properties = new java.util.ArrayList<>();
|
|
+ }
|
|
+ net.yatopia.api.event.ProxyForwardDataEvent event = new net.yatopia.api.event.ProxyForwardDataEvent(
|
|
+ !org.bukkit.Bukkit.isPrimaryThread(), uuid, i.getName(), properties
|
|
+ );
|
|
+ if (event.callEvent()) {
|
|
+ for (com.mojang.authlib.properties.Property property : event.getProperties()) {
|
|
+ i.getProperties().put(property.getName(), property);
|
|
+ }
|
|
+ }
|
|
+ } else {
|
|
if (networkManager.spoofedProfile != null)
|
|
{
|
|
for ( com.mojang.authlib.properties.Property property : networkManager.spoofedProfile )
|
|
@@ -131,6 +148,7 @@ public class LoginListener implements PacketLoginInListener {
|
|
this.i.getProperties().put( property.getName(), property );
|
|
}
|
|
}
|
|
+ } // Yatopia end
|
|
}
|
|
// Spigot end
|
|
|
|
@@ -355,11 +373,20 @@ public class LoginListener implements PacketLoginInListener {
|
|
|
|
this.networkManager.socketAddress = new java.net.InetSocketAddress(com.destroystokyo.paper.proxy.VelocityProxy.readAddress(buf), ((java.net.InetSocketAddress) this.networkManager.getSocketAddress()).getPort());
|
|
|
|
- this.setGameProfile(com.destroystokyo.paper.proxy.VelocityProxy.createProfile(buf));
|
|
+ // Yatopia start - how about spoofed uuid and profile
|
|
+ //this.setGameProfile(com.destroystokyo.paper.proxy.VelocityProxy.createProfile(buf));
|
|
+ com.mojang.authlib.GameProfile profile = com.destroystokyo.paper.proxy.VelocityProxy.createProfile(buf);
|
|
+ networkManager.spoofedUUID = profile.getId();
|
|
+ if (!profile.getProperties().isEmpty()) {
|
|
+ networkManager.spoofedProfile = profile.getProperties().values().toArray(new com.mojang.authlib.properties.Property[0]);
|
|
+ }
|
|
+ networkManager.proxyProfileSpoof = true;
|
|
+ // Yatopia end
|
|
|
|
// Proceed with login
|
|
authenticatorPool.execute(() -> {
|
|
try {
|
|
+ initUUID(); // Yatopia
|
|
new LoginHandler().fireEvents();
|
|
} catch (Exception ex) {
|
|
disconnect("Failed to verify username!");
|
|
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
index 5b4901acf7d4661e52839a7ab0ebe24b93bec0d6..4bc33861b015937a2081541f6b1ff2470a01d895 100644
|
|
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
|
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
|
@@ -49,6 +49,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
|
// Spigot Start
|
|
public java.util.UUID spoofedUUID;
|
|
public com.mojang.authlib.properties.Property[] spoofedProfile;
|
|
+ public boolean proxyProfileSpoof = false; // Yatopia
|
|
public boolean preparing = true;
|
|
// Spigot End
|
|
private PacketListener packetListener;
|