Skip to content

Commit b0a14cc

Browse files
committed
Refactor everything
* Only inject enabled mixin * Show error if secret not set * Upgrade gradle & dependencies
1 parent 839b8fe commit b0a14cc

27 files changed

+191
-208
lines changed

build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id 'fabric-loom' version '0.4-SNAPSHOT'
2+
id 'fabric-loom' version '0.5-SNAPSHOT'
33
id 'maven-publish'
44
}
55

@@ -25,8 +25,8 @@ dependencies {
2525
modApi "net.fabricmc:fabric-loader:${project.loader_version}"
2626
modApi "me.sargunvohra.mcmods:autoconfig1u:${project.auto_config_version}"
2727

28-
// Fabric API. This is technically optional, but you probably want it anyway.
29-
//modApi "net.fabricmc:fabric:${project.fabric_version}"
28+
// API
29+
modApi "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
3030
include "me.sargunvohra.mcmods:autoconfig1u:${project.auto_config_version}"
3131
}
3232

gradle.properties

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
org.gradle.jvmargs=-Xmx1G
33
# Fabric Properties
44
# check these on https://modmuss50.me/fabric.html
5-
minecraft_version=1.16
6-
yarn_mappings=1.16+build.1
7-
loader_version=0.8.8+build.202
5+
minecraft_version=1.16.4
6+
yarn_mappings=1.16.4+build.6
7+
loader_version=0.10.6+build.214
88
# Mod Properties
9-
mod_version=1.3.3
9+
mod_version=1.3.4
1010
maven_group=one.oktw
1111
archives_base_name=FabricProxy
1212
# Dependencies
13-
auto_config_version=2.2.0
13+
auto_config_version=3.3.1
14+
fabric_version=0.25.1+build.416-1.16

gradle/wrapper/gradle-wrapper.jar

293 Bytes
Binary file not shown.
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

gradlew

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ fi
130130
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131131
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132132
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133-
133+
134134
JAVACMD=`cygpath --unix "$JAVACMD"`
135135

136136
# We build the pattern for arguments to be converted via cygpath

gradlew.bat

+3-18
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
4040

4141
set JAVA_EXE=java.exe
4242
%JAVA_EXE% -version >NUL 2>&1
43-
if "%ERRORLEVEL%" == "0" goto init
43+
if "%ERRORLEVEL%" == "0" goto execute
4444

4545
echo.
4646
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -54,7 +54,7 @@ goto fail
5454
set JAVA_HOME=%JAVA_HOME:"=%
5555
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
5656

57-
if exist "%JAVA_EXE%" goto init
57+
if exist "%JAVA_EXE%" goto execute
5858

5959
echo.
6060
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -64,29 +64,14 @@ echo location of your Java installation.
6464

6565
goto fail
6666

67-
:init
68-
@rem Get command-line arguments, handling Windows variants
69-
70-
if not "%OS%" == "Windows_NT" goto win9xME_args
71-
72-
:win9xME_args
73-
@rem Slurp the command line arguments.
74-
set CMD_LINE_ARGS=
75-
set _SKIP=2
76-
77-
:win9xME_args_slurp
78-
if "x%~1" == "x" goto execute
79-
80-
set CMD_LINE_ARGS=%*
81-
8267
:execute
8368
@rem Setup the command line
8469

8570
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
8671

8772

8873
@rem Execute Gradle
89-
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
74+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
9075

9176
:end
9277
@rem End local scope for the variables with windows NT shell

src/main/java/one/oktw/FabricProxy.java

+59-5
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,69 @@
22

33
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
44
import me.sargunvohra.mcmods.autoconfig1u.serializer.Toml4jConfigSerializer;
5-
import net.fabricmc.api.ModInitializer;
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
7+
import org.objectweb.asm.tree.ClassNode;
8+
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
9+
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
610

