mirror of
https://github.com/ViaVersion/ViaForge.git
synced 2025-01-02 18:38:18 +01:00
Upload SourceCode
This commit is contained in:
parent
a5d30c2c78
commit
30d4b9341a
29
.gitignore
vendored
Normal file
29
.gitignore
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# gradle
|
||||||
|
|
||||||
|
.gradle/
|
||||||
|
build/
|
||||||
|
out/
|
||||||
|
classes/
|
||||||
|
|
||||||
|
# eclipse
|
||||||
|
|
||||||
|
*.launch
|
||||||
|
|
||||||
|
# idea
|
||||||
|
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# vscode
|
||||||
|
|
||||||
|
.settings/
|
||||||
|
.vscode/
|
||||||
|
bin/
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
|
||||||
|
# fabric
|
||||||
|
|
||||||
|
run/
|
131
build.gradle
Normal file
131
build.gradle
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
buildscript {
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
|
||||||
|
maven { url 'https://files.minecraftforge.net/maven' }
|
||||||
|
maven { url 'https://plugins.gradle.org/m2' }
|
||||||
|
maven { url 'https://repo.spongepowered.org/maven' }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '2.3-SNAPSHOT'
|
||||||
|
classpath group: 'org.spongepowered', name: 'mixingradle', version: '0.6-SNAPSHOT'
|
||||||
|
classpath group: 'com.github.jengelman.gradle.plugins', name: 'shadow', version: '4.0.4'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: "net.minecraftforge.gradle.forge"
|
||||||
|
apply plugin: "org.spongepowered.mixin"
|
||||||
|
apply plugin: "com.github.johnrengelman.shadow"
|
||||||
|
apply plugin: "java"
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
jcenter()
|
||||||
|
|
||||||
|
maven {
|
||||||
|
name = 'spongepowered-repo'
|
||||||
|
url = 'http://repo.spongepowered.org/maven/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
version = "b1"
|
||||||
|
group = "com.github.creeper123123321"
|
||||||
|
archivesBaseName = "ViaForge"
|
||||||
|
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
compileJava.options.encoding = 'windows-1252'
|
||||||
|
|
||||||
|
minecraft {
|
||||||
|
version = "1.12.2-14.23.5.2847"
|
||||||
|
runDir = 'run'
|
||||||
|
mappings = "stable_39"
|
||||||
|
makeObfSourceJar = true
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main.java.srcDirs += 'src/main/java'
|
||||||
|
main.java.srcDirs += '../shared/main/java'
|
||||||
|
main.resources.srcDirs += '../shared/main/resources'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
jcenter()
|
||||||
|
|
||||||
|
maven { url 'https://jitpack.io' }
|
||||||
|
maven { url 'https://repo.spongepowered.org/maven/' }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile("org.spongepowered:mixin:0.7.10-SNAPSHOT") {
|
||||||
|
exclude module: "launchwrapper"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
inputs.property "version", project.version
|
||||||
|
inputs.property "mcversion", project.minecraft.version
|
||||||
|
|
||||||
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
|
include 'mcmod.info'
|
||||||
|
|
||||||
|
expand 'version':project.version, 'mcversion':project.minecraft.version
|
||||||
|
}
|
||||||
|
|
||||||
|
from(sourceSets.main.resources.srcDirs) {
|
||||||
|
exclude 'mcmod.info'
|
||||||
|
}
|
||||||
|
|
||||||
|
rename '(.+_at.cfg)', 'META-INF/$1'
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin {
|
||||||
|
add sourceSets.main, "mixins.viaforge.refmap.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
manifest.attributes(
|
||||||
|
"MixinConfigs": "mixins.viaforge.json",
|
||||||
|
"tweakClass": "org.spongepowered.asm.launch.MixinTweaker",
|
||||||
|
"TweakOrder": 0,
|
||||||
|
"FMLCorePluginContainsFMLMod": "com.github.creeper123123321.viafabric.injection.MixinLoader"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: "idea"
|
||||||
|
|
||||||
|
idea {
|
||||||
|
module {
|
||||||
|
inheritOutputDirs = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
dependencies {
|
||||||
|
include(dependency('org.spongepowered:mixin'))
|
||||||
|
}
|
||||||
|
|
||||||
|
exclude 'dummyThing'
|
||||||
|
exclude 'LICENSE.txt'
|
||||||
|
|
||||||
|
classifier = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
reobf { shadowJar { mappingType = "SEARGE" } }
|
||||||
|
tasks.reobfShadowJar.mustRunAfter shadowJar
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
external
|
||||||
|
compile.extendsFrom external
|
||||||
|
}
|
||||||
|
|
||||||
|
build.dependsOn shadowJar
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#Mon Sep 14 12:28:28 PDT 2015
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https://services.gradle.org/distributions/gradle-4.2.1-bin.zip
|
84
gradlew.bat
vendored
Normal file
84
gradlew.bat
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS=
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:init
|
||||||
|
@rem Get command-line arguments, handling Windows variants
|
||||||
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
|
|
||||||
|
:win9xME_args
|
||||||
|
@rem Slurp the command line arguments.
|
||||||
|
set CMD_LINE_ARGS=
|
||||||
|
set _SKIP=2
|
||||||
|
|
||||||
|
:win9xME_args_slurp
|
||||||
|
if "x%~1" == "x" goto execute
|
||||||
|
|
||||||
|
set CMD_LINE_ARGS=%*
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
BIN
libs/SnakeYaml-1.27.jar
Normal file
BIN
libs/SnakeYaml-1.27.jar
Normal file
Binary file not shown.
BIN
libs/ViaBackwards-3.3.0-21w06a.jar
Normal file
BIN
libs/ViaBackwards-3.3.0-21w06a.jar
Normal file
Binary file not shown.
BIN
libs/ViaRewind-1.5.3(4).jar
Normal file
BIN
libs/ViaRewind-1.5.3(4).jar
Normal file
Binary file not shown.
BIN
libs/ViaVersion-3.3.0-21w06a.jar
Normal file
BIN
libs/ViaVersion-3.3.0-21w06a.jar
Normal file
Binary file not shown.
18
settings.gradle
Normal file
18
settings.gradle
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* This settings file was generated by the Gradle 'init' task.
|
||||||
|
*
|
||||||
|
* The settings file is used to specify which projects to include in your build.
|
||||||
|
* In a single project build this file can be empty or even removed.
|
||||||
|
*
|
||||||
|
* Detailed information about configuring a multi-project build in Gradle can be found
|
||||||
|
* in the user guide at https://docs.gradle.org/4.2.1/userguide/multi_project_builds.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
// To declare projects as part of a multi-project build use the 'include' method
|
||||||
|
include 'shared'
|
||||||
|
include 'api'
|
||||||
|
include 'services:webservice'
|
||||||
|
*/
|
||||||
|
|
||||||
|
rootProject.name = 'ViaForge'
|
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric;
|
||||||
|
|
||||||
|
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 de.flori2007.viaforge.platform.ViaBackwardsPlatformImplementation;
|
||||||
|
import de.flori2007.viaforge.platform.ViaRewindPlatformImplementation;
|
||||||
|
import io.netty.channel.EventLoop;
|
||||||
|
import io.netty.channel.local.LocalEventLoopGroup;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import us.myles.ViaVersion.ViaManager;
|
||||||
|
import us.myles.ViaVersion.api.Via;
|
||||||
|
import us.myles.ViaVersion.api.data.MappingDataLoader;
|
||||||
|
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ThreadFactory;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@Mod(modid = "viaforge", useMetadata = true)
|
||||||
|
public class ViaFabric {
|
||||||
|
|
||||||
|
public static int clientSideVersion = 47;
|
||||||
|
|
||||||
|
public static final Logger JLOGGER = new JLoggerToLog4j(LogManager.getLogger("ViaFabric"));
|
||||||
|
public static final ExecutorService ASYNC_EXECUTOR;
|
||||||
|
public static final EventLoop EVENT_LOOP;
|
||||||
|
public static CompletableFuture<Void> INIT_FUTURE = new CompletableFuture<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ViaFabric-%d").build();
|
||||||
|
ASYNC_EXECUTOR = Executors.newFixedThreadPool(8, factory);
|
||||||
|
EVENT_LOOP = new LocalEventLoopGroup(1, factory).next(); // ugly code
|
||||||
|
EVENT_LOOP.submit(INIT_FUTURE::join); // https://github.com/ViaVersion/ViaFabric/issues/53 ugly workaround code but works tm
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getVersion() {
|
||||||
|
return "1.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onInitialize() {
|
||||||
|
|
||||||
|
Via.init(ViaManager.builder()
|
||||||
|
.injector(new VRInjector())
|
||||||
|
.loader(new VRLoader())
|
||||||
|
.platform(new VRPlatform()).build());
|
||||||
|
|
||||||
|
MappingDataLoader.enableMappingsCache();
|
||||||
|
new ViaBackwardsPlatformImplementation();
|
||||||
|
new ViaRewindPlatformImplementation();
|
||||||
|
|
||||||
|
Via.getManager().init();
|
||||||
|
|
||||||
|
INIT_FUTURE.complete(null);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.handler;
|
||||||
|
|
||||||
|
public class CommonTransformer {
|
||||||
|
public static final String HANDLER_DECODER_NAME = "via-decoder";
|
||||||
|
public static final String HANDLER_ENCODER_NAME = "via-encoder";
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.handler.clientside;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.handler.codec.MessageToMessageDecoder;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
import us.myles.ViaVersion.exception.CancelCodecException;
|
||||||
|
import us.myles.ViaVersion.exception.CancelDecoderException;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class VRDecodeHandler extends MessageToMessageDecoder<ByteBuf> {
|
||||||
|
private final UserConnection info;
|
||||||
|
|
||||||
|
public VRDecodeHandler(UserConnection info) {
|
||||||
|
this.info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void decode(ChannelHandlerContext ctx, ByteBuf bytebuf, List<Object> out) throws Exception {
|
||||||
|
info.checkOutgoingPacket();
|
||||||
|
if (!info.shouldTransformPacket()) {
|
||||||
|
out.add(bytebuf.retain());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf);
|
||||||
|
try {
|
||||||
|
info.transformOutgoing(transformedBuf, CancelDecoderException::generate);
|
||||||
|
out.add(transformedBuf.retain());
|
||||||
|
} finally {
|
||||||
|
transformedBuf.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
||||||
|
if (cause instanceof CancelCodecException) return;
|
||||||
|
super.exceptionCaught(ctx, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserConnection getInfo() {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.handler.clientside;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.handler.codec.MessageToMessageEncoder;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
import us.myles.ViaVersion.exception.CancelCodecException;
|
||||||
|
import us.myles.ViaVersion.exception.CancelEncoderException;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class VREncodeHandler extends MessageToMessageEncoder<ByteBuf> {
|
||||||
|
private final UserConnection info;
|
||||||
|
|
||||||
|
public VREncodeHandler(UserConnection info) {
|
||||||
|
this.info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void encode(ChannelHandlerContext ctx, ByteBuf bytebuf, List<Object> out) throws Exception {
|
||||||
|
if (!info.checkIncomingPacket()) throw CancelEncoderException.generate(null);
|
||||||
|
if (!info.shouldTransformPacket()) {
|
||||||
|
out.add(bytebuf.retain());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteBuf transformedBuf = ctx.alloc().buffer().writeBytes(bytebuf);
|
||||||
|
try {
|
||||||
|
info.transformIncoming(transformedBuf, CancelEncoderException::generate);
|
||||||
|
out.add(transformedBuf.retain());
|
||||||
|
} finally {
|
||||||
|
transformedBuf.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
||||||
|
if (cause instanceof CancelCodecException) return;
|
||||||
|
super.exceptionCaught(ctx, cause);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection;
|
||||||
|
|
||||||
|
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
||||||
|
import org.spongepowered.asm.launch.MixinBootstrap;
|
||||||
|
import org.spongepowered.asm.mixin.MixinEnvironment;
|
||||||
|
import org.spongepowered.asm.mixin.Mixins;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class MixinLoader implements IFMLLoadingPlugin {
|
||||||
|
|
||||||
|
public MixinLoader() {
|
||||||
|
MixinBootstrap.init();
|
||||||
|
Mixins.addConfiguration("mixins.viaforge.json");
|
||||||
|
MixinEnvironment.getDefaultEnvironment().setSide(MixinEnvironment.Side.CLIENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getASMTransformerClass() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getModContainerClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSetupClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectData(Map<String, Object> data) { }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAccessTransformerClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.ProtocolUtils;
|
||||||
|
import de.flori2007.viaforge.gui.GuiProtocolSelector;
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
import net.minecraft.client.gui.GuiDisconnected;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(GuiDisconnected.class)
|
||||||
|
public abstract class MixinGuiDisconnected extends GuiScreen {
|
||||||
|
|
||||||
|
@Inject(method = "initGui", at = @At("RETURN"))
|
||||||
|
public void injectInitGui(CallbackInfo ci) {
|
||||||
|
buttonList.add(new GuiButton(1337, 5, 6, 98, 20,
|
||||||
|
ProtocolUtils.getProtocolName(ViaFabric.clientSideVersion)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "actionPerformed", at = @At("RETURN"))
|
||||||
|
public void injectActionPerformed(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
|
||||||
|
if (p_actionPerformed_1_.id == 1337)
|
||||||
|
mc.displayGuiScreen(new GuiProtocolSelector(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "drawScreen", at = @At("RETURN"))
|
||||||
|
public void injectDrawScreen(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) {
|
||||||
|
mc.fontRenderer.drawStringWithShadow("<-- Current Version",
|
||||||
|
104, 13, -1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.ProtocolUtils;
|
||||||
|
import de.flori2007.viaforge.gui.GuiProtocolSelector;
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
import net.minecraft.client.gui.GuiMainMenu;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(GuiMainMenu.class)
|
||||||
|
public abstract class MixinGuiMainMenu extends GuiScreen {
|
||||||
|
|
||||||
|
@Inject(method = "initGui", at = @At("RETURN"))
|
||||||
|
public void injectInitGui(CallbackInfo ci) {
|
||||||
|
buttonList.add(new GuiButton(1337, 5, 6, 98, 20,
|
||||||
|
ProtocolUtils.getProtocolName(ViaFabric.clientSideVersion)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "actionPerformed", at = @At("RETURN"))
|
||||||
|
public void injectActionPerformed(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
|
||||||
|
if (p_actionPerformed_1_.id == 1337)
|
||||||
|
mc.displayGuiScreen(new GuiProtocolSelector(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "drawScreen", at = @At("RETURN"))
|
||||||
|
public void injectDrawScreen(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) {
|
||||||
|
mc.fontRenderer.drawStringWithShadow("<-- Current Version",
|
||||||
|
104, 13, -1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.ProtocolUtils;
|
||||||
|
import de.flori2007.viaforge.gui.GuiProtocolSelector;
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
import net.minecraft.client.gui.GuiMultiplayer;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(GuiMultiplayer.class)
|
||||||
|
public abstract class MixinGuiMultiplayer extends GuiScreen {
|
||||||
|
|
||||||
|
@Inject(method = "initGui", at = @At("RETURN"))
|
||||||
|
public void injectInitGui(CallbackInfo ci) {
|
||||||
|
buttonList.add(new GuiButton(1337, 5, 38, 98, 20,
|
||||||
|
ProtocolUtils.getProtocolName(ViaFabric.clientSideVersion)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "actionPerformed", at = @At("RETURN"))
|
||||||
|
public void injectActionPerformed(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
|
||||||
|
if (p_actionPerformed_1_.id == 1337)
|
||||||
|
mc.displayGuiScreen(new GuiProtocolSelector(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "drawScreen", at = @At("RETURN"))
|
||||||
|
public void injectDrawScreen(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) {
|
||||||
|
mc.fontRenderer.drawStringWithShadow("<-- Current Version",
|
||||||
|
104, 44, -1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.ProtocolUtils;
|
||||||
|
import de.flori2007.viaforge.gui.GuiProtocolSelector;
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import net.minecraft.client.gui.GuiScreenAddServer;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(GuiScreenAddServer.class)
|
||||||
|
public abstract class MixinGuiScreenAddServer extends GuiScreen {
|
||||||
|
|
||||||
|
@Inject(method = "initGui", at = @At("RETURN"))
|
||||||
|
public void injectInitGui(CallbackInfo ci) {
|
||||||
|
buttonList.add(new GuiButton(1337, 5, 6, 98, 20,
|
||||||
|
ProtocolUtils.getProtocolName(ViaFabric.clientSideVersion)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "actionPerformed", at = @At("RETURN"))
|
||||||
|
public void injectActionPerformed(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
|
||||||
|
if (p_actionPerformed_1_.id == 1337)
|
||||||
|
mc.displayGuiScreen(new GuiProtocolSelector(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "drawScreen", at = @At("RETURN"))
|
||||||
|
public void injectDrawScreen(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) {
|
||||||
|
mc.fontRenderer.drawStringWithShadow("<-- Current Version",
|
||||||
|
104, 13, -1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.ProtocolUtils;
|
||||||
|
import de.flori2007.viaforge.gui.GuiProtocolSelector;
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import net.minecraft.client.gui.GuiScreenServerList;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(GuiScreenServerList.class)
|
||||||
|
public abstract class MixinGuiScreenServerList extends GuiScreen {
|
||||||
|
|
||||||
|
@Inject(method = "initGui", at = @At("RETURN"))
|
||||||
|
public void injectInitGui(CallbackInfo ci) {
|
||||||
|
buttonList.add(new GuiButton(1337, 5, 6, 98, 20,
|
||||||
|
ProtocolUtils.getProtocolName(ViaFabric.clientSideVersion)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "actionPerformed", at = @At("RETURN"))
|
||||||
|
public void injectActionPerformed(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
|
||||||
|
if (p_actionPerformed_1_.id == 1337)
|
||||||
|
mc.displayGuiScreen(new GuiProtocolSelector(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "drawScreen", at = @At("RETURN"))
|
||||||
|
public void injectDrawScreen(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) {
|
||||||
|
mc.fontRenderer.drawStringWithShadow("<-- Current Version",
|
||||||
|
104, 13, -1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.main.GameConfiguration;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(Minecraft.class)
|
||||||
|
public abstract class MixinMinecraft {
|
||||||
|
|
||||||
|
@Inject(method = "<init>", at = @At("RETURN"))
|
||||||
|
public void injectConstructor(GameConfiguration p_i45547_1_, CallbackInfo ci) {
|
||||||
|
try {
|
||||||
|
new ViaFabric().onInitialize();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
||||||
|
import io.netty.channel.ChannelHandler;
|
||||||
|
import io.netty.channel.ChannelPipeline;
|
||||||
|
import net.minecraft.network.NetworkManager;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(NetworkManager.class)
|
||||||
|
public abstract class MixinNetworkManager {
|
||||||
|
|
||||||
|
@Redirect(method = "setCompressionThreshold", at = @At(
|
||||||
|
value = "INVOKE",
|
||||||
|
remap = false,
|
||||||
|
target = "Lio/netty/channel/ChannelPipeline;addBefore(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;"
|
||||||
|
))
|
||||||
|
private ChannelPipeline decodeEncodePlacement(ChannelPipeline instance, String base, String newHandler, ChannelHandler handler) {
|
||||||
|
// Fixes the handler order
|
||||||
|
switch (base) {
|
||||||
|
case "decoder": {
|
||||||
|
if (instance.get(CommonTransformer.HANDLER_DECODER_NAME) != null)
|
||||||
|
base = CommonTransformer.HANDLER_DECODER_NAME;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "encoder": {
|
||||||
|
if (instance.get(CommonTransformer.HANDLER_ENCODER_NAME) != null)
|
||||||
|
base = CommonTransformer.HANDLER_ENCODER_NAME;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return instance.addBefore(base, newHandler, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.injection.mixins;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
||||||
|
import com.github.creeper123123321.viafabric.handler.clientside.VRDecodeHandler;
|
||||||
|
import com.github.creeper123123321.viafabric.handler.clientside.VREncodeHandler;
|
||||||
|
import com.github.creeper123123321.viafabric.platform.VRClientSideUserConnection;
|
||||||
|
import com.github.creeper123123321.viafabric.protocol.ViaFabricHostnameProtocol;
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.socket.SocketChannel;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
import us.myles.ViaVersion.api.protocol.ProtocolPipeline;
|
||||||
|
|
||||||
|
@Mixin(targets = "net.minecraft.network.NetworkManager$5")
|
||||||
|
public abstract class MixinNetworkManagerChInit {
|
||||||
|
|
||||||
|
@Inject(method = "initChannel", at = @At(value = "TAIL"), remap = false)
|
||||||
|
private void onInitChannel(Channel channel, CallbackInfo ci) {
|
||||||
|
if (channel instanceof SocketChannel) {
|
||||||
|
|
||||||
|
UserConnection user = new VRClientSideUserConnection(channel);
|
||||||
|
new ProtocolPipeline(user).add(ViaFabricHostnameProtocol.INSTANCE);
|
||||||
|
|
||||||
|
channel.pipeline()
|
||||||
|
.addBefore("encoder", CommonTransformer.HANDLER_ENCODER_NAME, new VREncodeHandler(user))
|
||||||
|
.addBefore("decoder", CommonTransformer.HANDLER_DECODER_NAME, new VRDecodeHandler(user));
|
||||||
|
System.out.println("aaaa");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.boss.BossColor;
|
||||||
|
import us.myles.ViaVersion.api.boss.BossStyle;
|
||||||
|
import us.myles.ViaVersion.boss.CommonBoss;
|
||||||
|
|
||||||
|
public class VRBossBar extends CommonBoss<Void> {
|
||||||
|
public VRBossBar(String title, float health, BossColor color, BossStyle style) {
|
||||||
|
super(title, health, color, style);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelFuture;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
|
||||||
|
public class VRClientSideUserConnection extends UserConnection {
|
||||||
|
public VRClientSideUserConnection(Channel socketChannel) {
|
||||||
|
super(socketChannel);
|
||||||
|
}
|
||||||
|
// Based on https://github.com/Gerrygames/ClientViaVersion/blob/master/src/main/java/de/gerrygames/the5zig/clientviaversion/reflection/Injector.java
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRawPacket(final ByteBuf packet, boolean currentThread) {
|
||||||
|
Runnable act = () -> getChannel().pipeline().context(CommonTransformer.HANDLER_DECODER_NAME)
|
||||||
|
.fireChannelRead(packet);
|
||||||
|
if (currentThread) {
|
||||||
|
act.run();
|
||||||
|
} else {
|
||||||
|
getChannel().eventLoop().execute(act);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChannelFuture sendRawPacketFuture(ByteBuf packet) {
|
||||||
|
getChannel().pipeline().context(CommonTransformer.HANDLER_DECODER_NAME).fireChannelRead(packet);
|
||||||
|
return getChannel().newSucceededFuture();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRawPacketToServer(ByteBuf packet, boolean currentThread) {
|
||||||
|
if (currentThread) {
|
||||||
|
getChannel().pipeline().context(CommonTransformer.HANDLER_ENCODER_NAME).writeAndFlush(packet);
|
||||||
|
} else {
|
||||||
|
getChannel().eventLoop().submit(() -> {
|
||||||
|
getChannel().pipeline().context(CommonTransformer.HANDLER_ENCODER_NAME).writeAndFlush(packet);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
import us.myles.ViaVersion.api.platform.ViaConnectionManager;
|
||||||
|
|
||||||
|
public class VRConnectionManager extends ViaConnectionManager {
|
||||||
|
@Override
|
||||||
|
public boolean isFrontEnd(UserConnection connection) {
|
||||||
|
return !(connection instanceof VRClientSideUserConnection);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
||||||
|
import us.myles.ViaVersion.api.platform.ViaInjector;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
import us.myles.viaversion.libs.gson.JsonObject;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class VRInjector implements ViaInjector {
|
||||||
|
@Override
|
||||||
|
public void inject() {
|
||||||
|
// *looks at Mixins*
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uninject() {
|
||||||
|
// not possible *plays sad violin*
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getServerProtocolVersion() throws NoSuchFieldException, IllegalAccessException {
|
||||||
|
return getClientProtocol();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getClientProtocol() throws NoSuchFieldException, IllegalAccessException {
|
||||||
|
return 47;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getEncoderName() {
|
||||||
|
return CommonTransformer.HANDLER_ENCODER_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDecoderName() {
|
||||||
|
return CommonTransformer.HANDLER_DECODER_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonObject getDump() {
|
||||||
|
JsonObject obj = new JsonObject();
|
||||||
|
try {
|
||||||
|
obj.add("serverNetworkIOChInit", GsonUtil.getGson().toJsonTree(
|
||||||
|
Arrays.stream(Class.forName("net.minecraft.class_3242$1").getDeclaredMethods())
|
||||||
|
.map(Method::toString)
|
||||||
|
.toArray(String[]::new)));
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
obj.add("clientConnectionChInit", GsonUtil.getGson().toJsonTree(
|
||||||
|
Arrays.stream(Class.forName("net.minecraft.class_2535$1").getDeclaredMethods())
|
||||||
|
.map(Method::toString)
|
||||||
|
.toArray(String[]::new)));
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.providers.VRVersionProvider;
|
||||||
|
import us.myles.ViaVersion.api.Via;
|
||||||
|
import us.myles.ViaVersion.api.platform.ViaPlatformLoader;
|
||||||
|
import us.myles.ViaVersion.bungee.providers.BungeeMovementTransmitter;
|
||||||
|
import us.myles.ViaVersion.protocols.base.VersionProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider;
|
||||||
|
|
||||||
|
public class VRLoader implements ViaPlatformLoader {
|
||||||
|
@Override
|
||||||
|
public void load() {
|
||||||
|
Via.getManager().getProviders().use(MovementTransmitterProvider.class, new BungeeMovementTransmitter());
|
||||||
|
Via.getManager().getProviders().use(VersionProvider.class, new VRVersionProvider());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unload() {
|
||||||
|
// Nothing to do
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,237 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.FutureTaskId;
|
||||||
|
import com.github.creeper123123321.viafabric.util.JLoggerToLog4j;
|
||||||
|
import io.netty.util.concurrent.Future;
|
||||||
|
import io.netty.util.concurrent.GenericFutureListener;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import us.myles.ViaVersion.api.ViaAPI;
|
||||||
|
import us.myles.ViaVersion.api.ViaVersionConfig;
|
||||||
|
import us.myles.ViaVersion.api.command.ViaCommandSender;
|
||||||
|
import us.myles.ViaVersion.api.configuration.ConfigurationProvider;
|
||||||
|
import us.myles.ViaVersion.api.platform.TaskId;
|
||||||
|
import us.myles.ViaVersion.api.platform.ViaConnectionManager;
|
||||||
|
import us.myles.ViaVersion.api.platform.ViaPlatform;
|
||||||
|
import us.myles.viaversion.libs.bungeecordchat.api.chat.TextComponent;
|
||||||
|
import us.myles.viaversion.libs.bungeecordchat.chat.ComponentSerializer;
|
||||||
|
import us.myles.viaversion.libs.gson.JsonObject;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.CancellationException;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class VRPlatform implements ViaPlatform<UUID> {
|
||||||
|
private final Logger logger = new JLoggerToLog4j(LogManager.getLogger("ViaVersion"));
|
||||||
|
private final VRViaConfig config;
|
||||||
|
private final File dataFolder;
|
||||||
|
private final ViaConnectionManager connectionManager;
|
||||||
|
private final ViaAPI<UUID> api;
|
||||||
|
|
||||||
|
public VRPlatform() {
|
||||||
|
Path configDir = Minecraft.getMinecraft().gameDir.toPath().resolve("ViaFabric");
|
||||||
|
config = new VRViaConfig(configDir.resolve("viaversion.yml").toFile());
|
||||||
|
dataFolder = configDir.toFile();
|
||||||
|
connectionManager = new VRConnectionManager();
|
||||||
|
api = new VRViaAPI();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MinecraftServer getServer() {
|
||||||
|
// In 1.8.9 integrated server instance exists even if it's not running
|
||||||
|
if (!Minecraft.getMinecraft().isIntegratedServerRunning()) return null;
|
||||||
|
return Minecraft.getMinecraft().getIntegratedServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Logger getLogger() {
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlatformName() {
|
||||||
|
return "ViaFabric";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlatformVersion() {
|
||||||
|
return ViaFabric.getVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPluginVersion() {
|
||||||
|
return "3.3.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskId runAsync(Runnable runnable) {
|
||||||
|
return new FutureTaskId(CompletableFuture
|
||||||
|
.runAsync(runnable, ViaFabric.ASYNC_EXECUTOR)
|
||||||
|
.exceptionally(throwable -> {
|
||||||
|
if (!(throwable instanceof CancellationException)) {
|
||||||
|
throwable.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskId runSync(Runnable runnable) {
|
||||||
|
if (getServer() != null) {
|
||||||
|
return runServerSync(runnable);
|
||||||
|
} else {
|
||||||
|
return runEventLoop(runnable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private TaskId runServerSync(Runnable runnable) {
|
||||||
|
// Kick task needs to be on main thread, it does already have error logger
|
||||||
|
return new FutureTaskId(CompletableFuture.runAsync(runnable, it -> getServer().callFromMainThread((Callable
|
||||||
|
<Void>) () -> {
|
||||||
|
it.run();
|
||||||
|
return null;
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TaskId runEventLoop(Runnable runnable) {
|
||||||
|
return new FutureTaskId(
|
||||||
|
ViaFabric.EVENT_LOOP
|
||||||
|
.submit(runnable)
|
||||||
|
.addListener(errorLogger())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskId runSync(Runnable runnable, Long ticks) {
|
||||||
|
// ViaVersion seems to not need to run delayed tasks on main thread
|
||||||
|
return new FutureTaskId(
|
||||||
|
ViaFabric.EVENT_LOOP
|
||||||
|
.schedule(() -> runSync(runnable), ticks * 50, TimeUnit.MILLISECONDS)
|
||||||
|
.addListener(errorLogger())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskId runRepeatingSync(Runnable runnable, Long ticks) {
|
||||||
|
// ViaVersion seems to not need to run repeating tasks on main thread
|
||||||
|
return new FutureTaskId(
|
||||||
|
ViaFabric.EVENT_LOOP
|
||||||
|
.scheduleAtFixedRate(() -> runSync(runnable), 0, ticks * 50, TimeUnit.MILLISECONDS)
|
||||||
|
.addListener(errorLogger())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T extends Future<?>> GenericFutureListener<T> errorLogger() {
|
||||||
|
return future -> {
|
||||||
|
if (!future.isCancelled() && future.cause() != null) {
|
||||||
|
future.cause().printStackTrace();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancelTask(TaskId taskId) {
|
||||||
|
if (taskId instanceof FutureTaskId) {
|
||||||
|
((FutureTaskId) taskId).getObject().cancel(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViaCommandSender[] getOnlinePlayers() {
|
||||||
|
return new ViaCommandSender[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID uuid, String s) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean kickPlayer(UUID uuid, String s) {
|
||||||
|
return kickServer(uuid, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean kickServer(UUID uuid, String s) {
|
||||||
|
return false; // Can't know if it worked
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPluginEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViaAPI<UUID> getApi() {
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViaVersionConfig getConf() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConfigurationProvider getConfigurationProvider() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getDataFolder() {
|
||||||
|
return dataFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReload() {
|
||||||
|
// Nothing to do
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonObject getDump() {
|
||||||
|
return new JsonObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOldClientsAllowed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViaConnectionManager getConnectionManager() {
|
||||||
|
return connectionManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String legacyToJson(String legacy) {
|
||||||
|
return ComponentSerializer.toString(TextComponent.fromLegacyText(legacy));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import us.myles.ViaVersion.api.Via;
|
||||||
|
import us.myles.ViaVersion.api.ViaAPI;
|
||||||
|
import us.myles.ViaVersion.api.boss.BossBar;
|
||||||
|
import us.myles.ViaVersion.api.boss.BossColor;
|
||||||
|
import us.myles.ViaVersion.api.boss.BossStyle;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
|
||||||
|
|
||||||
|
import java.util.SortedSet;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class VRViaAPI implements ViaAPI<UUID> {
|
||||||
|
@Override
|
||||||
|
public int getPlayerVersion(UUID uuid) {
|
||||||
|
UserConnection con = Via.getManager().getConnection(uuid);
|
||||||
|
if (con != null) {
|
||||||
|
return con.getProtocolInfo().getProtocolVersion();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return Via.getManager().getInjector().getServerProtocolVersion();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInjected(UUID uuid) {
|
||||||
|
return Via.getManager().isClientConnected(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getVersion() {
|
||||||
|
return Via.getPlatform().getPluginVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRawPacket(UUID uuid, ByteBuf byteBuf) throws IllegalArgumentException {
|
||||||
|
UserConnection ci = Via.getManager().getConnection(uuid);
|
||||||
|
ci.sendRawPacket(byteBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BossBar<Void> createBossBar(String s, BossColor bossColor, BossStyle bossStyle) {
|
||||||
|
return new VRBossBar(s, 1f, bossColor, bossStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BossBar<Void> createBossBar(String s, float v, BossColor bossColor, BossStyle bossStyle) {
|
||||||
|
return new VRBossBar(s, v, bossColor, bossStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SortedSet<Integer> getSupportedVersions() {
|
||||||
|
SortedSet<Integer> outputSet = new TreeSet<>(ProtocolRegistry.getSupportedVersions());
|
||||||
|
outputSet.removeAll(Via.getPlatform().getConf().getBlockedProtocols());
|
||||||
|
|
||||||
|
return outputSet;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.platform;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.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",
|
||||||
|
"item-cache", "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 isItemCache() {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.github.creeper123123321.viafabric.protocol;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
|
import us.myles.ViaVersion.api.protocol.SimpleProtocol;
|
||||||
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
|
import us.myles.ViaVersion.api.remapper.ValueTransformer;
|
||||||
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
import us.myles.ViaVersion.packets.State;
|
||||||
|
|
||||||
|
public class ViaFabricHostnameProtocol extends SimpleProtocol {
|
||||||
|
public static final ViaFabricHostnameProtocol INSTANCE = new ViaFabricHostnameProtocol();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerPackets() {
|
||||||
|
registerIncoming(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 s;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.providers;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.platform.VRClientSideUserConnection;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
import us.myles.ViaVersion.protocols.base.VersionProvider;
|
||||||
|
|
||||||
|
public class VRVersionProvider extends VersionProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getServerProtocol(UserConnection connection) throws Exception {
|
||||||
|
if (connection instanceof VRClientSideUserConnection) {
|
||||||
|
return ViaFabric.clientSideVersion;
|
||||||
|
}
|
||||||
|
return super.getServerProtocol(connection);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.util;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.platform.TaskId;
|
||||||
|
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
public class FutureTaskId implements TaskId {
|
||||||
|
private final Future<?> object;
|
||||||
|
|
||||||
|
public FutureTaskId(Future<?> object) {
|
||||||
|
this.object = object;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Future<?> getObject() {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018- creeper123123321 <https://creeper123123321.keybase.pub/>
|
||||||
|
* Copyright (c) 2019- contributors <https://github.com/ViaVersion/ViaFabric/graphs/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.viafabric.util;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
||||||
|
|
||||||
|
public class ProtocolUtils {
|
||||||
|
|
||||||
|
public static String getProtocolName(int id) {
|
||||||
|
if (!ProtocolVersion.isRegistered(id)) return Integer.toString(id);
|
||||||
|
return ProtocolVersion.getProtocol(id).getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
package de.flori2007.viaforge.gui;
|
||||||
|
|
||||||
|
import com.github.creeper123123321.viafabric.ViaFabric;
|
||||||
|
import com.github.creeper123123321.viafabric.util.ProtocolUtils;
|
||||||
|
import com.mojang.realmsclient.gui.ChatFormatting;
|
||||||
|
import de.flori2007.viaforge.utils.ProtocolSorter;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import net.minecraft.client.gui.GuiSlot;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class GuiProtocolSelector extends GuiScreen {
|
||||||
|
|
||||||
|
public SlotList list;
|
||||||
|
|
||||||
|
private GuiScreen parent;
|
||||||
|
|
||||||
|
public GuiProtocolSelector(GuiScreen parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initGui() {
|
||||||
|
super.initGui();
|
||||||
|
buttonList.add(new GuiButton(1, width / 2 - 100, height - 27, 200,
|
||||||
|
20, "Back"));
|
||||||
|
|
||||||
|
list = new SlotList(mc, width, height, 32, height - 32, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void actionPerformed(GuiButton p_actionPerformed_1_) throws IOException {
|
||||||
|
list.actionPerformed(p_actionPerformed_1_);
|
||||||
|
|
||||||
|
if (p_actionPerformed_1_.id == 1)
|
||||||
|
mc.displayGuiScreen(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleMouseInput() throws IOException {
|
||||||
|
list.handleMouseInput();
|
||||||
|
super.handleMouseInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawScreen(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_) {
|
||||||
|
list.drawScreen(p_drawScreen_1_, p_drawScreen_2_, p_drawScreen_3_);
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glScalef(2.0F, 2.0F, 2.0F);
|
||||||
|
this.drawCenteredString(this.fontRenderer, ChatFormatting.GOLD.toString() + "ViaForge",
|
||||||
|
this.width / 4, 6, 16777215);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
drawString(this.fontRenderer, "by Flori2007", 1, 1, -1);
|
||||||
|
|
||||||
|
super.drawScreen(p_drawScreen_1_, p_drawScreen_2_, p_drawScreen_3_);
|
||||||
|
}
|
||||||
|
|
||||||
|
class SlotList extends GuiSlot {
|
||||||
|
|
||||||
|
|
||||||
|
public SlotList(Minecraft p_i1052_1_, int p_i1052_2_, int p_i1052_3_, int p_i1052_4_, int p_i1052_5_, int p_i1052_6_) {
|
||||||
|
super(p_i1052_1_, p_i1052_2_, p_i1052_3_, p_i1052_4_, p_i1052_5_, p_i1052_6_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getSize() {
|
||||||
|
return ProtocolSorter.getProtocolVersions().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void elementClicked(int i, boolean b, int i1, int i2) {
|
||||||
|
ViaFabric.clientSideVersion = ProtocolSorter.getProtocolVersions().get(i).getVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isSelected(int i) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawBackground() {
|
||||||
|
drawDefaultBackground();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawSlot(int i, int i1, int i2, int unknown, int i3, int i4, float i5) {
|
||||||
|
drawCenteredString(mc.fontRenderer,(ViaFabric.clientSideVersion ==
|
||||||
|
ProtocolSorter.getProtocolVersions().get(i).getVersion() ? ChatFormatting.GREEN.toString() :
|
||||||
|
ChatFormatting.DARK_RED.toString()) + ProtocolUtils.getProtocolName(ProtocolSorter.
|
||||||
|
getProtocolVersions().get(i).getVersion()), width / 2, i2 + 2, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package de.flori2007.viaforge.platform;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
|
import nl.matsv.viabackwards.api.ViaBackwardsConfig;
|
||||||
|
import nl.matsv.viabackwards.api.ViaBackwardsPlatform;
|
||||||
|
import us.myles.ViaVersion.api.Via;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class ViaBackwardsPlatformImplementation implements ViaBackwardsPlatform {
|
||||||
|
|
||||||
|
public ViaBackwardsPlatformImplementation() {
|
||||||
|
ViaBackwards.init(this, new ViaBackwardsConfig() {
|
||||||
|
@Override
|
||||||
|
public boolean addCustomEnchantsToLore() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addTeamColorTo1_13Prefix() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFix1_13FacePlayer() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean alwaysShowOriginalMobName() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
init(Minecraft.getMinecraft().gameDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Logger getLogger() {
|
||||||
|
return Via.getPlatform().getLogger();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disable() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOutdated() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getDataFolder() {
|
||||||
|
return Minecraft.getMinecraft().gameDir;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package de.flori2007.viaforge.platform;
|
||||||
|
|
||||||
|
import de.gerrygames.viarewind.api.ViaRewindConfig;
|
||||||
|
import de.gerrygames.viarewind.api.ViaRewindPlatform;
|
||||||
|
import us.myles.ViaVersion.api.Via;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class ViaRewindPlatformImplementation implements ViaRewindPlatform {
|
||||||
|
|
||||||
|
public ViaRewindPlatformImplementation() {
|
||||||
|
init(new ViaRewindConfig() {
|
||||||
|
@Override
|
||||||
|
public CooldownIndicator getCooldownIndicator() {
|
||||||
|
return CooldownIndicator.TITLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReplaceAdventureMode() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReplaceParticles() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Logger getLogger() {
|
||||||
|
return Via.getPlatform().getLogger();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package de.flori2007.viaforge.utils;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.protocol.ProtocolVersion;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
public class ProtocolSorter {
|
||||||
|
|
||||||
|
private static final LinkedList<ProtocolVersion> protocolVersions = new LinkedList<>();
|
||||||
|
|
||||||
|
private static int count = 0;
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (Field f : ProtocolVersion.class.getDeclaredFields()) {
|
||||||
|
if (f.getType().equals(ProtocolVersion.class)) {
|
||||||
|
count++;
|
||||||
|
try {
|
||||||
|
ProtocolVersion ver = (ProtocolVersion) f.get(null);
|
||||||
|
|
||||||
|
if (count >= 8 && !ver.getName().equals("UNKNOWN"))
|
||||||
|
getProtocolVersions().add(ver);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.reverse(getProtocolVersions());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LinkedList<ProtocolVersion> getProtocolVersions() {
|
||||||
|
return protocolVersions;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
src/main/resources/assets/viafabric/config.yml
Normal file
12
src/main/resources/assets/viafabric/config.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# WARNING
|
||||||
|
# I cannot guarantee that this mod is allowed on every (or even any) server. This mod may cause problems with anti cheat plugins. USE AT OWN RISK
|
||||||
|
# This option enables client-side transforming (can also be enabled in-game)
|
||||||
|
enable-client-side: false
|
||||||
|
# This option sets the protocol version to be used when connection to the server (can also be changed in-game)
|
||||||
|
client-side-version: -1
|
||||||
|
# Hides VIA button from multiplayer menu.
|
||||||
|
hide-button: false
|
||||||
|
# List of servers which ViaFabric will force disabling transforming on client-side. It can be overwritten by setting per-server version.
|
||||||
|
# This isn't always the address in multiplayer GUI. It will use the SRV record pointer when present. Check the game log for the address.
|
||||||
|
# Uses https://wiki.vg/Mojang_API#Blocked_Servers format (mc.example.com, *.example.com, 192.168.0.1, 192.168.*)
|
||||||
|
client-side-force-disable: ["hypixel.net", "*.hypixel.net", "hivemc.com", "*.hivemc.com", "hivemc.eu", "*.hivemc.eu"]
|
12
src/main/resources/assets/viafabric/lang/de_DE.lang
Normal file
12
src/main/resources/assets/viafabric/lang/de_DE.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Protokoll Version
|
||||||
|
gui.enable_client_side_button=ViaVersion aktivieren
|
||||||
|
gui.enable_client_side.question=Bist du dir sicher, dass du den clientseitigen Modus aktivieren möchtest?
|
||||||
|
gui.enable_client_side.warning=Ich kann nicht garantieren, dass diese Mod auf jedem (oder überhaupt einem) Server erlaubt ist. Diese Mod könnte eventuell Probleme mit Anti-Cheat Plugins hervorrufen. VERWENDUNG AUF EIGENE GEFAHR.
|
||||||
|
gui.enable_client_side.enable=Aktivieren
|
||||||
|
gui.viafabric_config.title=ViaFabric-Konfigurationen
|
||||||
|
gui.client_side.enable=Clientseitig aktivieren
|
||||||
|
gui.client_side.disable=Clientseitig deaktivieren
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=VIA Button ausblenden
|
||||||
|
gui.hide_via_button.disable=VIA Button anzeigen
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/en_US.lang
Normal file
12
src/main/resources/assets/viafabric/lang/en_US.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Protocol Version
|
||||||
|
gui.enable_client_side_button=Enable ViaVersion
|
||||||
|
gui.enable_client_side.question=Are you sure you want to enable client-side mode?
|
||||||
|
gui.enable_client_side.warning=I cannot guarantee that this mod is allowed on every (or even any) server. This mod may cause problems with anti-cheat plugins. USE AT OWN RISK.
|
||||||
|
gui.enable_client_side.enable=Enable
|
||||||
|
gui.viafabric_config.title=ViaFabric Configurations
|
||||||
|
gui.client_side.enable=Enable client-side
|
||||||
|
gui.client_side.disable=Disable client-side
|
||||||
|
gui.ping_version.translated"=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Hide VIA button
|
||||||
|
gui.hide_via_button.disable=Show VIA button
|
||||||
|
gui.via_button="VIA
|
12
src/main/resources/assets/viafabric/lang/es_ES.lang
Normal file
12
src/main/resources/assets/viafabric/lang/es_ES.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Versión del protocolo
|
||||||
|
gui.enable_client_side_button=Activar ViaVersion
|
||||||
|
gui.enable_client_side.question=¿Estás seguro de que quieres habilitar el modo de lado del cliente?
|
||||||
|
gui.enable_client_side.warning=No puedo garantizar que este mod esté permitido en todos (o incluso en cualquier) los servidores. Este mod puede causar problemas con los plugins anti-cheat. EL USO DE ESTE MOD ES BAJO SU PROPIO RIESGO.
|
||||||
|
gui.enable_client_side.enable=Activar
|
||||||
|
gui.viafabric_config.title=Configuraciones de ViaFabric
|
||||||
|
gui.client_side.enable=Activar el lado del cliente
|
||||||
|
gui.client_side.disable=Desactivar el lado del cliente
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Ocultar el botón VIA
|
||||||
|
gui.hide_via_button.disable=Mostrar el botón VIA
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/et_EE.lang
Normal file
12
src/main/resources/assets/viafabric/lang/et_EE.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Protokolli versioon
|
||||||
|
gui.enable_client_side_button=Luba ViaVersion
|
||||||
|
gui.enable_client_side.question=Kas soovid kindlasti lubada kliendipoolse režiimi?
|
||||||
|
gui.enable_client_side.warning=Ma ei saa garanteerida selle modi lubamist igas (mistahes) serveris. See mod võib põhjustada sohivastaste pluginatega probleeme. KASUTA OMAL VASTUTUSEL.
|
||||||
|
gui.enable_client_side.enable=Luba
|
||||||
|
gui.viafabric_config.title=ViaFabricu seadistused
|
||||||
|
gui.client_side.enable=Luba kliendipoolne
|
||||||
|
gui.client_side.disable=Keela kliendipoolne
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Peida VIA nupp
|
||||||
|
gui.hide_via_button.disable=Kuva VIA nuppu
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/fr_FR.lang
Normal file
12
src/main/resources/assets/viafabric/lang/fr_FR.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Version du protocole
|
||||||
|
gui.enable_client_side_button=Activer ViaVersion
|
||||||
|
gui.enable_client_side.question=Êtes vous sûr de vouloir activer le mode coté client ?
|
||||||
|
gui.enable_client_side.warning=Je ne peux pas vous garantir que ce mod est autorisé dans tous (ou même aucun) serveur. Ce mod peut causer des problèmes avec les plugin anti-cheat. À UTILISEZ À VOS RISQUES ET PERILS.
|
||||||
|
gui.enable_client_side.enable=Activer
|
||||||
|
gui.viafabric_config.title=Configuration de ViaFabric
|
||||||
|
gui.client_side.enable=Activer coté client
|
||||||
|
gui.client_side.disable=Désactiver coté client
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Cacher le bouton VIA
|
||||||
|
gui.hide_via_button.disable=Montrer le bouton VIA
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/it_IT.lang
Normal file
12
src/main/resources/assets/viafabric/lang/it_IT.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Versione del protocollo
|
||||||
|
gui.enable_client_side_button=Attivare ViaVersion
|
||||||
|
gui.enable_client_side.question=Siete sicuri di voler attivare la modalità lato cliente?
|
||||||
|
gui.enable_client_side.warning=Non posso garantire che questo mod sia consentito su ogni server (o anche solo su uno qualsiasi). Questo mod può causare problemi con i plugin anti-cheat. USO A PROPRIO RISCHIO E PERICOLO.
|
||||||
|
gui.enable_client_side.enable=Attivare
|
||||||
|
gui.viafabric_config.title=Configurazioni ViaFabric
|
||||||
|
gui.client_side.enable=Attivare lato cliente
|
||||||
|
gui.client_side.disable=Disattivare lato cliente
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Nascondi il pulsante VIA
|
||||||
|
gui.hide_via_button.disable=Mostra il pulsante VIA
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/ja_JP.lang
Normal file
12
src/main/resources/assets/viafabric/lang/ja_JP.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=プロトコルバージョン
|
||||||
|
gui.enable_client_side_button=ViaVersionを有効にする
|
||||||
|
gui.enable_client_side.question=本当にクライアントサイドモードを有効にしますか?
|
||||||
|
gui.enable_client_side.warning=私はこのMODがすべての(あるいはどのサーバーでも)許可されていることを保証することはできません。このMODはアンチチートプラグインの問題を引き起こす可能性があります。自己責任で使用してください。
|
||||||
|
gui.enable_client_side.enable=有効化
|
||||||
|
gui.viafabric_config.title=ViaFabricの構成
|
||||||
|
gui.client_side.enable=クライアント側を有効にする
|
||||||
|
gui.client_side.disable=クライアント側を無効にする
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=VIAボタンを隠す
|
||||||
|
gui.hide_via_button.disable=VIAボタンを表示
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/nl_NL.lang
Normal file
12
src/main/resources/assets/viafabric/lang/nl_NL.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Protocolversie
|
||||||
|
gui.enable_client_side_button=Schakel ViaVersion in
|
||||||
|
gui.enable_client_side.question=Weet u zeker dat u de client-side modus wilt inschakelen?
|
||||||
|
gui.enable_client_side.warning=Ik kan niet garanderen dat deze mod op elke (of zelfs maar één) server is toegestaan. Deze mod kan problemen veroorzaken met anti-cheat plugins. GEBRUIK OP EIGEN RISICO.
|
||||||
|
gui.enable_client_side.enable=Schakel in
|
||||||
|
gui.viafabric_config.title=ViaFabric-configuraties
|
||||||
|
gui.client_side.enable=Klantenservice inschakelen
|
||||||
|
gui.client_side.disable=Cliëntenservice uitschakelen
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=VIA-knop verbergen
|
||||||
|
gui.hide_via_button.disable=Toon VIA-knop
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/pl_PL.lang
Normal file
12
src/main/resources/assets/viafabric/lang/pl_PL.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Wersja protokołu
|
||||||
|
gui.enable_client_side_button=Włącz ViaVersion
|
||||||
|
gui.enable_client_side.question=Jesteś pewien, że chcesz włączyć tryb client-side?
|
||||||
|
gui.enable_client_side.warning=Nie możemy zagwarantować, że ten mod jest dozwolony na każdym (lub jakimkolwiek) serwerze. Ten mod może powodować problemy z anty-cheatami. UŻYWASZ NA WŁASNE RYZYKO!.
|
||||||
|
gui.enable_client_side.enable=Włączyć
|
||||||
|
gui.viafabric_config.title=Konfiguracje ViaFabric
|
||||||
|
gui.client_side.enable=Włączenie po stronie klienta
|
||||||
|
gui.client_side.disable=Wyłączenie po stronie klienta
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Ukrycie przycisku VIA
|
||||||
|
gui.hide_via_button.disable=Pokaż przycisk VIA
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/pt_BR.lang
Normal file
12
src/main/resources/assets/viafabric/lang/pt_BR.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Versão do protocolo
|
||||||
|
gui.enable_client_side_button=Habilitar ViaVersion
|
||||||
|
gui.enable_client_side.question=Você tem certeza de que deseja habilitar o modo cliente?
|
||||||
|
gui.enable_client_side.warning=Não posso garantir que este mod seja permitido em todos os (ou mesmo em quaisquer) servidores. Esse poderá causar problemas com plugins anti-trapaça. USE POR SUA PRÓPRIA CONTA E RISCO.
|
||||||
|
gui.enable_client_side.enable=Habilitar
|
||||||
|
gui.viafabric_config.title=Configurações de ViaFabric
|
||||||
|
gui.client_side.enable=Habilitar modo cliente
|
||||||
|
gui.client_side.disable=Desativar modo cliente
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Esconder botão VIA
|
||||||
|
gui.hide_via_button.disable=Mostrar botão VIA
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/ru_RU.lang
Normal file
12
src/main/resources/assets/viafabric/lang/ru_RU.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Версия протокола
|
||||||
|
gui.enable_client_side_button=Включить ViaFabric
|
||||||
|
gui.enable_client_side.question=Вы уверены, что хотите включить мод на стороне клиента?
|
||||||
|
gui.enable_client_side.warning=Я не могу гарантировать, что этот мод разрешен на любом сервере. Он может вызвать проблемы с анти-чит плагинами. ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК.
|
||||||
|
gui.enable_client_side.enable=Включить
|
||||||
|
gui.viafabric_config.title=Настройка ViaFabric
|
||||||
|
gui.client_side.enable=Включить на стороне клиент
|
||||||
|
gui.client_side.disable=Выключить на стороне клиента
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=Скрыть кнопку VIA
|
||||||
|
gui.hide_via_button.disable=Показать кнопку VIA
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/tr_TR.lang
Normal file
12
src/main/resources/assets/viafabric/lang/tr_TR.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=Protokol Versiyonu
|
||||||
|
gui.enable_client_side_button=ViaVersion'u aktive et
|
||||||
|
gui.enable_client_side.question=Alıcı-tarafı modunu aktive etmek istediğinize min misiniz?
|
||||||
|
gui.enable_client_side.warning=Bu modun her ( veya herhangi ) bir sunucuda izin verildiğine garanti veremem. Bu mod anti-cheat pluginleriyle sorunlara yol açabilir. KENDİ RİSKİNİZDE KULLANIN.
|
||||||
|
gui.enable_client_side.enable=Aktive et
|
||||||
|
gui.viafabric_config.title=ViaFabric Konfigürasyonu
|
||||||
|
gui.client_side.enable=Alıcı-tarafı aktive et
|
||||||
|
gui.client_side.disable=Alıcı-tarafı devre dışı bırak
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=VIA tuşunu gizle
|
||||||
|
gui.hide_via_button.disable=VIA tuşunu göster
|
||||||
|
gui.via_button=VIA
|
12
src/main/resources/assets/viafabric/lang/zh_CN.lang
Normal file
12
src/main/resources/assets/viafabric/lang/zh_CN.lang
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
gui.protocol_version_field.name=协议版本
|
||||||
|
gui.enable_client_side_button=启用 ViaVersion
|
||||||
|
gui.enable_client_side.question=您确定要启用客户端模式?
|
||||||
|
gui.enable_client_side.warning=我无法保证所有(甚至任何一个)服务器允许您使用这个 mod。这个 mod 可能被反作弊插件作出误判。使用后果自负。
|
||||||
|
gui.enable_client_side.enable=启用
|
||||||
|
gui.viafabric_config.title=ViaFabric配置
|
||||||
|
gui.client_side.enable=启用客户端
|
||||||
|
gui.client_side.disable=禁用客户端
|
||||||
|
gui.ping_version.translated=VIA: %s
|
||||||
|
gui.hide_via_button.enable=隐藏VIA按钮
|
||||||
|
gui.hide_via_button.disable=显示VIA按钮
|
||||||
|
gui.via_button=VIA
|
BIN
src/main/resources/assets/viafabric/textures/gui/widgets.png
Normal file
BIN
src/main/resources/assets/viafabric/textures/gui/widgets.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
src/main/resources/assets/viafabric/textures/logo.png
Normal file
BIN
src/main/resources/assets/viafabric/textures/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
10
src/main/resources/mcmod.info
Normal file
10
src/main/resources/mcmod.info
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[{
|
||||||
|
"modid": "viaforge",
|
||||||
|
"name": "Via Forge",
|
||||||
|
"description": "Clientside Implemention of ViaVersion for Forge",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
"mcversion": "1.8.9",
|
||||||
|
"url": "github.com/FlorianMichael",
|
||||||
|
"authorList": ["EnZaXD", "Flori2007"],
|
||||||
|
"credits": "Ty to ViaVersion for making the Protocol Translator 'ViaVersion'"
|
||||||
|
}]
|
16
src/main/resources/mixins.viaforge.json
Normal file
16
src/main/resources/mixins.viaforge.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"required": true,
|
||||||
|
"package": "com.github.creeper123123321.viafabric.injection.mixins",
|
||||||
|
"refmap": "mixins.viaforge.refmap.json",
|
||||||
|
"compatibilityLevel": "JAVA_8",
|
||||||
|
"mixins": [
|
||||||
|
"MixinGuiDisconnected",
|
||||||
|
"MixinGuiMainMenu",
|
||||||
|
"MixinGuiMultiplayer",
|
||||||
|
"MixinGuiScreenAddServer",
|
||||||
|
"MixinGuiScreenServerList",
|
||||||
|
"MixinMinecraft",
|
||||||
|
"MixinNetworkManager",
|
||||||
|
"MixinNetworkManagerChInit"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user