From 35b22e17f8af65cd01c57c66e9583df2b92f7acd Mon Sep 17 00:00:00 2001 From: creeper123123321 Date: Sat, 5 Jan 2019 19:30:41 -0200 Subject: [PATCH] Ported to fabric --- build.gradle | 66 ++++++------------ gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 52818 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 23 +++--- settings.gradle | 10 +++ .../ViaRift.java => viafabric/ViaFabric.java} | 35 ++++------ .../commands/VRCommandHandler.java | 4 +- .../commands/subs/LeakDetectSubCommand.java | 2 +- .../gui/multiplayer/SaveProtocolButton.java | 16 ++--- .../handler/VRDecodeHandler.java | 2 +- .../handler/VREncodeHandler.java | 2 +- .../mixin/client/ClientConnectionChInit.java} | 16 ++--- .../mixin/client/MixinMultiplayerGui.java} | 51 ++++++++------ .../platform/VRBossBar.java | 2 +- .../platform/VRCommandSender.java | 2 +- .../platform/VRInjector.java | 12 +--- .../platform/VRLoader.java | 2 +- .../platform/VRPlatform.java | 22 +++--- .../platform/VRUserConnection.java | 2 +- .../platform/VRViaAPI.java | 2 +- .../platform/VRViaConfig.java | 2 +- .../protocol/Interceptor.java | 8 +-- .../util/FutureTaskId.java | 2 +- .../util/JLoggerToLog4j.java | 2 +- .../util/ManagedBlockerRunnable.java | 2 +- .../util/VersionFormatFilter.java | 2 +- .../interfaces/IPatchedCPacketHandshake.java | 29 -------- .../mixin/client/MixinCPacketHandshake.java | 40 ----------- src/main/resources/fabric.mod.json | 12 ++++ src/main/resources/mixins.viafabric.main.json | 14 ++++ src/main/resources/mixins.viarift.main.json | 15 ---- src/main/resources/riftmod.json | 10 --- 32 files changed, 162 insertions(+), 250 deletions(-) create mode 100644 settings.gradle rename src/main/java/com/github/creeper123123321/{viarift/ViaRift.java => viafabric/ViaFabric.java} (62%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/commands/VRCommandHandler.java (91%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/commands/subs/LeakDetectSubCommand.java (97%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/gui/multiplayer/SaveProtocolButton.java (81%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/handler/VRDecodeHandler.java (98%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/handler/VREncodeHandler.java (98%) rename src/main/java/com/github/creeper123123321/{viarift/mixin/MixinNetworkManagerClientChInit.java => viafabric/mixin/client/ClientConnectionChInit.java} (83%) rename src/main/java/com/github/creeper123123321/{viarift/mixin/client/MixinGuiMultiplayer.java => viafabric/mixin/client/MixinMultiplayerGui.java} (54%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRBossBar.java (96%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRCommandSender.java (97%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRInjector.java (79%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRLoader.java (96%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRPlatform.java (92%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRUserConnection.java (98%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRViaAPI.java (98%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/platform/VRViaConfig.java (99%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/protocol/Interceptor.java (90%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/util/FutureTaskId.java (96%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/util/JLoggerToLog4j.java (98%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/util/ManagedBlockerRunnable.java (96%) rename src/main/java/com/github/creeper123123321/{viarift => viafabric}/util/VersionFormatFilter.java (97%) delete mode 100644 src/main/java/com/github/creeper123123321/viarift/interfaces/IPatchedCPacketHandshake.java delete mode 100644 src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinCPacketHandshake.java create mode 100644 src/main/resources/fabric.mod.json create mode 100644 src/main/resources/mixins.viafabric.main.json delete mode 100644 src/main/resources/mixins.viarift.main.json delete mode 100644 src/main/resources/riftmod.json diff --git a/build.gradle b/build.gradle index 3f91a51..3047d6e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,30 +1,13 @@ -buildscript { - repositories { - mavenCentral() - maven { url 'https://www.jitpack.io' } - maven { url 'https://files.minecraftforge.net/maven' } - jcenter() - maven { url 'https://www.dimdev.org/maven/' } - maven { url 'https://repo.spongepowered.org/maven/' } - } - dependencies { - classpath 'com.github.Chocohead:ForgeGradle:moderniser-SNAPSHOT' - classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT' - } -} - plugins { + id 'java' id 'net.minecrell.licenser' version '0.4.1' + id 'fabric-loom' version '0.2.0-SNAPSHOT' id 'com.palantir.git-version' version '0.12.0-rc2' } -apply plugin: 'net.minecraftforge.gradle.tweaker-client' -apply plugin: 'org.spongepowered.mixin' -apply plugin: 'java' - -group 'com.github.creeper123123321.viarift' +group 'com.github.creeper123123321.viafabric' version gitVersion() -archivesBaseName = 'ViaRift' +archivesBaseName = 'ViaFabric' sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -32,12 +15,10 @@ targetCompatibility = 1.8 repositories { mavenLocal() mavenCentral() - maven { url 'https://libraries.minecraft.net/' } + jcenter() maven { url 'https://repo.viaversion.com/' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } - maven { url 'https://www.dimdev.org/maven/' } - maven { url 'https://jitpack.io' } - maven { url 'http://repo.strezz.org/artifactory/list/Strezz-Central' } + maven { url 'https://maven.fabricmc.net/' } } configurations { @@ -46,16 +27,22 @@ configurations { } dependencies { - shade ('us.myles:viaversion:2.0.0-SNAPSHOT') { + shade('us.myles:viaversion:2.0.0-18w50a') { transitive = false changing = true } - implementation 'com.github.Chocohead:Rift:jitpack-SNAPSHOT:dev' + + minecraft "com.mojang:minecraft:18w50a" + mappings "net.fabricmc:yarn:18w50a.64" + modCompile "net.fabricmc:fabric-loader:0.3.0.74" + + // Fabric API. This is technically optional, but you probably want it anyway. + modCompile "net.fabricmc:fabric:0.1.2.63" } jar { configurations.shade.each { dep -> - from(project.zipTree(dep)){ + from(project.zipTree(dep)) { //exclude 'META-INF', 'META-INF/**' exclude 'us/myles/ViaVersion/SpongePlugin.class' exclude 'us/viaversion/libs/javassist/**' @@ -64,20 +51,13 @@ jar { } } -reobf { - jar { - extraLines += "PK: us/myles com/github/creeper123123321/viarift/shaded/us/myles" - } -} - -mixin { - defaultObfuscationEnv notch - add sourceSets.main, 'mixins.viarift.refmap.json' -} - minecraft { - version = '1.13.2' - mappings = 'snapshot_20181130' - runDir = 'run' - tweakClass = 'org.dimdev.riftloader.launch.RiftLoaderClientTweaker' } + +// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task +// if it is present. +// If you remove this task, sources will not be generated. +task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 01b8bf6b1f99cad9213fc495b33ad5bbab8efd20..deedc7fa5e6310eac3148a7dd0b1f069b07364cb 100644 GIT binary patch delta 35809 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 delta 37234 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%0AB0@pgM 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bd24854..edb14bc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sat Jan 05 17:54:35 BRST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip diff --git a/gradlew b/gradlew index cccdd3d..9aa616c 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash ############################################################################## ## @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn () { +warn ( ) { echo "$*" } -die () { +die ( ) { echo echo "$*" echo @@ -154,19 +154,16 @@ if $cygwin ; then esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then +if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then cd "$(dirname "$0")" fi -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..5b60df3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + jcenter() + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + } +} diff --git a/src/main/java/com/github/creeper123123321/viarift/ViaRift.java b/src/main/java/com/github/creeper123123321/viafabric/ViaFabric.java similarity index 62% rename from src/main/java/com/github/creeper123123321/viarift/ViaRift.java rename to src/main/java/com/github/creeper123123321/viafabric/ViaFabric.java index 9bef991..e1beea0 100644 --- a/src/main/java/com/github/creeper123123321/viarift/ViaRift.java +++ b/src/main/java/com/github/creeper123123321/viafabric/ViaFabric.java @@ -22,37 +22,28 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift; +package com.github.creeper123123321.viafabric; -import com.github.creeper123123321.viarift.commands.VRCommandHandler; -import com.github.creeper123123321.viarift.platform.VRInjector; -import com.github.creeper123123321.viarift.platform.VRLoader; -import com.github.creeper123123321.viarift.platform.VRPlatform; -import com.github.creeper123123321.viarift.util.JLoggerToLog4j; +import com.github.creeper123123321.viafabric.commands.VRCommandHandler; +import com.github.creeper123123321.viafabric.platform.VRInjector; +import com.github.creeper123123321.viafabric.platform.VRLoader; +import com.github.creeper123123321.viafabric.platform.VRPlatform; +import com.github.creeper123123321.viafabric.util.JLoggerToLog4j; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.netty.channel.DefaultEventLoop; import io.netty.channel.EventLoop; -import net.minecraft.util.NamedThreadFactory; +import net.fabricmc.api.ModInitializer; import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.dimdev.rift.listener.MinecraftStartListener; -import org.dimdev.riftloader.listener.InitializationListener; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.Mixins; import us.myles.ViaVersion.ViaManager; import us.myles.ViaVersion.api.Via; -public class ViaRift implements InitializationListener, MinecraftStartListener { - public static final Logger LOGGER = LogManager.getLogger("ViaRift"); - public static final java.util.logging.Logger JLOGGER = new JLoggerToLog4j(LOGGER); - public static final EventLoop EVENT_LOOP = new DefaultEventLoop(new NamedThreadFactory("ViaRift")); - @Override - public void onInitialization() { - MixinBootstrap.init(); - Mixins.addConfiguration("mixins.viarift.main.json"); - } +public class ViaFabric implements ModInitializer { + public static final java.util.logging.Logger JLOGGER = new JLoggerToLog4j(LogManager.getLogger("ViaFabric")); + public static final EventLoop EVENT_LOOP = new DefaultEventLoop(new ThreadFactoryBuilder() + .setNameFormat("ViaFabric").build()); @Override - public void onMinecraftStart() { + public void onInitialize() { Via.init(ViaManager.builder() .injector(new VRInjector()) .loader(new VRLoader()) diff --git a/src/main/java/com/github/creeper123123321/viarift/commands/VRCommandHandler.java b/src/main/java/com/github/creeper123123321/viafabric/commands/VRCommandHandler.java similarity index 91% rename from src/main/java/com/github/creeper123123321/viarift/commands/VRCommandHandler.java rename to src/main/java/com/github/creeper123123321/viafabric/commands/VRCommandHandler.java index 5ea0325..1344f1b 100644 --- a/src/main/java/com/github/creeper123123321/viarift/commands/VRCommandHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/commands/VRCommandHandler.java @@ -22,9 +22,9 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.commands; +package com.github.creeper123123321.viafabric.commands; -import com.github.creeper123123321.viarift.commands.subs.LeakDetectSubCommand; +import com.github.creeper123123321.viafabric.commands.subs.LeakDetectSubCommand; import us.myles.ViaVersion.commands.ViaCommandHandler; public class VRCommandHandler extends ViaCommandHandler { diff --git a/src/main/java/com/github/creeper123123321/viarift/commands/subs/LeakDetectSubCommand.java b/src/main/java/com/github/creeper123123321/viafabric/commands/subs/LeakDetectSubCommand.java similarity index 97% rename from src/main/java/com/github/creeper123123321/viarift/commands/subs/LeakDetectSubCommand.java rename to src/main/java/com/github/creeper123123321/viafabric/commands/subs/LeakDetectSubCommand.java index d87b80c..2ef1bc8 100644 --- a/src/main/java/com/github/creeper123123321/viarift/commands/subs/LeakDetectSubCommand.java +++ b/src/main/java/com/github/creeper123123321/viafabric/commands/subs/LeakDetectSubCommand.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.commands.subs; +package com.github.creeper123123321.viafabric.commands.subs; import io.netty.util.ResourceLeakDetector; import us.myles.ViaVersion.api.command.ViaCommandSender; diff --git a/src/main/java/com/github/creeper123123321/viarift/gui/multiplayer/SaveProtocolButton.java b/src/main/java/com/github/creeper123123321/viafabric/gui/multiplayer/SaveProtocolButton.java similarity index 81% rename from src/main/java/com/github/creeper123123321/viarift/gui/multiplayer/SaveProtocolButton.java rename to src/main/java/com/github/creeper123123321/viafabric/gui/multiplayer/SaveProtocolButton.java index 5d98d26..506b97b 100644 --- a/src/main/java/com/github/creeper123123321/viarift/gui/multiplayer/SaveProtocolButton.java +++ b/src/main/java/com/github/creeper123123321/viafabric/gui/multiplayer/SaveProtocolButton.java @@ -22,24 +22,24 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.gui.multiplayer; +package com.github.creeper123123321.viafabric.gui.multiplayer; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; import us.myles.ViaVersion.api.protocol.ProtocolRegistry; import us.myles.ViaVersion.api.protocol.ProtocolVersion; -public class SaveProtocolButton extends GuiButton { - private GuiTextField textField; +public class SaveProtocolButton extends ButtonWidget { + private TextFieldWidget textField; - public SaveProtocolButton(int id, int x, int y, int width, int height, String text, GuiTextField tf) { + public SaveProtocolButton(int id, int x, int y, int width, int height, String text, TextFieldWidget tf) { super(id, x, y, width, height, text); textField = tf; } @Override - public void onClick(double p_mouseClicked_1_, double p_mouseClicked_3_) { - super.onClick(p_mouseClicked_1_, p_mouseClicked_3_); + public void onPressed(double p_mouseClicked_1_, double p_mouseClicked_3_) { + super.onPressed(p_mouseClicked_1_, p_mouseClicked_3_); try { ProtocolRegistry.SERVER_PROTOCOL = Integer.parseInt(textField.getText()); } catch (NumberFormatException e) { diff --git a/src/main/java/com/github/creeper123123321/viarift/handler/VRDecodeHandler.java b/src/main/java/com/github/creeper123123321/viafabric/handler/VRDecodeHandler.java similarity index 98% rename from src/main/java/com/github/creeper123123321/viarift/handler/VRDecodeHandler.java rename to src/main/java/com/github/creeper123123321/viafabric/handler/VRDecodeHandler.java index 9bbc00c..a6fb467 100644 --- a/src/main/java/com/github/creeper123123321/viarift/handler/VRDecodeHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/VRDecodeHandler.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.handler; +package com.github.creeper123123321.viafabric.handler; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/src/main/java/com/github/creeper123123321/viarift/handler/VREncodeHandler.java b/src/main/java/com/github/creeper123123321/viafabric/handler/VREncodeHandler.java similarity index 98% rename from src/main/java/com/github/creeper123123321/viarift/handler/VREncodeHandler.java rename to src/main/java/com/github/creeper123123321/viafabric/handler/VREncodeHandler.java index 8cfca43..260d0e8 100644 --- a/src/main/java/com/github/creeper123123321/viarift/handler/VREncodeHandler.java +++ b/src/main/java/com/github/creeper123123321/viafabric/handler/VREncodeHandler.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.handler; +package com.github.creeper123123321.viafabric.handler; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/src/main/java/com/github/creeper123123321/viarift/mixin/MixinNetworkManagerClientChInit.java b/src/main/java/com/github/creeper123123321/viafabric/mixin/client/ClientConnectionChInit.java similarity index 83% rename from src/main/java/com/github/creeper123123321/viarift/mixin/MixinNetworkManagerClientChInit.java rename to src/main/java/com/github/creeper123123321/viafabric/mixin/client/ClientConnectionChInit.java index 0e113d8..42e9861 100644 --- a/src/main/java/com/github/creeper123123321/viarift/mixin/MixinNetworkManagerClientChInit.java +++ b/src/main/java/com/github/creeper123123321/viafabric/mixin/client/ClientConnectionChInit.java @@ -22,12 +22,12 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.mixin; +package com.github.creeper123123321.viafabric.mixin.client; -import com.github.creeper123123321.viarift.handler.VRDecodeHandler; -import com.github.creeper123123321.viarift.handler.VREncodeHandler; -import com.github.creeper123123321.viarift.platform.VRUserConnection; -import com.github.creeper123123321.viarift.protocol.Interceptor; +import com.github.creeper123123321.viafabric.handler.VRDecodeHandler; +import com.github.creeper123123321.viafabric.handler.VREncodeHandler; +import com.github.creeper123123321.viafabric.platform.VRUserConnection; +import com.github.creeper123123321.viafabric.protocol.Interceptor; import io.netty.channel.Channel; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.ByteToMessageDecoder; @@ -39,9 +39,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.protocol.ProtocolPipeline; -@Mixin(targets = "net.minecraft.network.NetworkManager$1") -public class MixinNetworkManagerClientChInit { - @Inject(method = "initChannel(Lio/netty/channel/Channel;)V", at = @At(value = "TAIL")) +@Mixin(targets = "net.minecraft.network.ClientConnection$1") +public class ClientConnectionChInit { + @Inject(method = "initChannel(Lio/netty/channel/Channel;)V", at = @At(value = "TAIL"), remap = false) private void onInitChannel(Channel channel, CallbackInfo ci) { if (channel instanceof SocketChannel) { UserConnection user = new VRUserConnection((SocketChannel) channel); diff --git a/src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinGuiMultiplayer.java b/src/main/java/com/github/creeper123123321/viafabric/mixin/client/MixinMultiplayerGui.java similarity index 54% rename from src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinGuiMultiplayer.java rename to src/main/java/com/github/creeper123123321/viafabric/mixin/client/MixinMultiplayerGui.java index 034bd8c..583b037 100644 --- a/src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinGuiMultiplayer.java +++ b/src/main/java/com/github/creeper123123321/viafabric/mixin/client/MixinMultiplayerGui.java @@ -22,13 +22,19 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.mixin.client; +package com.github.creeper123123321.viafabric.mixin.client; -import com.github.creeper123123321.viarift.gui.multiplayer.SaveProtocolButton; -import com.github.creeper123123321.viarift.util.VersionFormatFilter; -import net.minecraft.client.gui.*; -import net.minecraft.client.resources.I18n; +import com.github.creeper123123321.viafabric.gui.multiplayer.SaveProtocolButton; +import com.github.creeper123123321.viafabric.util.VersionFormatFilter; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiEventListener; +import net.minecraft.client.gui.menu.MultiplayerGui; +import net.minecraft.client.gui.widget.ServerListWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.resource.language.I18n; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -36,35 +42,36 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import us.myles.ViaVersion.api.protocol.ProtocolRegistry; import us.myles.ViaVersion.api.protocol.ProtocolVersion; -@Mixin(GuiMultiplayer.class) -public abstract class MixinGuiMultiplayer extends GuiScreen { - private GuiTextField protocolVersion; +@Mixin(MultiplayerGui.class) +public abstract class MixinMultiplayerGui extends Gui { + @Shadow private ServerListWidget field_3043; + private TextFieldWidget protocolVersion; - @Inject(method = "initGui", at = @At("TAIL")) - private void onInitGui(CallbackInfo ci) { - protocolVersion = new GuiTextField(1235, fontRenderer, this.width / 2 + 55, 8, 45, 20); + @Inject(method = "onInitialized", at = @At("TAIL")) + private void onOnInitialized(CallbackInfo ci) { + protocolVersion = new TextFieldWidget(1235, fontRenderer, this.width / 2 + 55, 8, 45, 20); protocolVersion.setText(ProtocolVersion.isRegistered(ProtocolRegistry.SERVER_PROTOCOL) ? ProtocolVersion.getProtocol(ProtocolRegistry.SERVER_PROTOCOL).getName() : Integer.toString(ProtocolRegistry.SERVER_PROTOCOL)); - protocolVersion.setValidator(new VersionFormatFilter()); - this.children.add(protocolVersion); + protocolVersion.method_1890(new VersionFormatFilter()); + this.listeners.add(protocolVersion); addButton(new SaveProtocolButton(6356, width / 2 + 100, 8, 50, 20, - I18n.format("gui.save_protocol_version"), protocolVersion)); + I18n.translate("gui.save_protocol_version"), protocolVersion)); } - @Inject(method = "render", at = @At("TAIL")) - private void onDrawScreen(int p_1, int p_2, float p_3, CallbackInfo ci) { - drawCenteredString(fontRenderer, I18n.format("gui.protocol_version"), this.width / 2, 12, 0xFFFFFF); - protocolVersion.drawTextField(p_1, p_2, p_3); + @Inject(method = "draw", at = @At("TAIL")) + private void onDraw(int p_1, int p_2, float p_3, CallbackInfo ci) { + drawStringCentered(fontRenderer, I18n.translate("gui.protocol_version"), this.width / 2, 12, 0xFFFFFF); + protocolVersion.render(p_1, p_2, p_3); } - @Inject(method = "tick", at = @At("TAIL")) - private void onUpdateScreen(CallbackInfo ci) { + @Inject(method = "update", at = @At("TAIL")) + private void onUpdate(CallbackInfo ci) { protocolVersion.tick(); } - @Inject(method = "getFocused", at = @At("RETURN"), cancellable = true) - private void onGetFocused(CallbackInfoReturnable cir) { + @Inject(method = "getFocused", at = @At("HEAD"), cancellable = true, remap = false) + private void onGetFocused(CallbackInfoReturnable cir) { if (protocolVersion.isFocused()) { cir.setReturnValue(protocolVersion); } diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRBossBar.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRBossBar.java similarity index 96% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRBossBar.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRBossBar.java index 9918786..3d9fb65 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRBossBar.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRBossBar.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; import us.myles.ViaVersion.api.boss.BossColor; import us.myles.ViaVersion.api.boss.BossStyle; diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRCommandSender.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRCommandSender.java similarity index 97% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRCommandSender.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRCommandSender.java index 0050baa..3180c88 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRCommandSender.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRCommandSender.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.command.ViaCommandSender; diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRInjector.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRInjector.java similarity index 79% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRInjector.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRInjector.java index fba0c5f..7e33f7f 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRInjector.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRInjector.java @@ -22,11 +22,9 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; -import com.github.creeper123123321.viarift.interfaces.IPatchedCPacketHandshake; -import net.minecraft.network.EnumConnectionState; -import net.minecraft.network.handshake.client.CPacketHandshake; +import net.minecraft.client.settings.ServerEntry; import us.myles.ViaVersion.api.platform.ViaInjector; public class VRInjector implements ViaInjector { @@ -42,11 +40,7 @@ public class VRInjector implements ViaInjector { @Override public int getServerProtocolVersion() { - return ((IPatchedCPacketHandshake) new CPacketHandshake( - "XGH to get protocol", - 0, - EnumConnectionState.HANDSHAKING) - ).getProtocolVersion(); + return new ServerEntry("", "", false).protocolVersion; } @Override diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRLoader.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRLoader.java similarity index 96% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRLoader.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRLoader.java index f44e391..8c930cf 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRLoader.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRLoader.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.platform.ViaPlatformLoader; diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRPlatform.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRPlatform.java similarity index 92% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRPlatform.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRPlatform.java index 552adc9..3a8ff7f 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRPlatform.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRPlatform.java @@ -22,12 +22,12 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; -import com.github.creeper123123321.viarift.ViaRift; -import com.github.creeper123123321.viarift.protocol.Interceptor; -import com.github.creeper123123321.viarift.util.FutureTaskId; -import com.github.creeper123123321.viarift.util.ManagedBlockerRunnable; +import com.github.creeper123123321.viafabric.ViaFabric; +import com.github.creeper123123321.viafabric.protocol.Interceptor; +import com.github.creeper123123321.viafabric.util.FutureTaskId; +import com.github.creeper123123321.viafabric.util.ManagedBlockerRunnable; import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.ViaAPI; @@ -52,16 +52,16 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; public class VRPlatform implements ViaPlatform { - private VRViaConfig config = new VRViaConfig(new File("config/ViaRift")); + private VRViaConfig config = new VRViaConfig(new File("config/ViaFabric")); @Override public Logger getLogger() { - return ViaRift.JLOGGER; + return ViaFabric.JLOGGER; } @Override public String getPlatformName() { - return "ViaRift"; + return "ViaFabric"; } @Override @@ -71,7 +71,7 @@ public class VRPlatform implements ViaPlatform { @Override public String getPluginVersion() { - return VersionInfo.VERSION + "-ViaRift"; + return VersionInfo.VERSION + "-ViaFabric"; } @Override @@ -106,7 +106,7 @@ public class VRPlatform implements ViaPlatform { @Override public TaskId runSync(Runnable runnable, Long ticks) { return new FutureTaskId( - ViaRift.EVENT_LOOP + ViaFabric.EVENT_LOOP .schedule(runnable, ticks * 50, TimeUnit.SECONDS) .addListener(future -> { if (!future.isSuccess()) { @@ -119,7 +119,7 @@ public class VRPlatform implements ViaPlatform { @Override public TaskId runRepeatingSync(Runnable runnable, Long ticks) { return new FutureTaskId( - ViaRift.EVENT_LOOP + ViaFabric.EVENT_LOOP .scheduleAtFixedRate(runnable, 0, ticks * 50, TimeUnit.SECONDS) .addListener(future -> { if (!future.isSuccess()) { diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRUserConnection.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRUserConnection.java similarity index 98% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRUserConnection.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRUserConnection.java index 41b9f09..ee27754 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRUserConnection.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRUserConnection.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRViaAPI.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRViaAPI.java similarity index 98% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRViaAPI.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRViaAPI.java index 70fae2a..c87c68c 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRViaAPI.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRViaAPI.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; import io.netty.buffer.ByteBuf; import us.myles.ViaVersion.api.Via; diff --git a/src/main/java/com/github/creeper123123321/viarift/platform/VRViaConfig.java b/src/main/java/com/github/creeper123123321/viafabric/platform/VRViaConfig.java similarity index 99% rename from src/main/java/com/github/creeper123123321/viarift/platform/VRViaConfig.java rename to src/main/java/com/github/creeper123123321/viafabric/platform/VRViaConfig.java index ba65bd3..88595de 100644 --- a/src/main/java/com/github/creeper123123321/viarift/platform/VRViaConfig.java +++ b/src/main/java/com/github/creeper123123321/viafabric/platform/VRViaConfig.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.platform; +package com.github.creeper123123321.viafabric.platform; import us.myles.ViaVersion.api.ViaVersionConfig; import us.myles.ViaVersion.util.Config; diff --git a/src/main/java/com/github/creeper123123321/viarift/protocol/Interceptor.java b/src/main/java/com/github/creeper123123321/viafabric/protocol/Interceptor.java similarity index 90% rename from src/main/java/com/github/creeper123123321/viarift/protocol/Interceptor.java rename to src/main/java/com/github/creeper123123321/viafabric/protocol/Interceptor.java index 5c07db5..e26ad7d 100644 --- a/src/main/java/com/github/creeper123123321/viarift/protocol/Interceptor.java +++ b/src/main/java/com/github/creeper123123321/viafabric/protocol/Interceptor.java @@ -22,9 +22,9 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.protocol; +package com.github.creeper123123321.viafabric.protocol; -import com.github.creeper123123321.viarift.platform.VRCommandSender; +import com.github.creeper123123321.viafabric.platform.VRCommandSender; import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; @@ -48,10 +48,10 @@ public class Interceptor extends Protocol { public void handle(PacketWrapper packetWrapper) throws Exception { String msg = packetWrapper.get(Type.STRING, 0); ProtocolInfo info = packetWrapper.user().get(ProtocolInfo.class); - if (msg.startsWith("/viarift")) { + if (msg.startsWith("/viafabric")) { Via.getManager().getCommandHandler().onCommand( new VRCommandSender(info.getUuid(), info.getUsername()), - msg.length() == 8 ? new String[0] : msg.substring(9).split(" ", -1) + msg.length() == 10 ? new String[0] : msg.substring(9).split(" ", -1) ); packetWrapper.cancel(); } diff --git a/src/main/java/com/github/creeper123123321/viarift/util/FutureTaskId.java b/src/main/java/com/github/creeper123123321/viafabric/util/FutureTaskId.java similarity index 96% rename from src/main/java/com/github/creeper123123321/viarift/util/FutureTaskId.java rename to src/main/java/com/github/creeper123123321/viafabric/util/FutureTaskId.java index e457969..d6a5b94 100644 --- a/src/main/java/com/github/creeper123123321/viarift/util/FutureTaskId.java +++ b/src/main/java/com/github/creeper123123321/viafabric/util/FutureTaskId.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.util; +package com.github.creeper123123321.viafabric.util; import us.myles.ViaVersion.api.platform.TaskId; diff --git a/src/main/java/com/github/creeper123123321/viarift/util/JLoggerToLog4j.java b/src/main/java/com/github/creeper123123321/viafabric/util/JLoggerToLog4j.java similarity index 98% rename from src/main/java/com/github/creeper123123321/viarift/util/JLoggerToLog4j.java rename to src/main/java/com/github/creeper123123321/viafabric/util/JLoggerToLog4j.java index be93818..c8bce7a 100644 --- a/src/main/java/com/github/creeper123123321/viarift/util/JLoggerToLog4j.java +++ b/src/main/java/com/github/creeper123123321/viafabric/util/JLoggerToLog4j.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.util; +package com.github.creeper123123321.viafabric.util; import java.text.MessageFormat; import java.util.logging.Level; diff --git a/src/main/java/com/github/creeper123123321/viarift/util/ManagedBlockerRunnable.java b/src/main/java/com/github/creeper123123321/viafabric/util/ManagedBlockerRunnable.java similarity index 96% rename from src/main/java/com/github/creeper123123321/viarift/util/ManagedBlockerRunnable.java rename to src/main/java/com/github/creeper123123321/viafabric/util/ManagedBlockerRunnable.java index 399314f..f24406d 100644 --- a/src/main/java/com/github/creeper123123321/viarift/util/ManagedBlockerRunnable.java +++ b/src/main/java/com/github/creeper123123321/viafabric/util/ManagedBlockerRunnable.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.util; +package com.github.creeper123123321.viafabric.util; import java.util.concurrent.ForkJoinPool; diff --git a/src/main/java/com/github/creeper123123321/viarift/util/VersionFormatFilter.java b/src/main/java/com/github/creeper123123321/viafabric/util/VersionFormatFilter.java similarity index 97% rename from src/main/java/com/github/creeper123123321/viarift/util/VersionFormatFilter.java rename to src/main/java/com/github/creeper123123321/viafabric/util/VersionFormatFilter.java index c467af7..7214c46 100644 --- a/src/main/java/com/github/creeper123123321/viarift/util/VersionFormatFilter.java +++ b/src/main/java/com/github/creeper123123321/viafabric/util/VersionFormatFilter.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package com.github.creeper123123321.viarift.util; +package com.github.creeper123123321.viafabric.util; import us.myles.ViaVersion.api.protocol.ProtocolVersion; diff --git a/src/main/java/com/github/creeper123123321/viarift/interfaces/IPatchedCPacketHandshake.java b/src/main/java/com/github/creeper123123321/viarift/interfaces/IPatchedCPacketHandshake.java deleted file mode 100644 index 5942dc2..0000000 --- a/src/main/java/com/github/creeper123123321/viarift/interfaces/IPatchedCPacketHandshake.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2018 creeper123123321 and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.creeper123123321.viarift.interfaces; - -public interface IPatchedCPacketHandshake { - int getProtocolVersion(); -} diff --git a/src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinCPacketHandshake.java b/src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinCPacketHandshake.java deleted file mode 100644 index 93673b2..0000000 --- a/src/main/java/com/github/creeper123123321/viarift/mixin/client/MixinCPacketHandshake.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2018 creeper123123321 and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package com.github.creeper123123321.viarift.mixin.client; - -import com.github.creeper123123321.viarift.interfaces.IPatchedCPacketHandshake; -import net.minecraft.network.handshake.client.CPacketHandshake; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(CPacketHandshake.class) -public class MixinCPacketHandshake implements IPatchedCPacketHandshake { - @Shadow private int protocolVersion; - - @Override - public int getProtocolVersion() { - return protocolVersion; - } -} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..9342670 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,12 @@ +{ + "id": "viafabric", + "name": "ViaFabric", + "side": "client", + "version": "?", + "initializers": [ + "com.github.creeper123123321.viafabric.ViaFabric" + ], + "mixins": { + "client": "mixins.viafabric.main.json" + } +} diff --git a/src/main/resources/mixins.viafabric.main.json b/src/main/resources/mixins.viafabric.main.json new file mode 100644 index 0000000..ce62e37 --- /dev/null +++ b/src/main/resources/mixins.viafabric.main.json @@ -0,0 +1,14 @@ +{ + "required": true, + "compatibilityLevel": "JAVA_8", + "package": "com.github.creeper123123321.viafabric.mixin", + "mixins": [ + ], + "client": [ + "client.ClientConnectionChInit", + "client.MixinMultiplayerGui" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/resources/mixins.viarift.main.json b/src/main/resources/mixins.viarift.main.json deleted file mode 100644 index 0c15217..0000000 --- a/src/main/resources/mixins.viarift.main.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "required": true, - "minVersion": "0.7.7", - "compatibilityLevel": "JAVA_8", - "target": "@env(DEFAULT)", - "package": "com.github.creeper123123321.viarift.mixin", - "refmap": "mixins.viarift.refmap.json", - "mixins": [ - "MixinNetworkManagerClientChInit" - ], - "client": [ - "client.MixinGuiMultiplayer", - "client.MixinCPacketHandshake" - ] -} diff --git a/src/main/resources/riftmod.json b/src/main/resources/riftmod.json deleted file mode 100644 index 560636b..0000000 --- a/src/main/resources/riftmod.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "viarift", - "name": "ViaRift", - "authors": [ - "creeper123123321" - ], - "listeners": [ - "com.github.creeper123123321.viarift.ViaRift" - ] -}