7-
public class FabricProxy implements ModInitializer {
11+
import java.util.List;
12+
import java.util.Set;
13+
14+
public class FabricProxy implements IMixinConfigPlugin {
815
public static ModConfig config;
16+
private final Logger logger = LogManager.getLogger("FabricProxy");
17+
18+
@Override
19+
public void onLoad(String mixinPackage) {
20+
if (config == null) {
21+
AutoConfig.register(ModConfig.class, Toml4jConfigSerializer::new);
22+
config = AutoConfig.getConfigHolder(ModConfig.class).getConfig();
23+
}
24+
}
25+
26+
@Override
27+
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
28+
String module = mixinClassName.split("\\.")[3];
29+
if (module.equals("bungee") && config.getBungeeCord()) {
30+
logger.info("BungeeCord support injected: {}", mixinClassName);
31+
return true;
32+
}
33+
34+
if (module.equals("velocity") && config.getVelocity()) {
35+
if (config.getSecret().isEmpty()) {
36+
logger.error("Error: velocity secret is empty!");
37+
} else {
38+
logger.info("Velocity support injected: {}", mixinClassName);
39+
return true;
40+
}
41+
}
42+
43+
return false;
44+
}
45+
46+
@Override
47+
public String getRefMapperConfig() {
48+
return null;
49+
}
50+
51+
@Override
52+
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
53+
54+
}
55+
56+
@Override
57+
public List<String> getMixins() {
58+
return null;
59+
}
60+
61+
@Override
62+
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
63+
64+
}
965

1066
@Override
11-
public void onInitialize() {
12-
AutoConfig.register(ModConfig.class, Toml4jConfigSerializer::new);
67+
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
1368

14-
config = AutoConfig.getConfigHolder(ModConfig.class).getConfig();
1569
}
1670
}

src/main/java/one/oktw/VelocityProxy.java src/main/java/one/oktw/VelocityLib.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import java.security.MessageDigest;
1414
import java.security.NoSuchAlgorithmException;
1515

