Skip to content

Commit

Permalink
Updated to 20w10a
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsEeleeya committed Mar 6, 2020
1 parent 5b4f525 commit 6161c7e
Show file tree
Hide file tree
Showing 12 changed files with 68 additions and 57 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ dependencies {
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}"
modCompile "net.fabricmc:fabric-loader:${project.loader_version}"
modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
//modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
}

processResources {
Expand Down
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx1G

# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.15
yarn_mappings=1.15+build.1
loader_version=0.7.2+build.174
minecraft_version=20w10a
yarn_mappings=20w10a+build.7
loader_version=0.7.8+build.186

# Mod Properties
mod_version = 1.0.1
mod_version = 1.0-SNAPSHOT-20W10A
maven_group = me.i509
archives_base_name = Trampoline

# Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_version=0.4.23+build.276-1.15
#fabric_version=0.4.23+build.276-1.15
4 changes: 2 additions & 2 deletions src/main/java/me/i509/fabric/trampoline/MixinHelpers.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

import me.i509.fabric.trampoline.accessors.BungeeConnectionModifier;
import me.i509.fabric.trampoline.accessors.HandshakeC2SPacketModifier;
import net.minecraft.client.network.packet.LoginDisconnectS2CPacket;
import net.minecraft.network.ClientConnection;
import net.minecraft.server.network.packet.HandshakeC2SPacket;
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import net.minecraft.network.packet.s2c.login.LoginDisconnectS2CPacket;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;

Expand Down
21 changes: 9 additions & 12 deletions src/main/java/me/i509/fabric/trampoline/TrampolineServerMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,12 @@
import com.mojang.brigadier.tree.RootCommandNode;
import me.i509.fabric.trampoline.accessors.BungeeProxiedPlayer;
import net.fabricmc.api.DedicatedServerModInitializer;
import net.fabricmc.fabric.api.registry.CommandRegistry;
import net.minecraft.command.EntitySelector;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.CommandSource;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.text.Texts;
import net.minecraft.text.*;
import net.minecraft.util.Formatting;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand All @@ -34,6 +29,7 @@
public class TrampolineServerMod implements DedicatedServerModInitializer {
public static final Logger LOGGER = LogManager.getLogger("Fabric-Trampoline");
public static final String PREFIX = "[Trampoline-Fabric] ";
public static CommandDispatcher<ServerCommandSource> dispatcher;

public static BungeeProxiedPlayer adapt(ServerPlayerEntity entity) {
return (BungeeProxiedPlayer) entity;
Expand All @@ -44,22 +40,22 @@ public void onInitializeServer() {
LOGGER.info(PREFIX + "Enabling Trampoline");
LOGGER.warn(PREFIX + "The server is in offline mode to allow connection to Bungeecord. Please secure your server using the tutorial below, otherwise anyone can join the server:");
LOGGER.warn(PREFIX + "https://www.spigotmc.org/wiki/firewall-guide/");
CommandRegistry.INSTANCE.register(true, this::registerCommands);
registerCommands();
}

private void registerCommands(CommandDispatcher<ServerCommandSource> dispatcher) {
private void registerCommands() {
RootCommandNode<ServerCommandSource> root = dispatcher.getRoot();

LiteralCommandNode<ServerCommandSource> bungee = CommandManager.literal("bungee-trampoline").executes(this::aboutThis).build();
LiteralCommandNode<ServerCommandSource> redirect = CommandManager.literal("trampoline").executes(this::aboutThis).redirect(bungee).build();

LiteralCommandNode<ServerCommandSource> info = CommandManager.literal("info").requires(s -> s.hasPermissionLevel(4)).executes(this::getInfoSelf).build();
LiteralCommandNode<ServerCommandSource> info = CommandManager.literal("trampoline-info").requires(s -> s.hasPermissionLevel(4)).executes(this::getInfoSelf).build();

ArgumentCommandNode<ServerCommandSource, EntitySelector> otherTarget = CommandManager.argument("player", player()).executes(this::getInfoTargetted)
.suggests(TrampolineServerMod::playerSuggestions).build();

info.addChild(otherTarget);
bungee.addChild(info);
root.addChild(info);
root.addChild(bungee);
root.addChild(redirect);
}
Expand Down Expand Up @@ -93,13 +89,14 @@ private int aboutThis(CommandContext<ServerCommandSource> ctx) {
source.sendFeedback(new LiteralText("Allows IP-Forwarding on Fabric servers connected to Bungeecord").formatted(Formatting.GRAY), false);
source.sendFeedback(new LiteralText("By i509VCB").formatted(Formatting.GRAY), false);

Text t = new LiteralText("https://github.com/i509VCB/Trampoline").setStyle((new Style().setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/i509VCB/Trampoline")))).formatted(Formatting.YELLOW);
Text text = new LiteralText("https://github.com/i509VCB/Trampoline").setStyle((new Style().setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/i509VCB/Trampoline")))).formatted(Formatting.YELLOW);

source.sendFeedback(new LiteralText("Github Link: ").formatted(Formatting.GREEN).append(t), false);
source.sendFeedback(new LiteralText("Github Link: ").formatted(Formatting.GREEN).append(text), false);
return 1;
}

private static CompletableFuture<Suggestions> playerSuggestions(CommandContext<ServerCommandSource> context, SuggestionsBuilder builder) {
return CommandSource.suggestMatching(context.getSource().getMinecraftServer().getPlayerNames(), builder);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package me.i509.fabric.trampoline.mixin;

import com.mojang.brigadier.CommandDispatcher;
import me.i509.fabric.trampoline.TrampolineServerMod;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;
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;

@Mixin(CommandManager.class)
public class MixinCommandManager {
@Shadow @Final private CommandDispatcher<ServerCommandSource> dispatcher;

@Inject(method = "<init>", at = @At("RETURN"))
private void inject(boolean bl, CallbackInfo ci) {
TrampolineServerMod.dispatcher = this.dispatcher;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,29 @@

import java.io.IOException;

import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;

import me.i509.fabric.trampoline.accessors.HandshakeC2SPacketModifier;
import net.minecraft.network.NetworkState;
import net.minecraft.server.network.packet.HandshakeC2SPacket;
import net.minecraft.util.PacketByteBuf;

@Mixin(HandshakeC2SPacket.class)
public class MixinHandshakeC2SPacket implements HandshakeC2SPacketModifier {

@Shadow
private int port;

@Shadow
private NetworkState state;

@Shadow
private int version;


@Shadow
private String address;


@Shadow private NetworkState intendedState;

@Shadow private int protocolVersion;

@Override
public void setAddress(String address) {
this.address = address;
Expand All @@ -47,9 +46,9 @@ public int getPort() {
*/
@Overwrite
public void read(PacketByteBuf byteBuf) throws IOException {
this.version = byteBuf.readVarInt();
this.protocolVersion = byteBuf.readVarInt();
this.address = byteBuf.readString(Short.MAX_VALUE);
this.port = byteBuf.readUnsignedShort();
this.state = NetworkState.byId(byteBuf.readVarInt());
this.intendedState = NetworkState.byId(byteBuf.readVarInt());
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package me.i509.fabric.trampoline.mixin;

import net.minecraft.server.MinecraftServer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import net.minecraft.server.MinecraftServer;

@Mixin(MinecraftServer.class)
public class MixinMinecraftServer {
// isOnlineMode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import me.i509.fabric.trampoline.MixinHelpers;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
import net.minecraft.server.network.ServerHandshakeNetworkHandler;
import net.minecraft.server.network.packet.HandshakeC2SPacket;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -12,13 +12,13 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ServerHandshakeNetworkHandler.class)
public class MixinServerHandshakeNetworkHandler {
@Shadow
private ClientConnection client;
@Inject(at = @At(value = "INVOKE", target = "net/minecraft/network/ClientConnection.setPacketListener(Lnet/minecraft/network/listener/PacketListener;)V", ordinal = 0, shift = Shift.AFTER), method = "onHandshake(Lnet/minecraft/server/network/packet/HandshakeC2SPacket;)V")
public abstract class MixinServerHandshakeNetworkHandler {


@Shadow public abstract ClientConnection getConnection();

@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;setPacketListener(Lnet/minecraft/network/listener/PacketListener;)V", ordinal = 0, shift = Shift.AFTER), method = "Lnet/minecraft/server/network/ServerHandshakeNetworkHandler;onHandshake(Lnet/minecraft/network/packet/c2s/handshake/HandshakeC2SPacket;)V")
public void onHandshake(HandshakeC2SPacket handshakePacket, CallbackInfo ci) { // First to go.
MixinHelpers.handshake(handshakePacket, client);
MixinHelpers.handshake(handshakePacket, this.getConnection());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,23 @@
import java.util.UUID;

@Mixin(ServerLoginNetworkHandler.class)
public class MixinServerLoginNetworkHandler {
public abstract class MixinServerLoginNetworkHandler {

@Shadow
private GameProfile profile;

@Shadow
public ClientConnection client;

@Shadow
private ServerPlayerEntity clientEntity;

@Shadow
private void disconnect(Text text_1) {}

@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/server/network/ServerLoginNetworkHandler$State;READY_TO_ACCEPT:Lnet/minecraft/server/network/ServerLoginNetworkHandler$State;", opcode = Opcodes.GETSTATIC), method = "onHello(Lnet/minecraft/server/network/packet/LoginHelloC2SPacket;)V", cancellable = true)
@Shadow public abstract ClientConnection getConnection();

@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/server/network/ServerLoginNetworkHandler$State;READY_TO_ACCEPT:Lnet/minecraft/server/network/ServerLoginNetworkHandler$State;", opcode = Opcodes.GETSTATIC), method = "onHello(Lnet/minecraft/network/packet/c2s/login/LoginHelloC2SPacket;)V", cancellable = true)
public void onHello(CallbackInfo ci) {
UUID uuid;
BungeeConnectionModifier bungeeConnection = (BungeeConnectionModifier) client;
BungeeConnectionModifier bungeeConnection = (BungeeConnectionModifier) this.getConnection();

if (bungeeConnection.getSpoofedUUID() != null) {
uuid = bungeeConnection.getSpoofedUUID();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
public class MixinServerPlayerEntity implements BungeeProxiedPlayer {

@Shadow
private ServerPlayNetworkHandler networkHandler;
public ServerPlayNetworkHandler networkHandler;

@Override
public InetSocketAddress getRealAddress() {
return ((BungeeConnectionModifier) networkHandler.client).getRealAddress();
return ((BungeeConnectionModifier) networkHandler.getConnection()).getRealAddress();
}

}
9 changes: 2 additions & 7 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"version": "${version}",

"name": "Trampoline",
"description": "Adds support for Bungeecord IP-Forwarding on fabric servers",
"description": "Adds support for Bungeecord/Waterfall IP-Forwarding on fabric servers",
"authors": [
"i509VCB"
],
Expand All @@ -27,13 +27,8 @@
],

"depends": {
"fabricloader": ">=0.4.0",
"fabric": ">=0.4.23+build.276-1.15"
"fabricloader": ">=0.4.0"
},
"suggests": {
"flamingo": "*"
},
"custom": {
"fabric-networking:shouldHandshake": false
}
}
3 changes: 2 additions & 1 deletion src/main/resources/trampoline.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"MixinServerLoginNetworkHandler",
"MixinServerPlayerEntity",
"MixinServerConfigHandler",
"MixinMinecraftServer"
"MixinMinecraftServer",
"MixinCommandManager"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit 6161c7e

Please sign in to comment.