Added config to save selected protocol version and to disable ViaForge button + javadoc

This commit is contained in:
FlorianMichael 2023-10-21 21:51:02 +02:00
parent 9f4c642b5a
commit 04f297e1bb
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
36 changed files with 311 additions and 62 deletions

View File

@ -20,6 +20,8 @@ package de.florianmichael.viaforge.common;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import de.florianmichael.viaforge.common.platform.ViaForgeConfig;
import de.florianmichael.viaforge.common.protocolhack.ViaForgeVLInjector;
import de.florianmichael.viaforge.common.protocolhack.ViaForgeVLLegacyPipeline;
import de.florianmichael.viaforge.common.protocolhack.ViaForgeVLLoader;
@ -28,20 +30,34 @@ import io.netty.channel.socket.SocketChannel;
import net.raphimc.vialoader.ViaLoader;
import net.raphimc.vialoader.impl.platform.ViaBackwardsPlatformImpl;
import net.raphimc.vialoader.impl.platform.ViaRewindPlatformImpl;
import net.raphimc.vialoader.impl.platform.ViaVersionPlatformImpl;
import net.raphimc.vialoader.netty.CompressionReorderEvent;
import net.raphimc.vialoader.util.VersionEnum;
import java.io.File;
/**
* This class is used to manage the common code between the different ViaForge versions.
* It is used to inject the ViaVersion pipeline into the netty pipeline. It also manages the target version.
*/
public class ViaForgeCommon {
private static ViaForgeCommon manager;
private final PlatformFields platform;
private final VFPlatform platform;
private VersionEnum targetVersion;
public ViaForgeCommon(PlatformFields platform) {
private ViaForgeConfig config;
public ViaForgeCommon(VFPlatform platform) {
this.platform = platform;
}
public static void init(final PlatformFields platform) {
/**
* Initializes the manager.
*
* @param platform the platform fields
*/
public static void init(final VFPlatform platform) {
if (manager != null) {
return; // Already initialized, ignore it then :tm:
}
@ -51,11 +67,25 @@ public class ViaForgeCommon {
}
manager = new ViaForgeCommon(platform);
manager.setTargetVersion(version);
ViaLoader.init(null, new ViaForgeVLLoader(), new ViaForgeVLInjector(), null, ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new);
final File mainFolder = new File(platform.getLeadingDirectory(), "ViaForge");
ViaLoader.init(new ViaVersionPlatformImpl(mainFolder), new ViaForgeVLLoader(), new ViaForgeVLInjector(), null, ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new);
manager.config = new ViaForgeConfig(new File(mainFolder, "viaforge.yml"));
final VersionEnum configVersion = VersionEnum.fromProtocolId(manager.config.getClientSideVersion());
if (configVersion != VersionEnum.UNKNOWN) {
manager.setTargetVersion(configVersion);
} else {
manager.setTargetVersion(version);
}
}
/**
* Injects the ViaVersion pipeline into the netty pipeline.
*
* @param channel the channel to inject the pipeline into
*/
public void inject(final Channel channel) {
if (channel instanceof SocketChannel && targetVersion != getNativeVersion()) {
final UserConnection user = new UserConnectionImpl(channel, true);
@ -65,6 +95,11 @@ public class ViaForgeCommon {
}
}
/**
* Reorders the compression channel.
*
* @param channel the channel to reorder the compression for
*/
public void reorderCompression(final Channel channel) {
channel.pipeline().fireUserEventTriggered(CompressionReorderEvent.INSTANCE);
}
@ -79,12 +114,17 @@ public class ViaForgeCommon {
public void setTargetVersion(VersionEnum targetVersion) {
this.targetVersion = targetVersion;
config.setClientSideVersion(targetVersion.getVersion());
}
public PlatformFields getPlatform() {
public VFPlatform getPlatform() {
return platform;
}
public ViaForgeConfig getConfig() {
return config;
}
public static ViaForgeCommon getManager() {
return manager;
}

View File

@ -15,13 +15,28 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.florianmichael.viaforge.common;
package de.florianmichael.viaforge.common.platform;
import java.io.File;
import java.util.function.Supplier;
public interface PlatformFields {
/**
* This interface is used to access platform specific fields.
*/
public interface VFPlatform {
/**
* @return the native version of the platform
*/
int getGameVersion();
/**
* @return if the client is in singleplayer
*/
Supplier<Boolean> isSingleplayer();
/**
* @return the leading directory of the platform
*/
File getLeadingDirectory();
}

View File

@ -0,0 +1,60 @@
package de.florianmichael.viaforge.common.platform;
import com.viaversion.viaversion.util.Config;
import java.io.File;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class ViaForgeConfig extends Config {
public final static String CLIENT_SIDE_VERSION = "client-side-version";
public final static String SHOW_MAIN_MENU_BUTTON = "show-main-menu-button";
public final static String SHOW_MULTIPLAYER_BUTTON = "show-multiplayer-button";
public final static String SHOW_DIRECT_CONNECT_BUTTON = "show-direct-connect-button";
/**
* @param configFile The location of where the config is loaded/saved.
*/
public ViaForgeConfig(File configFile) {
super(configFile);
reload();
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viaforge/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> config) {
}
@Override
public List<String> getUnsupportedOptions() {
return Collections.emptyList();
}
public int getClientSideVersion() {
return getInt(CLIENT_SIDE_VERSION, 0);
}
public void setClientSideVersion(final int version) {
set(CLIENT_SIDE_VERSION, version);
save();
}
public boolean isShowMainMenuButton() {
return getBoolean(SHOW_MAIN_MENU_BUTTON, true);
}
public boolean isShowMultiplayerButton() {
return getBoolean(SHOW_MULTIPLAYER_BUTTON, true);
}
public boolean isShowDirectConnectButton() {
return getBoolean(SHOW_DIRECT_CONNECT_BUTTON, true);
}
}

View File

@ -0,0 +1,14 @@
# Disclaimer:
# It cannot be guaranteed that this mod is allowed on specific servers as it can possibly cause problems with anti-cheat plugins, (USE ONLY WITH CAUTION!)
#
# This option sets the protocol version to be used when connecting to servers. (can also be changed in-game)
client-side-version: -1
#
# This option indicates if the ViaForge button should be shown in the main menu.
show-main-menu-button: true
#
# This option indicates if the ViaForge button should be shown in the multiplayer.
show-multiplayer-button: true
#
# This option indicates if the ViaForge button should be shown in the direct connect screen.
show-direct-connect-button: true

View File

@ -17,13 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.client.Minecraft;
import net.minecraft.realms.RealmsSharedConstants;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
public class ViaForge112 implements PlatformFields {
@Mod(modid = "viaforge")
public class ViaForge112 implements VFPlatform {
public final static ViaForge112 PLATFORM = new ViaForge112();
@Override
@ -35,4 +38,9 @@ public class ViaForge112 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getMinecraft().isSingleplayer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getMinecraft().gameDir;
}
}

View File

@ -31,15 +31,19 @@ public class MixinGuiMainMenu extends GuiScreen {
@Inject(method = "initGui", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
buttonList.add(new GuiButton(1337, 5, 6, 98, 20, "ViaForge"));
ViaForgeCommon.init(ViaForge112.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
buttonList.add(new GuiButton(1_000_000_000, 5, 6, 98, 20, "ViaForge"));
}
}
@Inject(method = "actionPerformed", at = @At("RETURN"))
public void handleViaForgeButtonClicking(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
if (p_actionPerformed_1_.id == 1337) {
mc.displayGuiScreen(new GuiProtocolSelector(this));
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
if (p_actionPerformed_1_.id == 1_000_000_000) {
mc.displayGuiScreen(new GuiProtocolSelector(this));
}
}
}
}

View File

@ -17,6 +17,7 @@
*/
package de.florianmichael.viaforge.mixin.impl;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiMultiplayer;
@ -31,13 +32,17 @@ public class MixinGuiMultiplayer extends GuiScreen {
@Inject(method = "initGui", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
buttonList.add(new GuiButton(1337, 5, 6, 98, 20, "ViaForge"));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
buttonList.add(new GuiButton(1_000_000_000, 5, 6, 98, 20, "ViaForge"));
}
}
@Inject(method = "actionPerformed", at = @At("RETURN"))
public void handleViaForgeButtonClicking(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
if (p_actionPerformed_1_.id == 1337) {
mc.displayGuiScreen(new GuiProtocolSelector(this));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
if (p_actionPerformed_1_.id == 1_000_000_000) {
mc.displayGuiScreen(new GuiProtocolSelector(this));
}
}
}
}

View File

@ -17,6 +17,7 @@
*/
package de.florianmichael.viaforge.mixin.impl;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
@ -31,13 +32,17 @@ public class MixinGuiScreenServerList extends GuiScreen {
@Inject(method = "initGui", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
buttonList.add(new GuiButton(1337, 5, 6, 98, 20, "ViaForge"));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
buttonList.add(new GuiButton(1_000_000_000, 5, 6, 98, 20, "ViaForge"));
}
}
@Inject(method = "actionPerformed", at = @At("RETURN"))
public void handleViaForgeButtonClicking(GuiButton p_actionPerformed_1_, CallbackInfo ci) {
if (p_actionPerformed_1_.id == 1337) {
mc.displayGuiScreen(new GuiProtocolSelector(this));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
if (p_actionPerformed_1_.id == 1_000_000_000) {
mc.displayGuiScreen(new GuiProtocolSelector(this));
}
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.client.Minecraft;
import net.minecraft.util.SharedConstants;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge114 implements PlatformFields {
public class ViaForge114 implements VFPlatform {
public final static ViaForge114 PLATFORM = new ViaForge114();
@Override
@ -37,4 +38,9 @@ public class ViaForge114 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().hasSingleplayerServer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -38,8 +38,10 @@ public class MixinMainMenuScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
ViaForgeCommon.init(ViaForge114.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge114;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.Screen;
@ -37,6 +38,8 @@ public class MixinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addButton(new Button(5, 6, 98, 20, "ViaForge", b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,6 +17,7 @@
*/
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ServerListScreen;
@ -36,6 +37,8 @@ public class MixinServerListScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addButton(new Button(5, 6, 98, 20, "ViaForge", b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.client.Minecraft;
import net.minecraft.util.SharedConstants;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge115 implements PlatformFields {
public class ViaForge115 implements VFPlatform {
public final static ViaForge115 PLATFORM = new ViaForge115();
@ -38,4 +39,9 @@ public class ViaForge115 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().hasSingleplayerServer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -38,8 +38,10 @@ public class MixinMainMenuScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
ViaForgeCommon.init(ViaForge115.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addButton(new Button(5, 6, 98, 20, "ViaForge", b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge115;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.Screen;
@ -37,6 +38,8 @@ public class MixinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addButton(new Button(5, 6, 98, 20, "ViaForge", b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,6 +17,7 @@
*/
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ServerListScreen;
@ -36,6 +37,8 @@ public class MixinServerListScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20,"ViaForge", b -> GuiProtocolSelector.open(minecraft)));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addButton(new Button(5, 6, 98, 20, "ViaForge", b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.client.Minecraft;
import net.minecraft.util.SharedConstants;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge116 implements PlatformFields {
public class ViaForge116 implements VFPlatform {
public final static ViaForge116 PLATFORM = new ViaForge116();
@ -38,4 +39,9 @@ public class ViaForge116 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().hasSingleplayerServer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -39,8 +39,10 @@ public class MixinMainMenuScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20, new StringTextComponent("ViaForge"), b -> GuiProtocolSelector.open(minecraft)));
ViaForgeCommon.init(ViaForge116.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addButton(new Button(5, 6, 98, 20, new StringTextComponent("ViaForge"), b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,6 +17,7 @@
*/
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.Screen;
@ -36,6 +37,8 @@ public class MixinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20, ITextComponent.nullToEmpty("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addButton(new Button(5, 6, 98, 20, ITextComponent.nullToEmpty("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge116;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ServerListScreen;
@ -37,6 +38,8 @@ public class MixinServerListScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addButton(new Button(5, 6, 98, 20, ITextComponent.nullToEmpty("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addButton(new Button(5, 6, 98, 20, ITextComponent.nullToEmpty("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge117 implements PlatformFields {
public class ViaForge117 implements VFPlatform {
public final static ViaForge117 PLATFORM = new ViaForge117();
@ -38,4 +39,9 @@ public class ViaForge117 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().hasSingleplayerServer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge117;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.DirectJoinServerScreen;
@ -38,6 +39,8 @@ public class MixinDirectJoinServerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge117;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
@ -38,6 +39,8 @@ public class MixinJoinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
}
}
}

View File

@ -39,8 +39,10 @@ public class MixinTitleScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> GuiProtocolSelector.open(minecraft)));
ViaForgeCommon.init(ViaForge117.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge118 implements PlatformFields {
public class ViaForge118 implements VFPlatform {
public final static ViaForge118 PLATFORM = new ViaForge118();
@ -38,4 +39,9 @@ public class ViaForge118 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().hasSingleplayerServer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge118;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.DirectJoinServerScreen;
@ -38,6 +39,8 @@ public class MixinDirectJoinServerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge118;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
@ -38,6 +39,8 @@ public class MixinJoinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))));
}
}
}

View File

@ -39,8 +39,10 @@ public class MixinTitleScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> GuiProtocolSelector.open(minecraft)));
ViaForgeCommon.init(ViaForge118.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addRenderableWidget(new Button(5, 6, 98, 20, new TextComponent("ViaForge"), b -> GuiProtocolSelector.open(minecraft)));
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge119 implements PlatformFields {
public class ViaForge119 implements VFPlatform {
public final static ViaForge119 PLATFORM = new ViaForge119();
@ -38,4 +39,9 @@ public class ViaForge119 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().isSingleplayer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge119;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.DirectJoinServerScreen;
@ -37,6 +38,8 @@ public class MixinDirectJoinServerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge119;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
@ -37,6 +38,8 @@ public class MixinJoinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
}
}
}

View File

@ -38,8 +38,10 @@ public class MixinTitleScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
ViaForgeCommon.init(ViaForge119.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
}
}
}

View File

@ -17,15 +17,16 @@
*/
package de.florianmichael.viaforge;
import de.florianmichael.viaforge.common.PlatformFields;
import de.florianmichael.viaforge.common.platform.VFPlatform;
import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.common.Mod;
import java.io.File;
import java.util.function.Supplier;
@Mod("viaforge")
public class ViaForge120 implements PlatformFields {
public class ViaForge120 implements VFPlatform {
public final static ViaForge120 PLATFORM = new ViaForge120();
@ -38,4 +39,9 @@ public class ViaForge120 implements PlatformFields {
public Supplier<Boolean> isSingleplayer() {
return () -> Minecraft.getInstance().isSingleplayer();
}
@Override
public File getLeadingDirectory() {
return Minecraft.getInstance().gameDirectory;
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge120;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.DirectJoinServerScreen;
@ -37,6 +38,8 @@ public class MixinDirectJoinServerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
if (ViaForgeCommon.getManager().getConfig().isShowDirectConnectButton()) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
}
}
}

View File

@ -18,6 +18,7 @@
package de.florianmichael.viaforge.mixin;
import de.florianmichael.viaforge.ViaForge120;
import de.florianmichael.viaforge.common.ViaForgeCommon;
import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
@ -37,6 +38,8 @@ public class MixinJoinMultiplayerScreen extends Screen {
@Inject(method = "init", at = @At("RETURN"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
if (ViaForgeCommon.getManager().getConfig().isShowMultiplayerButton()) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
}
}
}

View File

@ -38,8 +38,10 @@ public class MixinTitleScreen extends Screen {
@Inject(method = "init", at = @At("HEAD"))
public void hookViaForgeButton(CallbackInfo ci) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
ViaForgeCommon.init(ViaForge120.PLATFORM);
if (ViaForgeCommon.getManager().getConfig().isShowMainMenuButton()) {
addRenderableWidget(new Button.Builder(Component.literal("ViaForge"), b -> minecraft.setScreen(new GuiProtocolSelector(this))).bounds(5, 6, 98, 20).build());
}
}
}