16-
public class VelocityProxy {
16+
public class VelocityLib {
1717
public static final Identifier PLAYER_INFO_CHANNEL = new Identifier("velocity", "player_info");
1818
private static final int SUPPORTED_FORWARDING_VERSION = 1;
1919

src/main/java/one/oktw/interfaces/IClientConnection.java src/main/java/one/oktw/interfaces/BungeeClientConnection.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@
22

33
import com.mojang.authlib.properties.Property;
44

5-
import java.net.SocketAddress;
65
import java.util.UUID;
76

8-
public interface IClientConnection {
9-
void setRemoteAddress(SocketAddress socketAddress);
10-
7+
public interface BungeeClientConnection {
118
UUID getSpoofedUUID();
129

1310
void setSpoofedUUID(UUID uuid);

src/main/java/one/oktw/interfaces/IHandshakeC2SPacket.java

-7
This file was deleted.

src/main/java/one/oktw/interfaces/ILoginQueryRequestS2CPacket.java

-12
This file was deleted.

src/main/java/one/oktw/interfaces/ILoginQueryResponseC2SPacket.java

-9
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package one.oktw.mixin;
2+
3+
import net.minecraft.network.ClientConnection;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.gen.Accessor;
6+
7+
import java.net.SocketAddress;
8+
9+
@Mixin(ClientConnection.class)
10+
public interface ClientConnectionAccessor {
11+
@Accessor
12+
void setAddress(SocketAddress address);
13+
}

src/main/java/one/oktw/mixin/ClientConnectionMixin.java src/main/java/one/oktw/mixin/bungee/ClientConnectionMixin.java

+3-12
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,17 @@
1-
package one.oktw.mixin;
1+
package one.oktw.mixin.bungee;
22

33
import com.mojang.authlib.properties.Property;
44
import net.minecraft.network.ClientConnection;
5-
import one.oktw.interfaces.IClientConnection;
5+
import one.oktw.interfaces.BungeeClientConnection;
66
import org.spongepowered.asm.mixin.Mixin;
7-
import org.spongepowered.asm.mixin.Shadow;
87

9-
import java.net.SocketAddress;
108
import java.util.UUID;
119

1210
@Mixin(ClientConnection.class)
13-
public abstract class ClientConnectionMixin implements IClientConnection {
14-
@Shadow
15-
private SocketAddress address;
11+
public abstract class ClientConnectionMixin implements BungeeClientConnection {
1612
private UUID spoofedUUID;
1713
private Property[] spoofedProfile;
1814

19-
@Override
20-
public void setRemoteAddress(SocketAddress socketAddress) {
21-
this.address = socketAddress;
22-
}
23-
2415
@Override
2516
public UUID getSpoofedUUID() {
2617
return this.spoofedUUID;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package one.oktw.mixin.bungee;
2+
3+
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.gen.Accessor;
6+
7+
@Mixin(HandshakeC2SPacket.class)
8+
public interface HandshakeC2SPacketAccessor {
9+
@Accessor
10+
String getAddress();
11+
}
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,19 @@
11
package one.oktw.mixin.bungee;
22

3-
import net.minecraft.network.PacketByteBuf;
43
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
54
import one.oktw.FabricProxy;
6-
import one.oktw.interfaces.IHandshakeC2SPacket;
75
import org.spongepowered.asm.mixin.Mixin;
8-
import org.spongepowered.asm.mixin.Shadow;
9-
import org.spongepowered.asm.mixin.injection.At;
10-
import org.spongepowered.asm.mixin.injection.Redirect;
6+
import org.spongepowered.asm.mixin.injection.Constant;
7+
import org.spongepowered.asm.mixin.injection.ModifyConstant;
118

129
@Mixin(HandshakeC2SPacket.class)
13-
public abstract class HandshakeC2SPacketMixin implements IHandshakeC2SPacket {
14-
@Shadow
15-
private String address;
16-
17-
@Redirect(method = "read", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketByteBuf;readString(I)Ljava/lang/String;"))
18-
private String onReadPacketData(PacketByteBuf buf, int int_1) {
19-
if (!FabricProxy.config.getBungeeCord()) {
20-
return buf.readString(255);
10+
public abstract class HandshakeC2SPacketMixin {
11+
@ModifyConstant(method = "read", constant = @Constant(intValue = 255))
12+
private int readStringSize(int i) {
13+
if (FabricProxy.config.getBungeeCord()) {
14+
return Short.MAX_VALUE;
2115
}
2216

23-
return buf.readString(Short.MAX_VALUE);
24-
}
25-
26-
@Override
27-
public String getAddress() {
28-
return address;
29-
}
30-
31-
@Override
32-
public void setAddress(String address) {
33-
this.address = address;
17+
return i;
3418
}
3519
}

src/main/java/one/oktw/mixin/bungee/ServerHandshakeNetworkHandlerMixin.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import net.minecraft.server.network.ServerHandshakeNetworkHandler;
1111
import net.minecraft.text.LiteralText;
1212
import net.minecraft.text.Text;
13-
import one.oktw.interfaces.IClientConnection;
14-
import one.oktw.interfaces.IHandshakeC2SPacket;
13+
import one.oktw.interfaces.BungeeClientConnection;
14+
import one.oktw.mixin.ClientConnectionAccessor;
1515
import org.spongepowered.asm.mixin.Final;
1616
import org.spongepowered.asm.mixin.Mixin;
1717
import org.spongepowered.asm.mixin.Shadow;
@@ -29,22 +29,21 @@ public class ServerHandshakeNetworkHandlerMixin {
2929
@Final
3030
private ClientConnection connection;
3131

32-
@Inject(method = "onHandshake", at = @At(value = "HEAD"), cancellable = true)
32+
@Inject(method = "onHandshake", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerLoginNetworkHandler;<init>(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/network/ClientConnection;)V"))
3333
private void onProcessHandshakeStart(HandshakeC2SPacket packet, CallbackInfo ci) {
3434
if (config.getBungeeCord() && packet.getIntendedState().equals(NetworkState.LOGIN)) {
35-
String[] split = ((IHandshakeC2SPacket) packet).getAddress().split("\00");
35+
String[] split = ((HandshakeC2SPacketAccessor) packet).getAddress().split("\00");
3636
if (split.length == 3 || split.length == 4) {
37-
((IHandshakeC2SPacket) packet).setAddress(split[0]);
38-
((IClientConnection) connection).setRemoteAddress(new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) connection.getAddress()).getPort()));
39-
((IClientConnection) connection).setSpoofedUUID(UUIDTypeAdapter.fromString(split[2]));
37+
((ClientConnectionAccessor) connection).setAddress(new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) connection.getAddress()).getPort()));
38+
((BungeeClientConnection) connection).setSpoofedUUID(UUIDTypeAdapter.fromString(split[2]));
39+
40+
if (split.length == 4) {
41+
((BungeeClientConnection) connection).setSpoofedProfile(gson.fromJson(split[3], Property[].class));
42+
}
4043
} else {
4144
Text disconnectMessage = new LiteralText("If you wish to use IP forwarding, please enable it in your BungeeCord config as well!");
4245
connection.send(new LoginDisconnectS2CPacket(disconnectMessage));
4346
connection.disconnect(disconnectMessage);
44-
return;
45-
}
46-
if (split.length == 4) {
47-
((IClientConnection) connection).setSpoofedProfile(gson.fromJson(split[3], Property[].class));
4847
}
4948
}
5049
}

0 commit comments

Comments
 (0)