cleanup, deduplicate some code

This commit is contained in:
creeper123123321 2021-05-09 20:34:48 -03:00
parent b38d518214
commit 745818e62b
148 changed files with 303 additions and 2493 deletions

View File

@ -14,9 +14,6 @@ description = "Client-side and server-side ViaVersion implementation for Fabric"
version = "0.4.0" + "+" + ENV.GITHUB_RUN_NUMBER + "-" + getBranch()
logger.lifecycle("Building ViaFabric: " + version)
import net.fabricmc.loom.task.RunClientTask
import net.fabricmc.loom.task.RunServerTask
def getBranch() {
def ENV = System.getenv()
if (ENV.GITHUB_REF) {
@ -32,32 +29,6 @@ def getBranch() {
return branch.substring(branch.lastIndexOf("/") + 1)
}
def moduleDependencies(project, List<String> depNames) {
def deps = depNames.iterator().collect { project.dependencies.project(path: ":$it", configuration: 'dev') }
project.dependencies {
deps.each {
compile it
}
}
project.publishing {
publications {
mavenJava(MavenPublication) {
pom.withXml {
def depsNode = asNode().appendNode("dependencies")
deps.each {
def depNode = depsNode.appendNode("dependency")
depNode.appendNode("groupId", it.group)
depNode.appendNode("artifactId", it.name)
depNode.appendNode("version", it.version)
depNode.appendNode("scope", "compile")
}
}
}
}
}
}
allprojects {
apply plugin: "maven-publish"
apply plugin: "fabric-loom"
@ -93,6 +64,8 @@ allprojects {
// transitive = false because Guava is conflicting on runClient
implementation("com.viaversion:viaversion:$vvVer") { transitive = false }
implementation("org.yaml:snakeyaml:1.28")
modImplementation("net.fabricmc:fabric-loader:0.11.3")
}
jar {
@ -108,14 +81,14 @@ allprojects {
artifacts {
dev file: file("${project.buildDir}/libs/$archivesBaseName-${version}-dev.jar"), type: "jar", builtBy: jar
}
}
processResources {
filesMatching("fabric.mod.json") {
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [
version : rootProject.version,
description: rootProject.description
])
}
processResources {
filesMatching("fabric.mod.json") {
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [
version : rootProject.version,
description: rootProject.description
])
}
}
@ -132,43 +105,11 @@ allprojects {
}
}
javadoc {
options {
source = "8"
encoding = "UTF-8"
charSet = "UTF-8"
memberLevel = JavadocMemberLevel.PACKAGE
links(
"https://guava.dev/releases/21.0/api/docs/",
"https://asm.ow2.io/javadoc/",
"https://docs.oracle.com/javase/8/docs/api/",
"http://jenkins.liteloader.com/job/Mixin/javadoc/",
"https://logging.apache.org/log4j/2.x/log4j-api/apidocs/"
// Need to add minecraft jd publication etc once there is one available
)
// Disable the crazy super-strict doclint tool in Java 8
addStringOption("Xdoclint:none", "-quiet")
}
allprojects.each {
source(it.sourceSets.main.allJava.srcDirs)
}
classpath = sourceSets.main.compileClasspath
include("**/api/**")
failOnError false
}
task javadocJar(type: Jar) {
dependsOn javadoc
from javadoc.destinationDir
//Set as `fatjavadoc` to prevent an ide form trying to use this javadoc, over using the modules javadoc
archiveClassifier = "fatjavadoc"
}
build.dependsOn javadocJar
subprojects {
dependencies {
implementation rootProject
}
task remapMavenJar(type: Copy, dependsOn: remapJar) {
afterEvaluate {
from("${project.buildDir}/libs/$archivesBaseName-${version}.jar")
@ -194,8 +135,6 @@ subprojects {
setupRepositories(repositories)
}
javadoc.enabled = false
}
task remapMavenJar(type: net.fabricmc.loom.task.RemapJarTask, dependsOn: jar) {
@ -217,8 +156,6 @@ publishing {
builtBy remapSourcesJar
}
artifact javadocJar
pom.withXml {
def depsNode = asNode().appendNode("dependencies")
subprojects.each {
@ -254,16 +191,13 @@ subprojects.each { remapJar.dependsOn("${it.path}:remapJar") }
dependencies {
minecraft("com.mojang:minecraft:1.8.9")
mappings("net.fabricmc:yarn:1.8.9+build.202103291533:v2")
modImplementation("net.fabricmc:fabric-loader:0.10.5+build.213")
include("com.viaversion:viaversion:$vvVer")
include("org.yaml:snakeyaml:1.28")
afterEvaluate {
subprojects.each {
//implementation project(path: ":${it.name}", configuration: "dev")
include project("${it.name}:")
}
subprojects.each {
//implementation project(path: ":${it.name}", configuration: "dev")
include project("${it.name}:")
}
}

View File

@ -1,7 +0,0 @@
#!/bin/sh
git checkout mc-1.8 && ./gradlew clean build \
&& git checkout mc-1.14 && ./gradlew clean build \
&& git checkout mc-1.15 && ./gradlew clean build \
&& git checkout mc-1.16 && ./gradlew clean build \
&& git checkout mc-1.17 && ./gradlew clean build \
&& git push origin mc-1.8 mc-1.14 mc-1.15 mc-1.16 mc-1.17

View File

@ -1,15 +1,15 @@
package com.viaversion.fabric.mc18;
package com.viaversion.fabric.common;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Locale;
public class ViaFabricAddress {
public class VFAddressParser {
public int protocol = 0;
public String viaSuffix = null;
public String realAddress = null;
public ViaFabricAddress parse(String address) {
public VFAddressParser parse(String address) {
if (address == null) return null;
String[] parts = address.split("\\.");

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc116.commands;
package com.viaversion.fabric.common.commands;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.command.ViaCommandSender;

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc114.commands.subs;
package com.viaversion.fabric.common.commands.subs;
import io.netty.util.ResourceLeakDetector;
import com.viaversion.viaversion.api.command.ViaCommandSender;

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc115.config;
package com.viaversion.fabric.common.config;
import com.viaversion.viaversion.util.Config;
@ -9,13 +9,13 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
public class VRConfig extends Config {
public class VFConfig extends Config {
public static final String ENABLE_CLIENT_SIDE = "enable-client-side";
public static final String CLIENT_SIDE_VERSION = "client-side-version";
public static final String CLIENT_SIDE_FORCE_DISABLE = "client-side-force-disable";
public static final String HIDE_BUTTON = "hide-button";
public VRConfig(File configFile) {
public VFConfig(File configFile) {
super(configFile);
reloadConfig();
}

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc115.handler;
package com.viaversion.fabric.common.handler;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;

View File

@ -0,0 +1,8 @@
package com.viaversion.fabric.common.platform;
import com.viaversion.viaversion.ViaAPIBase;
import java.util.UUID;
public class FabricViaAPI extends ViaAPIBase<UUID> {
}

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc116.platform;
package com.viaversion.fabric.common.platform;
import com.viaversion.viaversion.configuration.AbstractViaConfig;
@ -8,14 +8,14 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class VRViaConfig extends AbstractViaConfig {
public class FabricViaConfig extends AbstractViaConfig {
// Based on Sponge ViaVersion
private static List<String> UNSUPPORTED = Arrays.asList("anti-xray-patch", "bungee-ping-interval",
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
"velocity-ping-interval", "velocity-ping-save", "velocity-servers",
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox");
public VRViaConfig(File configFile) {
public FabricViaConfig(File configFile) {
super(configFile);
// Load config
reloadConfig();

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc18.protocol;
package com.viaversion.fabric.common.protocol;
import com.viaversion.fabric.mc18.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
@ -8,8 +8,8 @@ import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.protocol.packet.State;
public class ViaFabricHostnameProtocol extends AbstractSimpleProtocol {
public static final ViaFabricHostnameProtocol INSTANCE = new ViaFabricHostnameProtocol();
public class HostnameParserProtocol extends AbstractSimpleProtocol {
public static final HostnameParserProtocol INSTANCE = new HostnameParserProtocol();
@Override
protected void registerPackets() {
@ -20,7 +20,7 @@ public class ViaFabricHostnameProtocol extends AbstractSimpleProtocol {
map(Type.STRING, new ValueTransformer<String, String>(Type.STRING) {
@Override
public String transform(PacketWrapper packetWrapper, String s) {
return new ViaFabricAddress().parse(s).realAddress;
return new VFAddressParser().parse(s).realAddress;
}
});
}

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc114.util;
package com.viaversion.fabric.common.util;
import com.viaversion.viaversion.api.platform.PlatformTask;

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc116.util;
package com.viaversion.fabric.common.util;
import java.text.MessageFormat;
import java.util.logging.Level;

View File

@ -1,4 +1,4 @@
package com.viaversion.fabric.mc116.util;
package com.viaversion.fabric.common.util;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;

View File

@ -11,6 +11,10 @@
"sources": "https://github.com/ViaVersion/ViaFabric",
"discord": "https://discord.gg/viaversion"
},
"depends": {
"fabricloader": ">=0.10.0",
"minecraft": ["1.8.x", "1.14.x", "1.15.x", "1.16.x", "1.17.x"]
},
"environment": "*",
"authors": [
{

View File

@ -3,7 +3,6 @@ version = rootProject.version
dependencies {
minecraft("com.mojang:minecraft:1.14.4")
mappings("net.fabricmc:yarn:1.14.4+build.16:v2")
modImplementation("net.fabricmc:fabric-loader:0.8.2+build.194")
modImplementation("net.fabricmc.fabric-api:fabric-api:0.13.1+build.257-1.14")
modImplementation("io.github.prospector:modmenu:1.7.16.1.14.4+build.128")

View File

@ -1,12 +1,12 @@
package com.viaversion.fabric.mc114;
import com.viaversion.fabric.common.config.VFConfig;
import com.viaversion.fabric.mc114.commands.VRCommandHandler;
import com.viaversion.fabric.mc114.config.VRConfig;
import com.viaversion.fabric.mc114.platform.VRInjector;
import com.viaversion.fabric.mc114.platform.FabricInjector;
import com.viaversion.fabric.mc114.platform.VRLoader;
import com.viaversion.fabric.mc114.platform.VRPlatform;
import com.viaversion.fabric.mc114.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.mc114.util.JLoggerToLog4j;
import com.viaversion.fabric.mc114.platform.FabricPlatform;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.google.common.collect.Range;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.brigadier.arguments.StringArgumentType;
@ -36,7 +36,7 @@ public class ViaFabric implements ModInitializer {
public static final ExecutorService ASYNC_EXECUTOR;
public static final EventLoop EVENT_LOOP;
public static CompletableFuture<Void> INIT_FUTURE = new CompletableFuture<>();
public static VRConfig config;
public static VFConfig config;
static {
ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ViaFabric-%d").build();
@ -64,16 +64,16 @@ public class ViaFabric implements ModInitializer {
@Override
public void onInitialize() {
Via.init(ViaManagerImpl.builder()
.injector(new VRInjector())
.injector(new FabricInjector())
.loader(new VRLoader())
.commandHandler(new VRCommandHandler())
.platform(new VRPlatform()).build());
.platform(new FabricPlatform()).build());
FabricLoader.getInstance().getModContainer("viabackwards").ifPresent(mod -> MappingDataLoader.enableMappingsCache());
((ViaManagerImpl) Via.getManager()).init();
Via.getManager().getProtocolManager().registerBaseProtocol(ViaFabricHostnameProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
Via.getManager().getProtocolManager().registerBaseProtocol(HostnameParserProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
ProtocolVersion.register(-2, "AUTO");
FabricLoader.getInstance().getEntrypoints("viafabric:via_api_initialized", Runnable.class).forEach(Runnable::run);
@ -89,7 +89,7 @@ public class ViaFabric implements ModInitializer {
}
}
config = new VRConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
config = new VFConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
.resolve("viafabric.yml").toFile());
INIT_FUTURE.complete(null);

View File

@ -1,77 +0,0 @@
package com.viaversion.fabric.mc114;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Locale;
public class ViaFabricAddress {
public int protocol = 0;
public String viaSuffix = null;
public String realAddress = null;
public ViaFabricAddress parse(String address) {
if (address == null) return null;
String[] parts = address.split("\\.");
boolean foundDomain = false;
boolean foundOptions = false;
StringBuilder ourParts = new StringBuilder();
StringBuilder realAddrBuilder = new StringBuilder();
for (int i = parts.length - 1; i >= 0; i--) {
String part = parts[i];
boolean realAddrPart = false;
if (foundDomain) {
if (!foundOptions) {
if (part.startsWith("_")) {
String arg = part.substring(2);
if (part.toLowerCase(Locale.ROOT).startsWith("_v")) {
try {
protocol = Integer.parseInt(arg);
} catch (NumberFormatException e) {
ProtocolVersion closest = ProtocolVersion.getClosest(arg.replace("_", "."));
if (closest != null) {
protocol = closest.getVersion();
}
}
}
} else {
foundOptions = true;
}
}
if (foundOptions) {
realAddrPart = true;
}
} else if (part.equalsIgnoreCase("viafabric")) {
foundDomain = true;
}
if (realAddrPart) {
realAddrBuilder.insert(0, part + ".");
} else {
ourParts.insert(0, part + ".");
}
}
String realAddr = realAddrBuilder.toString().replaceAll("\\.$", "");
String suffix = ourParts.toString().replaceAll("\\.$", "");
if (realAddr.isEmpty()) {
this.realAddress = address;
} else {
this.realAddress = realAddr;
this.viaSuffix = suffix;
}
return this;
}
@Override
public String toString() {
return "ViaFabricAddress{" +
"protocol=" + protocol +
", viaSuffix='" + viaSuffix + '\'' +
", realAddress='" + realAddress + '\'' +
'}';
}
}

View File

@ -1,35 +0,0 @@
package com.viaversion.fabric.mc114.commands;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.connection.UserConnection;
import java.util.UUID;
public class UserCommandSender implements ViaCommandSender {
private UserConnection con;
public UserCommandSender(UserConnection con) {
this.con = con;
}
@Override
public boolean hasPermission(String s) {
return false;
}
@Override
public void sendMessage(String s) {
Via.getPlatform().sendMessage(getUUID(), s);
}
@Override
public UUID getUUID() {
return con.getProtocolInfo().getUuid();
}
@Override
public String getName() {
return con.getProtocolInfo().getUsername();
}
}

View File

@ -5,7 +5,7 @@ import com.mojang.brigadier.CommandDispatcher;
import io.github.cottonmc.clientcommands.ClientCommandPlugin;
import io.github.cottonmc.clientcommands.CottonClientCommandSource;
public class VRClientCommands implements ClientCommandPlugin {
public class VFClientCommands implements ClientCommandPlugin {
@Override
public void registerCommands(CommandDispatcher<CottonClientCommandSource> commandDispatcher) {
commandDispatcher.register(ViaFabric.command("viafabricclient"));

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.commands;
import com.viaversion.fabric.mc114.commands.subs.LeakDetectSubCommand;
import com.viaversion.fabric.common.commands.subs.LeakDetectSubCommand;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.suggestion.Suggestions;

View File

@ -1,68 +0,0 @@
package com.viaversion.fabric.mc114.config;
import com.viaversion.viaversion.util.Config;
import java.io.File;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class VRConfig extends Config {
public static final String ENABLE_CLIENT_SIDE = "enable-client-side";
public static final String CLIENT_SIDE_VERSION = "client-side-version";
public static final String CLIENT_SIDE_FORCE_DISABLE = "client-side-force-disable";
public static final String HIDE_BUTTON = "hide-button";
public VRConfig(File configFile) {
super(configFile);
reloadConfig();
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viafabric/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> map) {
}
@Override
public List<String> getUnsupportedOptions() {
return Collections.emptyList();
}
public boolean isClientSideEnabled() {
return getBoolean(ENABLE_CLIENT_SIDE, false);
}
public void setClientSideEnabled(boolean val) {
set(ENABLE_CLIENT_SIDE, val);
}
public int getClientSideVersion() {
return getInt(CLIENT_SIDE_VERSION, -1);
}
public void setClientSideVersion(int val) {
set(CLIENT_SIDE_VERSION, val);
}
public Collection<?> getClientSideForceDisable() {
return (List<?>) get(CLIENT_SIDE_FORCE_DISABLE, List.class, Collections.emptyList());
}
public void setHideButton(boolean val) {
set(HIDE_BUTTON, val);
}
public boolean isHideButton() {
return getBoolean(HIDE_BUTTON, false);
}
public boolean isForcedDisable(String line) {
return getClientSideForceDisable().contains(line);
}
}

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc114.gui;
import com.viaversion.fabric.mc114.ViaFabric;
import com.viaversion.fabric.mc114.util.ProtocolUtils;
import com.viaversion.fabric.common.util.ProtocolUtils;
import com.viaversion.viaversion.api.Via;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;

View File

@ -1,38 +0,0 @@
package com.viaversion.fabric.mc114.handler;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.handler.codec.MessageToMessageDecoder;
import com.viaversion.viaversion.util.PipelineUtil;
import java.lang.reflect.InvocationTargetException;
public class CommonTransformer {
public static final String HANDLER_DECODER_NAME = "via-decoder";
public static final String HANDLER_ENCODER_NAME = "via-encoder";
public static void decompress(ChannelHandlerContext ctx, ByteBuf buf) throws InvocationTargetException {
ChannelHandler handler = ctx.pipeline().get("decompress");
ByteBuf decompressed = handler instanceof MessageToMessageDecoder
? (ByteBuf) PipelineUtil.callDecode((MessageToMessageDecoder<?>) handler, ctx, buf).get(0)
: (ByteBuf) PipelineUtil.callDecode((ByteToMessageDecoder) handler, ctx, buf).get(0);
try {
buf.clear().writeBytes(decompressed);
} finally {
decompressed.release();
}
}
public static void compress(ChannelHandlerContext ctx, ByteBuf buf) throws Exception {
ByteBuf compressed = ctx.alloc().buffer();
try {
PipelineUtil.callEncode((MessageToByteEncoder<?>) ctx.pipeline().get("compress"), ctx, buf, compressed);
buf.clear().writeBytes(compressed);
} finally {
compressed.release();
}
}
}

View File

@ -1,5 +1,6 @@
package com.viaversion.fabric.mc114.handler;
import com.viaversion.fabric.common.handler.CommonTransformer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;

View File

@ -1,5 +1,6 @@
package com.viaversion.fabric.mc114.handler;
import com.viaversion.fabric.common.handler.CommonTransformer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.mixin.address.client;
import com.viaversion.fabric.mc114.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@ -13,7 +13,7 @@ public class MixinConnectScreenThread {
@Redirect(method = "run()V", at = @At(value = "INVOKE",
target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return InetAddress.getByName(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.mixin.address.client;
import com.viaversion.fabric.mc114.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import net.minecraft.network.ServerAddress;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@ -16,7 +16,7 @@ public abstract class MixinServerAddress {
@Redirect(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ServerAddress;resolveSrv(Ljava/lang/String;)[Ljava/lang/String;"))
private static String[] modifySrvAddr(String address) {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return resolveSrv(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.mixin.address.client;
import com.viaversion.fabric.mc114.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import net.minecraft.client.network.MultiplayerServerListPinger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -14,7 +14,7 @@ public class MixinServerPinger {
@Redirect(method = "add", at = @At(value = "INVOKE",
target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return InetAddress.getByName(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.mixin.debug.client;
import com.viaversion.fabric.mc114.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc114.handler.FabricDecodeHandler;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import io.netty.channel.ChannelHandler;

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.mixin.pipeline;
import com.viaversion.fabric.mc114.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc114.handler.FabricDecodeHandler;
import com.viaversion.fabric.mc114.handler.FabricEncodeHandler;
import com.viaversion.viaversion.connection.UserConnectionImpl;

View File

@ -1,11 +1,11 @@
package com.viaversion.fabric.mc114.mixin.pipeline.client;
import com.viaversion.fabric.mc114.ViaFabric;
import com.viaversion.fabric.mc114.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc114.handler.FabricDecodeHandler;
import com.viaversion.fabric.mc114.handler.FabricEncodeHandler;
import com.viaversion.fabric.mc114.handler.clientside.ProtocolDetectionHandler;
import com.viaversion.fabric.mc114.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
import io.netty.channel.Channel;
@ -22,7 +22,7 @@ public class MixinClientConnectionChInit {
private void onInitChannel(Channel channel, CallbackInfo ci) {
if (channel instanceof SocketChannel) {
UserConnection user = new UserConnectionImpl(channel, true);
new ProtocolPipelineImpl(user).add(ViaFabricHostnameProtocol.INSTANCE);
new ProtocolPipelineImpl(user).add(HostnameParserProtocol.INSTANCE);
channel.pipeline()
.addBefore("encoder", CommonTransformer.HANDLER_ENCODER_NAME, new FabricEncodeHandler(user))

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc114.platform;
import com.viaversion.fabric.mc114.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import net.fabricmc.api.EnvType;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.SharedConstants;
@ -11,7 +11,7 @@ import com.viaversion.viaversion.libs.gson.JsonObject;
import java.lang.reflect.Method;
import java.util.Arrays;
public class VRInjector implements ViaInjector {
public class FabricInjector implements ViaInjector {
@Override
public void inject() {
// *looks at Mixins*

View File

@ -1,12 +1,13 @@
package com.viaversion.fabric.mc114.platform;
import com.viaversion.fabric.common.platform.FabricViaAPI;
import com.viaversion.fabric.common.platform.FabricViaConfig;
import com.viaversion.fabric.mc114.ViaFabric;
import com.viaversion.fabric.mc114.commands.NMSCommandSender;
import com.viaversion.fabric.mc114.commands.UserCommandSender;
import com.viaversion.fabric.mc114.util.FutureTaskId;
import com.viaversion.fabric.mc114.util.JLoggerToLog4j;
import com.viaversion.fabric.common.commands.UserCommandSender;
import com.viaversion.fabric.common.util.FutureTaskId;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.viaversion.viaversion.api.configuration.ViaVersionConfig;
import com.viaversion.viaversion.api.platform.PlatformTask;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import net.fabricmc.api.EnvType;
@ -46,17 +47,17 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class VRPlatform implements ViaPlatform<UUID> {
public class FabricPlatform implements ViaPlatform<UUID> {
private final Logger logger = new JLoggerToLog4j(LogManager.getLogger("ViaVersion"));
private final VRViaConfig config;
private final FabricViaConfig config;
private final File dataFolder;
private final ViaAPI<UUID> api;
public VRPlatform() {
public FabricPlatform() {
Path configDir = FabricLoader.getInstance().getConfigDirectory().toPath().resolve("ViaFabric");
config = new VRViaConfig(configDir.resolve("viaversion.yml").toFile());
config = new FabricViaConfig(configDir.resolve("viaversion.yml").toFile());
dataFolder = configDir.toFile();
api = new VRViaAPI();
api = new FabricViaAPI();
}
public static MinecraftServer getServer() {
@ -132,7 +133,7 @@ public class VRPlatform implements ViaPlatform<UUID> {
}
@Override
public PlatformTask runSync(Runnable runnable, long ticks) {
public FutureTaskId runSync(Runnable runnable, long ticks) {
// ViaVersion seems to not need to run delayed tasks on main thread
return new FutureTaskId(
ViaFabric.EVENT_LOOP
@ -142,7 +143,7 @@ public class VRPlatform implements ViaPlatform<UUID> {
}
@Override
public PlatformTask runRepeatingSync(Runnable runnable, long ticks) {
public FutureTaskId runRepeatingSync(Runnable runnable, long ticks) {
// ViaVersion seems to not need to run repeating tasks on main thread
return new FutureTaskId(
ViaFabric.EVENT_LOOP

View File

@ -1,8 +0,0 @@
package com.viaversion.fabric.mc114.platform;
import com.viaversion.viaversion.ViaAPIBase;
import java.util.UUID;
public class VRViaAPI extends ViaAPIBase<UUID> {
}

View File

@ -1,68 +0,0 @@
package com.viaversion.fabric.mc114.platform;
import com.viaversion.viaversion.configuration.AbstractViaConfig;
import java.io.File;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class VRViaConfig extends AbstractViaConfig {
// Based on Sponge ViaVersion
private static List<String> UNSUPPORTED = Arrays.asList("anti-xray-patch", "bungee-ping-interval",
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
"velocity-ping-interval", "velocity-ping-save", "velocity-servers",
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox");
public VRViaConfig(File configFile) {
super(configFile);
// Load config
reloadConfig();
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viaversion/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> config) {
// Nothing Currently
}
@Override
public List<String> getUnsupportedOptions() {
return UNSUPPORTED;
}
@Override
public boolean isAntiXRay() {
return false;
}
@Override
public boolean isNMSPlayerTicking() {
return false;
}
@Override
public boolean is1_12QuickMoveActionFix() {
return false;
}
@Override
public String getBlockConnectionMethod() {
return "packet";
}
@Override
public boolean is1_9HitboxFix() {
return false;
}
@Override
public boolean is1_14HitboxFix() {
return false;
}
}

View File

@ -1,34 +0,0 @@
package com.viaversion.fabric.mc114.protocol;
import com.viaversion.fabric.mc114.ViaFabricAddress;
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.protocol.packet.State;
public class ViaFabricHostnameProtocol extends AbstractSimpleProtocol {
public static final ViaFabricHostnameProtocol INSTANCE = new ViaFabricHostnameProtocol();
@Override
protected void registerPackets() {
registerServerbound(State.HANDSHAKE, 0, 0, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Protocol version
map(Type.STRING, new ValueTransformer<String, String>(Type.STRING) {
@Override
public String transform(PacketWrapper packetWrapper, String s) {
return new ViaFabricAddress().parse(s).realAddress;
}
});
}
});
}
@Override
public boolean isBaseProtocol() {
return true;
}
}

View File

@ -1,9 +1,9 @@
package com.viaversion.fabric.mc114.providers;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.fabric.mc114.ViaFabric;
import com.viaversion.fabric.mc114.ViaFabricAddress;
import com.viaversion.fabric.mc114.service.ProtocolAutoDetector;
import com.viaversion.fabric.mc114.util.ProtocolUtils;
import com.viaversion.fabric.common.util.ProtocolUtils;
import com.google.common.primitives.Ints;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import net.fabricmc.loader.api.FabricLoader;
@ -68,7 +68,7 @@ public class VRVersionProvider extends BaseVersionProvider {
SocketAddress addr = connection.getChannel().remoteAddress();
if (addr instanceof InetSocketAddress) {
int addrVersion = new ViaFabricAddress().parse(((InetSocketAddress) addr).getHostName()).protocol;
int addrVersion = new VFAddressParser().parse(((InetSocketAddress) addr).getHostName()).protocol;
if (addrVersion != 0) serverVer = addrVersion;
try {

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc114.service;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.fabric.mc114.ViaFabric;
import com.viaversion.fabric.mc114.ViaFabricAddress;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@ -114,7 +114,7 @@ public class ProtocolAutoDetector {
public static CompletableFuture<ProtocolVersion> detectVersion(InetSocketAddress address) {
try {
InetSocketAddress real = new InetSocketAddress(InetAddress.getByAddress
(new ViaFabricAddress().parse(address.getHostString()).realAddress,
(new VFAddressParser().parse(address.getHostString()).realAddress,
address.getAddress().getAddress()), address.getPort());
return SERVER_VER.get(real);
} catch (UnknownHostException | ExecutionException e) {

View File

@ -1,68 +0,0 @@
package com.viaversion.fabric.mc114.util;
import java.text.MessageFormat;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class JLoggerToLog4j extends Logger {
private final org.apache.logging.log4j.Logger base;
public JLoggerToLog4j(org.apache.logging.log4j.Logger logger) {
super("logger", null);
this.base = logger;
}
public void log(LogRecord record) {
this.log(record.getLevel(), record.getMessage());
}
public void log(Level level, String msg) {
if (level == Level.FINE) {
this.base.debug(msg);
} else if (level == Level.WARNING) {
this.base.warn(msg);
} else if (level == Level.SEVERE) {
this.base.error(msg);
} else if (level == Level.INFO) {
this.base.info(msg);
} else {
this.base.trace(msg);
}
}
public void log(Level level, String msg, Object param1) {
if (level == Level.FINE) {
this.base.debug(msg, param1);
} else if (level == Level.WARNING) {
this.base.warn(msg, param1);
} else if (level == Level.SEVERE) {
this.base.error(msg, param1);
} else if (level == Level.INFO) {
this.base.info(msg, param1);
} else {
this.base.trace(msg, param1);
}
}
public void log(Level level, String msg, Object[] params) {
log(level, MessageFormat.format(msg, params));
}
public void log(Level level, String msg, Throwable params) {
if (level == Level.FINE) {
this.base.debug(msg, params);
} else if (level == Level.WARNING) {
this.base.warn(msg, params);
} else if (level == Level.SEVERE) {
this.base.error(msg, params);
} else if (level == Level.INFO) {
this.base.info(msg, params);
} else {
this.base.trace(msg, params);
}
}
}

View File

@ -1,60 +0,0 @@
package com.viaversion.fabric.mc114.util;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Arrays;
import java.util.stream.Stream;
public class ProtocolUtils {
public static boolean isSupported(int server, int client) {
return server == client || Via.getManager().getProtocolManager().getProtocolPath(client, server) != null;
}
public static String getProtocolName(int id) {
if (!ProtocolVersion.isRegistered(id)) return Integer.toString(id);
return ProtocolVersion.getProtocol(id).getName();
}
public static boolean isStartOfProtocolText(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
try {
Integer.parseInt(s + '0');
return true;
} catch (NumberFormatException e2) {
return ProtocolVersion.getProtocols().stream()
.map(ProtocolVersion::getName)
.flatMap(str -> Stream.concat(
Arrays.stream(str.split("-")),
Arrays.stream(new String[]{str})
))
.anyMatch(ver -> ver.startsWith(s));
}
}
}
public static Integer parseProtocolId(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException ignored) {
ProtocolVersion closest = ProtocolVersion.getClosest(s);
if (closest == null) return null;
return closest.getVersion();
}
}
public static String[] getProtocolSuggestions(String text) {
return ProtocolVersion.getProtocols().stream()
.map(ProtocolVersion::getName)
.flatMap(str -> Stream.concat(
Arrays.stream(str.split("-")),
Arrays.stream(new String[]{str})
))
.distinct()
.filter(ver -> ver.startsWith(text))
.toArray(String[]::new);
}
}

View File

@ -32,26 +32,21 @@
"com.viaversion.fabric.mc114.ViaFabric"
],
"cotton-client-commands": [
"com.viaversion.fabric.mc114.commands.VRClientCommands"
"com.viaversion.fabric.mc114.commands.VFClientCommands"
],
"modmenu": [
"com.viaversion.fabric.mc114.gui.ModMenuConfig"
]
},
"depends": {
"fabricloader": ">=0.4.0",
"fabric-resource-loader-v0": "*",
"minecraft": "1.14.x",
"viaversion": ">3.0.1"
},
"conflicts": {
"fabric-registry-sync-v0": "*"
},
"recommends": {
"fabric-command-api-v1": "*",
"cotton-client-commands": "*"
},
"icon": "assets/viafabric/textures/logo.png",
"mixins": [
"mixins.viafabric114.address.json",
"mixins.viafabric114.gui.json",

View File

@ -3,7 +3,6 @@ version = rootProject.version
dependencies {
minecraft("com.mojang:minecraft:1.15.2")
mappings("net.fabricmc:yarn:1.15.2+build.17:v2")
modImplementation("net.fabricmc:fabric-loader:0.9.3+build.207")
modImplementation("net.fabricmc.fabric-api:fabric-api:0.19.0+build.325-1.15")
modImplementation("io.github.prospector:modmenu:1.10.2+build.32")

View File

@ -1,17 +1,21 @@
package com.viaversion.fabric.mc115;
import com.viaversion.fabric.mc115.commands.VRCommandHandler;
import com.viaversion.fabric.mc115.config.VRConfig;
import com.viaversion.fabric.mc115.platform.VRInjector;
import com.viaversion.fabric.mc115.platform.VRLoader;
import com.viaversion.fabric.mc115.platform.VRPlatform;
import com.viaversion.fabric.mc115.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.mc115.util.JLoggerToLog4j;
import com.google.common.collect.Range;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.viaversion.fabric.common.config.VFConfig;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.viaversion.fabric.mc115.commands.VRCommandHandler;
import com.viaversion.fabric.mc115.platform.FabricInjector;
import com.viaversion.fabric.mc115.platform.VRLoader;
import com.viaversion.fabric.mc115.platform.FabricPlatform;
import com.viaversion.viaversion.ViaManagerImpl;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.data.MappingDataLoader;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import io.netty.channel.DefaultEventLoop;
import io.netty.channel.EventLoop;
import net.fabricmc.api.ModInitializer;
@ -20,10 +24,6 @@ import net.fabricmc.fabric.api.registry.CommandRegistry;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.server.command.CommandSource;
import org.apache.logging.log4j.LogManager;
import com.viaversion.viaversion.ViaManagerImpl;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.data.MappingDataLoader;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
@ -36,7 +36,7 @@ public class ViaFabric implements ModInitializer {
public static final ExecutorService ASYNC_EXECUTOR;
public static final EventLoop EVENT_LOOP;
public static CompletableFuture<Void> INIT_FUTURE = new CompletableFuture<>();
public static VRConfig config;
public static VFConfig config;
static {
ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ViaFabric-%d").build();
@ -64,16 +64,16 @@ public class ViaFabric implements ModInitializer {
@Override
public void onInitialize() {
Via.init(ViaManagerImpl.builder()
.injector(new VRInjector())
.injector(new FabricInjector())
.loader(new VRLoader())
.commandHandler(new VRCommandHandler())
.platform(new VRPlatform()).build());
.platform(new FabricPlatform()).build());
FabricLoader.getInstance().getModContainer("viabackwards").ifPresent(mod -> MappingDataLoader.enableMappingsCache());
((ViaManagerImpl) Via.getManager()).init();
Via.getManager().getProtocolManager().registerBaseProtocol(ViaFabricHostnameProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
Via.getManager().getProtocolManager().registerBaseProtocol(HostnameParserProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
ProtocolVersion.register(-2, "AUTO");
FabricLoader.getInstance().getEntrypoints("viafabric:via_api_initialized", Runnable.class).forEach(Runnable::run);
@ -89,7 +89,7 @@ public class ViaFabric implements ModInitializer {
}
}
config = new VRConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
config = new VFConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
.resolve("viafabric.yml").toFile());
INIT_FUTURE.complete(null);

View File

@ -1,77 +0,0 @@
package com.viaversion.fabric.mc115;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Locale;
public class ViaFabricAddress {
public int protocol = 0;
public String viaSuffix = null;
public String realAddress = null;
public ViaFabricAddress parse(String address) {
if (address == null) return null;
String[] parts = address.split("\\.");
boolean foundDomain = false;
boolean foundOptions = false;
StringBuilder ourParts = new StringBuilder();
StringBuilder realAddrBuilder = new StringBuilder();
for (int i = parts.length - 1; i >= 0; i--) {
String part = parts[i];
boolean realAddrPart = false;
if (foundDomain) {
if (!foundOptions) {
if (part.startsWith("_")) {
String arg = part.substring(2);
if (part.toLowerCase(Locale.ROOT).startsWith("_v")) {
try {
protocol = Integer.parseInt(arg);
} catch (NumberFormatException e) {
ProtocolVersion closest = ProtocolVersion.getClosest(arg.replace("_", "."));
if (closest != null) {
protocol = closest.getVersion();
}
}
}
} else {
foundOptions = true;
}
}
if (foundOptions) {
realAddrPart = true;
}
} else if (part.equalsIgnoreCase("viafabric")) {
foundDomain = true;
}
if (realAddrPart) {
realAddrBuilder.insert(0, part + ".");
} else {
ourParts.insert(0, part + ".");
}
}
String realAddr = realAddrBuilder.toString().replaceAll("\\.$", "");
String suffix = ourParts.toString().replaceAll("\\.$", "");
if (realAddr.isEmpty()) {
this.realAddress = address;
} else {
this.realAddress = realAddr;
this.viaSuffix = suffix;
}
return this;
}
@Override
public String toString() {
return "ViaFabricAddress{" +
"protocol=" + protocol +
", viaSuffix='" + viaSuffix + '\'' +
", realAddress='" + realAddress + '\'' +
'}';
}
}

View File

@ -1,35 +0,0 @@
package com.viaversion.fabric.mc115.commands;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.connection.UserConnection;
import java.util.UUID;
public class UserCommandSender implements ViaCommandSender {
private UserConnection con;
public UserCommandSender(UserConnection con) {
this.con = con;
}
@Override
public boolean hasPermission(String s) {
return false;
}
@Override
public void sendMessage(String s) {
Via.getPlatform().sendMessage(getUUID(), s);
}
@Override
public UUID getUUID() {
return con.getProtocolInfo().getUuid();
}
@Override
public String getName() {
return con.getProtocolInfo().getUsername();
}
}

View File

@ -5,7 +5,7 @@ import com.mojang.brigadier.CommandDispatcher;
import io.github.cottonmc.clientcommands.ClientCommandPlugin;
import io.github.cottonmc.clientcommands.CottonClientCommandSource;
public class VRClientCommands implements ClientCommandPlugin {
public class VFClientCommands implements ClientCommandPlugin {
@Override
public void registerCommands(CommandDispatcher<CottonClientCommandSource> commandDispatcher) {
commandDispatcher.register(ViaFabric.command("viafabricclient"));

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.commands;
import com.viaversion.fabric.mc115.commands.subs.LeakDetectSubCommand;
import com.viaversion.fabric.common.commands.subs.LeakDetectSubCommand;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.suggestion.Suggestions;

View File

@ -1,48 +0,0 @@
package com.viaversion.fabric.mc115.commands.subs;
import io.netty.util.ResourceLeakDetector;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.command.ViaSubCommand;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LeakDetectSubCommand extends ViaSubCommand {
@Override
public String name() {
return "leakdetect";
}
@Override
public String description() {
return "Sets ResourceLeakDetector level";
}
@Override
public boolean execute(ViaCommandSender viaCommandSender, String[] strings) {
if (strings.length == 1) {
try {
ResourceLeakDetector.Level level = ResourceLeakDetector.Level.valueOf(strings[0]);
ResourceLeakDetector.setLevel(level);
viaCommandSender.sendMessage("Set leak detector level to " + level);
} catch (IllegalArgumentException e) {
viaCommandSender.sendMessage("Invalid level (" + Arrays.toString(ResourceLeakDetector.Level.values()) + ")");
}
} else {
viaCommandSender.sendMessage("Current leak detection level is " + ResourceLeakDetector.getLevel());
}
return true;
}
@Override
public List<String> onTabComplete(ViaCommandSender sender, String[] args) {
if (args.length == 1) {
return Arrays.stream(ResourceLeakDetector.Level.values())
.map(Enum::name)
.filter(it -> it.startsWith(args[0]))
.collect(Collectors.toList());
}
return super.onTabComplete(sender, args);
}
}

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc115.gui;
import com.viaversion.fabric.mc115.ViaFabric;
import com.viaversion.fabric.mc115.util.ProtocolUtils;
import com.viaversion.fabric.common.util.ProtocolUtils;
import com.viaversion.viaversion.api.Via;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;

View File

@ -1,5 +1,6 @@
package com.viaversion.fabric.mc115.handler;
import com.viaversion.fabric.common.handler.CommonTransformer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;

View File

@ -1,5 +1,6 @@
package com.viaversion.fabric.mc115.handler;
import com.viaversion.fabric.common.handler.CommonTransformer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.mixin.address.client;
import com.viaversion.fabric.mc115.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@ -13,7 +13,7 @@ public class MixinConnectScreenThread {
@Redirect(method = "run()V", at = @At(value = "INVOKE",
target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return InetAddress.getByName(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.mixin.address.client;
import com.viaversion.fabric.mc115.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import net.minecraft.network.ServerAddress;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@ -16,7 +16,7 @@ public abstract class MixinServerAddress {
@Redirect(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ServerAddress;resolveSrv(Ljava/lang/String;)[Ljava/lang/String;"))
private static String[] modifySrvAddr(String address) {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return resolveSrv(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.mixin.address.client;
import com.viaversion.fabric.mc115.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import net.minecraft.client.network.MultiplayerServerListPinger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -14,7 +14,7 @@ public class MixinServerPinger {
@Redirect(method = "add", at = @At(value = "INVOKE",
target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return InetAddress.getByName(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.mixin.debug.client;
import com.viaversion.fabric.mc115.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc115.handler.FabricDecodeHandler;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import io.netty.channel.ChannelHandler;

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.mixin.pipeline;
import com.viaversion.fabric.mc115.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc115.handler.FabricDecodeHandler;
import com.viaversion.fabric.mc115.handler.FabricEncodeHandler;
import com.viaversion.viaversion.connection.UserConnectionImpl;

View File

@ -1,11 +1,11 @@
package com.viaversion.fabric.mc115.mixin.pipeline.client;
import com.viaversion.fabric.mc115.ViaFabric;
import com.viaversion.fabric.mc115.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc115.handler.FabricDecodeHandler;
import com.viaversion.fabric.mc115.handler.FabricEncodeHandler;
import com.viaversion.fabric.mc115.handler.clientside.ProtocolDetectionHandler;
import com.viaversion.fabric.mc115.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
import io.netty.channel.Channel;
@ -22,7 +22,7 @@ public class MixinClientConnectionChInit {
private void onInitChannel(Channel channel, CallbackInfo ci) {
if (channel instanceof SocketChannel) {
UserConnection user = new UserConnectionImpl(channel, true);
new ProtocolPipelineImpl(user).add(ViaFabricHostnameProtocol.INSTANCE);
new ProtocolPipelineImpl(user).add(HostnameParserProtocol.INSTANCE);
channel.pipeline()
.addBefore("encoder", CommonTransformer.HANDLER_ENCODER_NAME, new FabricEncodeHandler(user))

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc115.platform;
import com.viaversion.fabric.mc115.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import net.fabricmc.api.EnvType;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.SharedConstants;
@ -11,7 +11,7 @@ import com.viaversion.viaversion.libs.gson.JsonObject;
import java.lang.reflect.Method;
import java.util.Arrays;
public class VRInjector implements ViaInjector {
public class FabricInjector implements ViaInjector {
@Override
public void inject() {
// *looks at Mixins*

View File

@ -1,12 +1,23 @@
package com.viaversion.fabric.mc115.platform;
import com.viaversion.fabric.common.commands.UserCommandSender;
import com.viaversion.fabric.common.platform.FabricViaAPI;
import com.viaversion.fabric.common.platform.FabricViaConfig;
import com.viaversion.fabric.common.util.FutureTaskId;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.viaversion.fabric.mc115.ViaFabric;
import com.viaversion.fabric.mc115.commands.NMSCommandSender;
import com.viaversion.fabric.mc115.commands.UserCommandSender;
import com.viaversion.fabric.mc115.util.FutureTaskId;
import com.viaversion.fabric.mc115.util.JLoggerToLog4j;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.ViaAPI;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.configuration.ConfigurationProvider;
import com.viaversion.viaversion.api.configuration.ViaVersionConfig;
import com.viaversion.viaversion.api.platform.PlatformTask;
import com.viaversion.viaversion.api.platform.ViaPlatform;
import com.viaversion.viaversion.dump.PluginInfo;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import com.viaversion.viaversion.util.GsonUtil;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import net.fabricmc.api.EnvType;
@ -22,16 +33,6 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
import org.apache.logging.log4j.LogManager;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.ViaAPI;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.configuration.ConfigurationProvider;
import com.viaversion.viaversion.api.platform.ViaPlatform;
import com.viaversion.viaversion.dump.PluginInfo;
import com.viaversion.viaversion.util.GsonUtil;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import java.io.File;
import java.nio.file.Path;
@ -46,17 +47,17 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class VRPlatform implements ViaPlatform<UUID> {
public class FabricPlatform implements ViaPlatform<UUID> {
private final Logger logger = new JLoggerToLog4j(LogManager.getLogger("ViaVersion"));
private final VRViaConfig config;
private final FabricViaConfig config;
private final File dataFolder;
private final ViaAPI<UUID> api;
public VRPlatform() {
public FabricPlatform() {
Path configDir = FabricLoader.getInstance().getConfigDirectory().toPath().resolve("ViaFabric");
config = new VRViaConfig(configDir.resolve("viaversion.yml").toFile());
config = new FabricViaConfig(configDir.resolve("viaversion.yml").toFile());
dataFolder = configDir.toFile();
api = new VRViaAPI();
api = new FabricViaAPI();
}
public static MinecraftServer getServer() {
@ -132,7 +133,7 @@ public class VRPlatform implements ViaPlatform<UUID> {
}
@Override
public PlatformTask runSync(Runnable runnable, long ticks) {
public FutureTaskId runSync(Runnable runnable, long ticks) {
// ViaVersion seems to not need to run delayed tasks on main thread
return new FutureTaskId(
ViaFabric.EVENT_LOOP
@ -142,7 +143,7 @@ public class VRPlatform implements ViaPlatform<UUID> {
}
@Override
public PlatformTask runRepeatingSync(Runnable runnable, long ticks) {
public FutureTaskId runRepeatingSync(Runnable runnable, long ticks) {
// ViaVersion seems to not need to run repeating tasks on main thread
return new FutureTaskId(
ViaFabric.EVENT_LOOP

View File

@ -1,8 +0,0 @@
package com.viaversion.fabric.mc115.platform;
import com.viaversion.viaversion.ViaAPIBase;
import java.util.UUID;
public class VRViaAPI extends ViaAPIBase<UUID> {
}

View File

@ -1,68 +0,0 @@
package com.viaversion.fabric.mc115.platform;
import com.viaversion.viaversion.configuration.AbstractViaConfig;
import java.io.File;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class VRViaConfig extends AbstractViaConfig {
// Based on Sponge ViaVersion
private static List<String> UNSUPPORTED = Arrays.asList("anti-xray-patch", "bungee-ping-interval",
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
"velocity-ping-interval", "velocity-ping-save", "velocity-servers",
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox");
public VRViaConfig(File configFile) {
super(configFile);
// Load config
reloadConfig();
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viaversion/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> config) {
// Nothing Currently
}
@Override
public List<String> getUnsupportedOptions() {
return UNSUPPORTED;
}
@Override
public boolean isAntiXRay() {
return false;
}
@Override
public boolean isNMSPlayerTicking() {
return false;
}
@Override
public boolean is1_12QuickMoveActionFix() {
return false;
}
@Override
public String getBlockConnectionMethod() {
return "packet";
}
@Override
public boolean is1_9HitboxFix() {
return false;
}
@Override
public boolean is1_14HitboxFix() {
return false;
}
}

View File

@ -1,34 +0,0 @@
package com.viaversion.fabric.mc115.protocol;
import com.viaversion.fabric.mc115.ViaFabricAddress;
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.protocol.packet.State;
public class ViaFabricHostnameProtocol extends AbstractSimpleProtocol {
public static final ViaFabricHostnameProtocol INSTANCE = new ViaFabricHostnameProtocol();
@Override
protected void registerPackets() {
registerServerbound(State.HANDSHAKE, 0, 0, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Protocol version
map(Type.STRING, new ValueTransformer<String, String>(Type.STRING) {
@Override
public String transform(PacketWrapper packetWrapper, String s) {
return new ViaFabricAddress().parse(s).realAddress;
}
});
}
});
}
@Override
public boolean isBaseProtocol() {
return true;
}
}

View File

@ -1,20 +1,22 @@
package com.viaversion.fabric.mc115.providers;
import com.viaversion.fabric.mc115.ViaFabric;
import com.viaversion.fabric.mc115.ViaFabricAddress;
import com.viaversion.fabric.mc115.service.ProtocolAutoDetector;
import com.viaversion.fabric.mc115.util.ProtocolUtils;
import com.google.common.primitives.Ints;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.fabric.common.util.ProtocolUtils;
import com.viaversion.fabric.mc115.ViaFabric;
import com.viaversion.fabric.mc115.service.ProtocolAutoDetector;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.network.ClientConnection;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.exception.CancelException;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.protocols.base.*;
import com.viaversion.viaversion.protocols.base.BaseProtocol1_16;
import com.viaversion.viaversion.protocols.base.BaseProtocol1_7;
import com.viaversion.viaversion.protocols.base.BaseVersionProvider;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.network.ClientConnection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@ -68,7 +70,7 @@ public class VRVersionProvider extends BaseVersionProvider {
SocketAddress addr = connection.getChannel().remoteAddress();
if (addr instanceof InetSocketAddress) {
int addrVersion = new ViaFabricAddress().parse(((InetSocketAddress) addr).getHostName()).protocol;
int addrVersion = new VFAddressParser().parse(((InetSocketAddress) addr).getHostName()).protocol;
if (addrVersion != 0) serverVer = addrVersion;
try {

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc115.service;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.fabric.mc115.ViaFabric;
import com.viaversion.fabric.mc115.ViaFabricAddress;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@ -114,7 +114,7 @@ public class ProtocolAutoDetector {
public static CompletableFuture<ProtocolVersion> detectVersion(InetSocketAddress address) {
try {
InetSocketAddress real = new InetSocketAddress(InetAddress.getByAddress
(new ViaFabricAddress().parse(address.getHostString()).realAddress,
(new VFAddressParser().parse(address.getHostString()).realAddress,
address.getAddress().getAddress()), address.getPort());
return SERVER_VER.get(real);
} catch (UnknownHostException | ExecutionException e) {

View File

@ -1,23 +0,0 @@
package com.viaversion.fabric.mc115.util;
import com.viaversion.viaversion.api.platform.PlatformTask;
import java.util.concurrent.Future;
public class FutureTaskId implements PlatformTask<Future<?>> {
private final Future<?> object;
public FutureTaskId(Future<?> object) {
this.object = object;
}
@Override
public Future<?> getObject() {
return object;
}
@Override
public void cancel() {
object.cancel(false);
}
}

View File

@ -1,68 +0,0 @@
package com.viaversion.fabric.mc115.util;
import java.text.MessageFormat;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class JLoggerToLog4j extends Logger {
private final org.apache.logging.log4j.Logger base;
public JLoggerToLog4j(org.apache.logging.log4j.Logger logger) {
super("logger", null);
this.base = logger;
}
public void log(LogRecord record) {
this.log(record.getLevel(), record.getMessage());
}
public void log(Level level, String msg) {
if (level == Level.FINE) {
this.base.debug(msg);
} else if (level == Level.WARNING) {
this.base.warn(msg);
} else if (level == Level.SEVERE) {
this.base.error(msg);
} else if (level == Level.INFO) {
this.base.info(msg);
} else {
this.base.trace(msg);
}
}
public void log(Level level, String msg, Object param1) {
if (level == Level.FINE) {
this.base.debug(msg, param1);
} else if (level == Level.WARNING) {
this.base.warn(msg, param1);
} else if (level == Level.SEVERE) {
this.base.error(msg, param1);
} else if (level == Level.INFO) {
this.base.info(msg, param1);
} else {
this.base.trace(msg, param1);
}
}
public void log(Level level, String msg, Object[] params) {
log(level, MessageFormat.format(msg, params));
}
public void log(Level level, String msg, Throwable params) {
if (level == Level.FINE) {
this.base.debug(msg, params);
} else if (level == Level.WARNING) {
this.base.warn(msg, params);
} else if (level == Level.SEVERE) {
this.base.error(msg, params);
} else if (level == Level.INFO) {
this.base.info(msg, params);
} else {
this.base.trace(msg, params);
}
}
}

View File

@ -1,60 +0,0 @@
package com.viaversion.fabric.mc115.util;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Arrays;
import java.util.stream.Stream;
public class ProtocolUtils {
public static boolean isSupported(int server, int client) {
return server == client || Via.getManager().getProtocolManager().getProtocolPath(client, server) != null;
}
public static String getProtocolName(int id) {
if (!ProtocolVersion.isRegistered(id)) return Integer.toString(id);
return ProtocolVersion.getProtocol(id).getName();
}
public static boolean isStartOfProtocolText(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
try {
Integer.parseInt(s + '0');
return true;
} catch (NumberFormatException e2) {
return ProtocolVersion.getProtocols().stream()
.map(ProtocolVersion::getName)
.flatMap(str -> Stream.concat(
Arrays.stream(str.split("-")),
Arrays.stream(new String[]{str})
))
.anyMatch(ver -> ver.startsWith(s));
}
}
}
public static Integer parseProtocolId(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException ignored) {
ProtocolVersion closest = ProtocolVersion.getClosest(s);
if (closest == null) return null;
return closest.getVersion();
}
}
public static String[] getProtocolSuggestions(String text) {
return ProtocolVersion.getProtocols().stream()
.map(ProtocolVersion::getName)
.flatMap(str -> Stream.concat(
Arrays.stream(str.split("-")),
Arrays.stream(new String[]{str})
))
.distinct()
.filter(ver -> ver.startsWith(text))
.toArray(String[]::new);
}
}

View File

@ -32,26 +32,21 @@
"com.viaversion.fabric.mc115.ViaFabric"
],
"cotton-client-commands": [
"com.viaversion.fabric.mc115.commands.VRClientCommands"
"com.viaversion.fabric.mc115.commands.VFClientCommands"
],
"modmenu": [
"com.viaversion.fabric.mc115.gui.ModMenuConfig"
]
},
"depends": {
"fabricloader": ">=0.4.0",
"fabric-resource-loader-v0": "*",
"minecraft": "1.15.x",
"viaversion": ">3.0.1"
},
"conflicts": {
"fabric-registry-sync-v0": "*"
},
"recommends": {
"fabric-command-api-v1": "*",
"cotton-client-commands": "*"
},
"icon": "assets/viafabric/textures/logo.png",
"mixins": [
"mixins.viafabric115.address.json",
"mixins.viafabric115.gui.json",

View File

@ -3,7 +3,6 @@ version = rootProject.version
dependencies {
minecraft("com.mojang:minecraft:1.16.5")
mappings("net.fabricmc:yarn:1.16.5+build.6:v2")
modImplementation("net.fabricmc:fabric-loader:0.11.3")
modImplementation("net.fabricmc.fabric-api:fabric-api:0.32.5+1.16")
modImplementation("com.terraformersmc:modmenu:1.16.9")

View File

@ -1,12 +1,12 @@
package com.viaversion.fabric.mc116;
import com.viaversion.fabric.common.config.VFConfig;
import com.viaversion.fabric.mc116.commands.VRCommandHandler;
import com.viaversion.fabric.mc116.config.VRConfig;
import com.viaversion.fabric.mc116.platform.VRInjector;
import com.viaversion.fabric.mc116.platform.FabricInjector;
import com.viaversion.fabric.mc116.platform.VRLoader;
import com.viaversion.fabric.mc116.platform.VRPlatform;
import com.viaversion.fabric.mc116.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.mc116.util.JLoggerToLog4j;
import com.viaversion.fabric.mc116.platform.FabricPlatform;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.google.common.collect.Range;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.brigadier.arguments.StringArgumentType;
@ -38,7 +38,7 @@ public class ViaFabric implements ModInitializer {
public static final ExecutorService ASYNC_EXECUTOR;
public static final EventLoop EVENT_LOOP;
public static CompletableFuture<Void> INIT_FUTURE = new CompletableFuture<>();
public static VRConfig config;
public static VFConfig config;
static {
ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ViaFabric-%d").build();
@ -66,16 +66,16 @@ public class ViaFabric implements ModInitializer {
@Override
public void onInitialize() {
Via.init(ViaManagerImpl.builder()
.injector(new VRInjector())
.injector(new FabricInjector())
.loader(new VRLoader())
.commandHandler(new VRCommandHandler())
.platform(new VRPlatform()).build());
.platform(new FabricPlatform()).build());
FabricLoader.getInstance().getModContainer("viabackwards").ifPresent(mod -> MappingDataLoader.enableMappingsCache());
((ViaManagerImpl) Via.getManager()).init();
Via.getManager().getProtocolManager().registerBaseProtocol(ViaFabricHostnameProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
Via.getManager().getProtocolManager().registerBaseProtocol(HostnameParserProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
ProtocolVersion.register(-2, "AUTO");
FabricLoader.getInstance().getEntrypoints("viafabric:via_api_initialized", Runnable.class).forEach(Runnable::run);
@ -91,7 +91,7 @@ public class ViaFabric implements ModInitializer {
}
}
config = new VRConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
config = new VFConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
.resolve("viafabric.yml").toFile());
INIT_FUTURE.complete(null);

View File

@ -1,77 +0,0 @@
package com.viaversion.fabric.mc116;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Locale;
public class ViaFabricAddress {
public int protocol = 0;
public String viaSuffix = null;
public String realAddress = null;
public ViaFabricAddress parse(String address) {
if (address == null) return null;
String[] parts = address.split("\\.");
boolean foundDomain = false;
boolean foundOptions = false;
StringBuilder ourParts = new StringBuilder();
StringBuilder realAddrBuilder = new StringBuilder();
for (int i = parts.length - 1; i >= 0; i--) {
String part = parts[i];
boolean realAddrPart = false;
if (foundDomain) {
if (!foundOptions) {
if (part.startsWith("_")) {
String arg = part.substring(2);
if (part.toLowerCase(Locale.ROOT).startsWith("_v")) {
try {
protocol = Integer.parseInt(arg);
} catch (NumberFormatException e) {
ProtocolVersion closest = ProtocolVersion.getClosest(arg.replace("_", "."));
if (closest != null) {
protocol = closest.getVersion();
}
}
}
} else {
foundOptions = true;
}
}
if (foundOptions) {
realAddrPart = true;
}
} else if (part.equalsIgnoreCase("viafabric")) {
foundDomain = true;
}
if (realAddrPart) {
realAddrBuilder.insert(0, part + ".");
} else {
ourParts.insert(0, part + ".");
}
}
String realAddr = realAddrBuilder.toString().replaceAll("\\.$", "");
String suffix = ourParts.toString().replaceAll("\\.$", "");
if (realAddr.isEmpty()) {
this.realAddress = address;
} else {
this.realAddress = realAddr;
this.viaSuffix = suffix;
}
return this;
}
@Override
public String toString() {
return "ViaFabricAddress{" +
"protocol=" + protocol +
", viaSuffix='" + viaSuffix + '\'' +
", realAddress='" + realAddress + '\'' +
'}';
}
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.commands;
import com.viaversion.fabric.mc116.platform.VRPlatform;
import com.viaversion.fabric.mc116.platform.FabricPlatform;
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
import net.minecraft.command.CommandSource;
import net.minecraft.entity.Entity;
@ -28,9 +28,9 @@ public class NMSCommandSender implements ViaCommandSender {
@Override
public void sendMessage(String s) {
if (source instanceof ServerCommandSource) {
((ServerCommandSource) source).sendFeedback(Text.Serializer.fromJson(VRPlatform.legacyToJson(s)), false);
((ServerCommandSource) source).sendFeedback(Text.Serializer.fromJson(FabricPlatform.legacyToJson(s)), false);
} else if (source instanceof FabricClientCommandSource) {
((FabricClientCommandSource) source).sendFeedback(Text.Serializer.fromJson(VRPlatform.legacyToJson(s)));
((FabricClientCommandSource) source).sendFeedback(Text.Serializer.fromJson(FabricPlatform.legacyToJson(s)));
}
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.commands;
import com.viaversion.fabric.mc116.commands.subs.LeakDetectSubCommand;
import com.viaversion.fabric.common.commands.subs.LeakDetectSubCommand;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.suggestion.Suggestions;

View File

@ -1,48 +0,0 @@
package com.viaversion.fabric.mc116.commands.subs;
import io.netty.util.ResourceLeakDetector;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.command.ViaSubCommand;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LeakDetectSubCommand extends ViaSubCommand {
@Override
public String name() {
return "leakdetect";
}
@Override
public String description() {
return "Sets ResourceLeakDetector level";
}
@Override
public boolean execute(ViaCommandSender viaCommandSender, String[] strings) {
if (strings.length == 1) {
try {
ResourceLeakDetector.Level level = ResourceLeakDetector.Level.valueOf(strings[0]);
ResourceLeakDetector.setLevel(level);
viaCommandSender.sendMessage("Set leak detector level to " + level);
} catch (IllegalArgumentException e) {
viaCommandSender.sendMessage("Invalid level (" + Arrays.toString(ResourceLeakDetector.Level.values()) + ")");
}
} else {
viaCommandSender.sendMessage("Current leak detection level is " + ResourceLeakDetector.getLevel());
}
return true;
}
@Override
public List<String> onTabComplete(ViaCommandSender sender, String[] args) {
if (args.length == 1) {
return Arrays.stream(ResourceLeakDetector.Level.values())
.map(Enum::name)
.filter(it -> it.startsWith(args[0]))
.collect(Collectors.toList());
}
return super.onTabComplete(sender, args);
}
}

View File

@ -1,68 +0,0 @@
package com.viaversion.fabric.mc116.config;
import com.viaversion.viaversion.util.Config;
import java.io.File;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class VRConfig extends Config {
public static final String ENABLE_CLIENT_SIDE = "enable-client-side";
public static final String CLIENT_SIDE_VERSION = "client-side-version";
public static final String CLIENT_SIDE_FORCE_DISABLE = "client-side-force-disable";
public static final String HIDE_BUTTON = "hide-button";
public VRConfig(File configFile) {
super(configFile);
reloadConfig();
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viafabric/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> map) {
}
@Override
public List<String> getUnsupportedOptions() {
return Collections.emptyList();
}
public boolean isClientSideEnabled() {
return getBoolean(ENABLE_CLIENT_SIDE, false);
}
public void setClientSideEnabled(boolean val) {
set(ENABLE_CLIENT_SIDE, val);
}
public int getClientSideVersion() {
return getInt(CLIENT_SIDE_VERSION, -1);
}
public void setClientSideVersion(int val) {
set(CLIENT_SIDE_VERSION, val);
}
public Collection<?> getClientSideForceDisable() {
return (List<?>) get(CLIENT_SIDE_FORCE_DISABLE, List.class, Collections.emptyList());
}
public void setHideButton(boolean val) {
set(HIDE_BUTTON, val);
}
public boolean isHideButton() {
return getBoolean(HIDE_BUTTON, false);
}
public boolean isForcedDisable(String line) {
return getClientSideForceDisable().contains(line);
}
}

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc116.gui;
import com.viaversion.fabric.mc116.ViaFabric;
import com.viaversion.fabric.mc116.util.ProtocolUtils;
import com.viaversion.fabric.common.util.ProtocolUtils;
import com.viaversion.viaversion.api.Via;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;

View File

@ -1,38 +0,0 @@
package com.viaversion.fabric.mc116.handler;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.handler.codec.MessageToMessageDecoder;
import com.viaversion.viaversion.util.PipelineUtil;
import java.lang.reflect.InvocationTargetException;
public class CommonTransformer {
public static final String HANDLER_DECODER_NAME = "via-decoder";
public static final String HANDLER_ENCODER_NAME = "via-encoder";
public static void decompress(ChannelHandlerContext ctx, ByteBuf buf) throws InvocationTargetException {
ChannelHandler handler = ctx.pipeline().get("decompress");
ByteBuf decompressed = handler instanceof MessageToMessageDecoder
? (ByteBuf) PipelineUtil.callDecode((MessageToMessageDecoder<?>) handler, ctx, buf).get(0)
: (ByteBuf) PipelineUtil.callDecode((ByteToMessageDecoder) handler, ctx, buf).get(0);
try {
buf.clear().writeBytes(decompressed);
} finally {
decompressed.release();
}
}
public static void compress(ChannelHandlerContext ctx, ByteBuf buf) throws Exception {
ByteBuf compressed = ctx.alloc().buffer();
try {
PipelineUtil.callEncode((MessageToByteEncoder<?>) ctx.pipeline().get("compress"), ctx, buf, compressed);
buf.clear().writeBytes(compressed);
} finally {
compressed.release();
}
}
}

View File

@ -1,5 +1,6 @@
package com.viaversion.fabric.mc116.handler;
import com.viaversion.fabric.common.handler.CommonTransformer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;

View File

@ -1,5 +1,6 @@
package com.viaversion.fabric.mc116.handler;
import com.viaversion.fabric.common.handler.CommonTransformer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.mixin.address.client;
import com.viaversion.fabric.mc116.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@ -13,7 +13,7 @@ public class MixinConnectScreenThread {
@Redirect(method = "run()V", at = @At(value = "INVOKE",
target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return InetAddress.getByName(address);
}

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc116.mixin.address.client;
import com.viaversion.fabric.mc116.ViaFabricAddress;
import com.mojang.datafixers.util.Pair;
import com.viaversion.fabric.common.VFAddressParser;
import net.minecraft.network.ServerAddress;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@ -17,7 +17,7 @@ public abstract class MixinServerAddress {
@Redirect(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ServerAddress;resolveServer(Ljava/lang/String;)Lcom/mojang/datafixers/util/Pair;"))
private static Pair<String, Integer> modifySrvAddr(String address) {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return resolveServer(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.mixin.address.client;
import com.viaversion.fabric.mc116.ViaFabricAddress;
import com.viaversion.fabric.common.VFAddressParser;
import net.minecraft.client.network.MultiplayerServerListPinger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -14,7 +14,7 @@ public class MixinServerPinger {
@Redirect(method = "add", at = @At(value = "INVOKE",
target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
ViaFabricAddress viaAddr = new ViaFabricAddress().parse(address);
VFAddressParser viaAddr = new VFAddressParser().parse(address);
if (viaAddr.viaSuffix == null) {
return InetAddress.getByName(address);
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.mixin.debug.client;
import com.viaversion.fabric.mc116.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc116.handler.FabricDecodeHandler;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import io.netty.channel.ChannelHandler;

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.mixin.pipeline;
import com.viaversion.fabric.mc116.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc116.handler.FabricDecodeHandler;
import com.viaversion.fabric.mc116.handler.FabricEncodeHandler;
import com.viaversion.viaversion.connection.UserConnectionImpl;

View File

@ -1,11 +1,11 @@
package com.viaversion.fabric.mc116.mixin.pipeline.client;
import com.viaversion.fabric.mc116.ViaFabric;
import com.viaversion.fabric.mc116.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import com.viaversion.fabric.mc116.handler.FabricDecodeHandler;
import com.viaversion.fabric.mc116.handler.FabricEncodeHandler;
import com.viaversion.fabric.mc116.handler.clientside.ProtocolDetectionHandler;
import com.viaversion.fabric.mc116.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
import io.netty.channel.Channel;
@ -22,7 +22,7 @@ public class MixinClientConnectionChInit {
private void onInitChannel(Channel channel, CallbackInfo ci) {
if (channel instanceof SocketChannel) {
UserConnection user = new UserConnectionImpl(channel, true);
new ProtocolPipelineImpl(user).add(ViaFabricHostnameProtocol.INSTANCE);
new ProtocolPipelineImpl(user).add(HostnameParserProtocol.INSTANCE);
channel.pipeline()
.addBefore("encoder", CommonTransformer.HANDLER_ENCODER_NAME, new FabricEncodeHandler(user))

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc116.platform;
import com.viaversion.fabric.mc116.handler.CommonTransformer;
import com.viaversion.fabric.common.handler.CommonTransformer;
import net.fabricmc.api.EnvType;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.SharedConstants;
@ -11,7 +11,7 @@ import com.viaversion.viaversion.libs.gson.JsonObject;
import java.lang.reflect.Method;
import java.util.Arrays;
public class VRInjector implements ViaInjector {
public class FabricInjector implements ViaInjector {
@Override
public void inject() {
// *looks at Mixins*

View File

@ -1,12 +1,13 @@
package com.viaversion.fabric.mc116.platform;
import com.viaversion.fabric.common.platform.FabricViaAPI;
import com.viaversion.fabric.common.platform.FabricViaConfig;
import com.viaversion.fabric.common.util.FutureTaskId;
import com.viaversion.fabric.mc116.ViaFabric;
import com.viaversion.fabric.mc116.commands.NMSCommandSender;
import com.viaversion.fabric.mc116.commands.UserCommandSender;
import com.viaversion.fabric.mc116.util.FutureTaskId;
import com.viaversion.fabric.mc116.util.JLoggerToLog4j;
import com.viaversion.fabric.common.commands.UserCommandSender;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.viaversion.viaversion.api.configuration.ViaVersionConfig;
import com.viaversion.viaversion.api.platform.PlatformTask;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import net.fabricmc.api.EnvType;
@ -45,17 +46,17 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class VRPlatform implements ViaPlatform<UUID> {
public class FabricPlatform implements ViaPlatform<UUID> {
private final Logger logger = new JLoggerToLog4j(LogManager.getLogger("ViaVersion"));
private final VRViaConfig config;
private final FabricViaConfig config;
private final File dataFolder;
private final ViaAPI<UUID> api;
public VRPlatform() {
public FabricPlatform() {
Path configDir = FabricLoader.getInstance().getConfigDirectory().toPath().resolve("ViaFabric");
config = new VRViaConfig(configDir.resolve("viaversion.yml").toFile());
config = new FabricViaConfig(configDir.resolve("viaversion.yml").toFile());
dataFolder = configDir.toFile();
api = new VRViaAPI();
api = new FabricViaAPI();
}
public static MinecraftServer getServer() {
@ -131,7 +132,7 @@ public class VRPlatform implements ViaPlatform<UUID> {
}
@Override
public PlatformTask runSync(Runnable runnable, long ticks) {
public FutureTaskId runSync(Runnable runnable, long ticks) {
// ViaVersion seems to not need to run delayed tasks on main thread
return new FutureTaskId(
ViaFabric.EVENT_LOOP
@ -141,7 +142,7 @@ public class VRPlatform implements ViaPlatform<UUID> {
}
@Override
public PlatformTask runRepeatingSync(Runnable runnable, long ticks) {
public FutureTaskId runRepeatingSync(Runnable runnable, long ticks) {
// ViaVersion seems to not need to run repeating tasks on main thread
return new FutureTaskId(
ViaFabric.EVENT_LOOP

View File

@ -1,8 +0,0 @@
package com.viaversion.fabric.mc116.platform;
import com.viaversion.viaversion.ViaAPIBase;
import java.util.UUID;
public class VRViaAPI extends ViaAPIBase<UUID> {
}

View File

@ -1,34 +0,0 @@
package com.viaversion.fabric.mc116.protocol;
import com.viaversion.fabric.mc116.ViaFabricAddress;
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.protocol.packet.State;
public class ViaFabricHostnameProtocol extends AbstractSimpleProtocol {
public static final ViaFabricHostnameProtocol INSTANCE = new ViaFabricHostnameProtocol();
@Override
protected void registerPackets() {
registerServerbound(State.HANDSHAKE, 0, 0, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Protocol version
map(Type.STRING, new ValueTransformer<String, String>(Type.STRING) {
@Override
public String transform(PacketWrapper packetWrapper, String s) {
return new ViaFabricAddress().parse(s).realAddress;
}
});
}
});
}
@Override
public boolean isBaseProtocol() {
return true;
}
}

View File

@ -1,9 +1,9 @@
package com.viaversion.fabric.mc116.providers;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.fabric.mc116.ViaFabric;
import com.viaversion.fabric.mc116.ViaFabricAddress;
import com.viaversion.fabric.mc116.service.ProtocolAutoDetector;
import com.viaversion.fabric.mc116.util.ProtocolUtils;
import com.viaversion.fabric.common.util.ProtocolUtils;
import com.google.common.primitives.Ints;
import com.viaversion.viaversion.api.connection.ProtocolInfo;
import net.fabricmc.loader.api.FabricLoader;
@ -68,7 +68,7 @@ public class VRVersionProvider extends BaseVersionProvider {
SocketAddress addr = connection.getChannel().remoteAddress();
if (addr instanceof InetSocketAddress) {
int addrVersion = new ViaFabricAddress().parse(((InetSocketAddress) addr).getHostName()).protocol;
int addrVersion = new VFAddressParser().parse(((InetSocketAddress) addr).getHostName()).protocol;
if (addrVersion != 0) serverVer = addrVersion;
try {

View File

@ -1,7 +1,7 @@
package com.viaversion.fabric.mc116.service;
import com.viaversion.fabric.common.VFAddressParser;
import com.viaversion.fabric.mc116.ViaFabric;
import com.viaversion.fabric.mc116.ViaFabricAddress;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@ -114,7 +114,7 @@ public class ProtocolAutoDetector {
public static CompletableFuture<ProtocolVersion> detectVersion(InetSocketAddress address) {
try {
InetSocketAddress real = new InetSocketAddress(InetAddress.getByAddress
(new ViaFabricAddress().parse(address.getHostString()).realAddress,
(new VFAddressParser().parse(address.getHostString()).realAddress,
address.getAddress().getAddress()), address.getPort());
return SERVER_VER.get(real);
} catch (UnknownHostException | ExecutionException e) {

View File

@ -1,23 +0,0 @@
package com.viaversion.fabric.mc116.util;
import com.viaversion.viaversion.api.platform.PlatformTask;
import java.util.concurrent.Future;
public class FutureTaskId implements PlatformTask<Future<?>> {
private final Future<?> object;
public FutureTaskId(Future<?> object) {
this.object = object;
}
@Override
public Future<?> getObject() {
return object;
}
@Override
public void cancel() {
object.cancel(false);
}
}

View File

@ -36,18 +36,13 @@
]
},
"depends": {
"fabricloader": ">=0.4.0",
"fabric-resource-loader-v0": "*",
"minecraft": "1.16.x",
"viaversion": ">3.0.1"
},
"conflicts": {
"fabric-registry-sync-v0": "*"
},
"recommends": {
"fabric-command-api-v1": "*"
},
"icon": "assets/viafabric/textures/logo.png",
"mixins": [
"mixins.viafabric116.address.json",
"mixins.viafabric116.gui.json",

View File

@ -3,7 +3,6 @@ version = rootProject.version
dependencies {
minecraft("com.mojang:minecraft:21w15a")
mappings("net.fabricmc:yarn:21w15a+build.16:v2")
modImplementation("net.fabricmc:fabric-loader:0.10.5+build.213")
modImplementation("net.fabricmc.fabric-api:fabric-api:0.33.0+1.17")
modImplementation("com.terraformersmc:modmenu:1.16.9")

View File

@ -1,12 +1,12 @@
package com.viaversion.fabric.mc117;
import com.viaversion.fabric.common.config.VFConfig;
import com.viaversion.fabric.mc117.commands.VRCommandHandler;
import com.viaversion.fabric.mc117.config.VRConfig;
import com.viaversion.fabric.mc117.platform.VRInjector;
import com.viaversion.fabric.mc117.platform.FabricInjector;
import com.viaversion.fabric.mc117.platform.VRLoader;
import com.viaversion.fabric.mc117.platform.VRPlatform;
import com.viaversion.fabric.mc117.protocol.ViaFabricHostnameProtocol;
import com.viaversion.fabric.mc117.util.JLoggerToLog4j;
import com.viaversion.fabric.mc117.platform.FabricPlatform;
import com.viaversion.fabric.common.protocol.HostnameParserProtocol;
import com.viaversion.fabric.common.util.JLoggerToLog4j;
import com.google.common.collect.Range;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.brigadier.arguments.StringArgumentType;
@ -38,7 +38,7 @@ public class ViaFabric implements ModInitializer {
public static final ExecutorService ASYNC_EXECUTOR;
public static final EventLoop EVENT_LOOP;
public static CompletableFuture<Void> INIT_FUTURE = new CompletableFuture<>();
public static VRConfig config;
public static VFConfig config;
static {
ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ViaFabric-%d").build();
@ -66,16 +66,16 @@ public class ViaFabric implements ModInitializer {
@Override
public void onInitialize() {
Via.init(ViaManagerImpl.builder()
.injector(new VRInjector())
.injector(new FabricInjector())
.loader(new VRLoader())
.commandHandler(new VRCommandHandler())
.platform(new VRPlatform()).build());
.platform(new FabricPlatform()).build());
FabricLoader.getInstance().getModContainer("viabackwards").ifPresent(mod -> MappingDataLoader.enableMappingsCache());
((ViaManagerImpl) Via.getManager()).init();
Via.getManager().getProtocolManager().registerBaseProtocol(ViaFabricHostnameProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
Via.getManager().getProtocolManager().registerBaseProtocol(HostnameParserProtocol.INSTANCE, Range.lessThan(Integer.MIN_VALUE));
ProtocolVersion.register(-2, "AUTO");
FabricLoader.getInstance().getEntrypoints("viafabric:via_api_initialized", Runnable.class).forEach(Runnable::run);
@ -91,7 +91,7 @@ public class ViaFabric implements ModInitializer {
}
}
config = new VRConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
config = new VFConfig(FabricLoader.getInstance().getConfigDir().resolve("ViaFabric")
.resolve("viafabric.yml").toFile());
INIT_FUTURE.complete(null);

View File

@ -1,77 +0,0 @@
package com.viaversion.fabric.mc117;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.util.Locale;
public class ViaFabricAddress {
public int protocol = 0;
public String viaSuffix = null;
public String realAddress = null;
public ViaFabricAddress parse(String address) {
if (address == null) return null;
String[] parts = address.split("\\.");
boolean foundDomain = false;
boolean foundOptions = false;
StringBuilder ourParts = new StringBuilder();
StringBuilder realAddrBuilder = new StringBuilder();
for (int i = parts.length - 1; i >= 0; i--) {
String part = parts[i];
boolean realAddrPart = false;
if (foundDomain) {
if (!foundOptions) {
if (part.startsWith("_")) {
String arg = part.substring(2);
if (part.toLowerCase(Locale.ROOT).startsWith("_v")) {
try {
protocol = Integer.parseInt(arg);
} catch (NumberFormatException e) {
ProtocolVersion closest = ProtocolVersion.getClosest(arg.replace("_", "."));
if (closest != null) {
protocol = closest.getVersion();
}
}
}
} else {
foundOptions = true;
}
}
if (foundOptions) {
realAddrPart = true;
}
} else if (part.equalsIgnoreCase("viafabric")) {
foundDomain = true;
}
if (realAddrPart) {
realAddrBuilder.insert(0, part + ".");
} else {
ourParts.insert(0, part + ".");
}
}
String realAddr = realAddrBuilder.toString().replaceAll("\\.$", "");
String suffix = ourParts.toString().replaceAll("\\.$", "");
if (realAddr.isEmpty()) {
this.realAddress = address;
} else {
this.realAddress = realAddr;
this.viaSuffix = suffix;
}
return this;
}
@Override
public String toString() {
return "ViaFabricAddress{" +
"protocol=" + protocol +
", viaSuffix='" + viaSuffix + '\'' +
", realAddress='" + realAddress + '\'' +
'}';
}
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc117.commands;
import com.viaversion.fabric.mc117.platform.VRPlatform;
import com.viaversion.fabric.mc117.platform.FabricPlatform;
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
import net.minecraft.command.CommandSource;
import net.minecraft.entity.Entity;
@ -26,9 +26,9 @@ public class NMSCommandSender implements ViaCommandSender {
@Override
public void sendMessage(String s) {
if (source instanceof ServerCommandSource) {
((ServerCommandSource) source).sendFeedback(Text.Serializer.fromJson(VRPlatform.legacyToJson(s)), false);
((ServerCommandSource) source).sendFeedback(Text.Serializer.fromJson(FabricPlatform.legacyToJson(s)), false);
} else if (source instanceof FabricClientCommandSource) {
((FabricClientCommandSource) source).sendFeedback(Text.Serializer.fromJson(VRPlatform.legacyToJson(s)));
((FabricClientCommandSource) source).sendFeedback(Text.Serializer.fromJson(FabricPlatform.legacyToJson(s)));
}
}

View File

@ -1,35 +0,0 @@
package com.viaversion.fabric.mc117.commands;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.connection.UserConnection;
import java.util.UUID;
public class UserCommandSender implements ViaCommandSender {
private UserConnection con;
public UserCommandSender(UserConnection con) {
this.con = con;
}
@Override
public boolean hasPermission(String s) {
return false;
}
@Override
public void sendMessage(String s) {
Via.getPlatform().sendMessage(getUUID(), s);
}
@Override
public UUID getUUID() {
return con.getProtocolInfo().getUuid();
}
@Override
public String getName() {
return con.getProtocolInfo().getUsername();
}
}

View File

@ -1,6 +1,6 @@
package com.viaversion.fabric.mc117.commands;
import com.viaversion.fabric.mc117.commands.subs.LeakDetectSubCommand;
import com.viaversion.fabric.common.commands.subs.LeakDetectSubCommand;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.suggestion.Suggestions;

View File

@ -1,48 +0,0 @@
package com.viaversion.fabric.mc117.commands.subs;
import io.netty.util.ResourceLeakDetector;
import com.viaversion.viaversion.api.command.ViaCommandSender;
import com.viaversion.viaversion.api.command.ViaSubCommand;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LeakDetectSubCommand extends ViaSubCommand {
@Override
public String name() {
return "leakdetect";
}
@Override
public String description() {
return "Sets ResourceLeakDetector level";
}
@Override
public boolean execute(ViaCommandSender viaCommandSender, String[] strings) {
if (strings.length == 1) {
try {
ResourceLeakDetector.Level level = ResourceLeakDetector.Level.valueOf(strings[0]);
ResourceLeakDetector.setLevel(level);
viaCommandSender.sendMessage("Set leak detector level to " + level);
} catch (IllegalArgumentException e) {
viaCommandSender.sendMessage("Invalid level (" + Arrays.toString(ResourceLeakDetector.Level.values()) + ")");
}
} else {
viaCommandSender.sendMessage("Current leak detection level is " + ResourceLeakDetector.getLevel());
}
return true;
}
@Override
public List<String> onTabComplete(ViaCommandSender sender, String[] args) {
if (args.length == 1) {
return Arrays.stream(ResourceLeakDetector.Level.values())
.map(Enum::name)
.filter(it -> it.startsWith(args[0]))
.collect(Collectors.toList());
}
return super.onTabComplete(sender, args);
}
}

Some files were not shown because too many files have changed in this diff Show More