diff --git a/build.gradle b/build.gradle index c145ea28..e30f6651 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ apply plugin: 'org.spongepowered.mixin' //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -version = "Alpha2" +version = "Alpha3" group = "de.scribble.lp.tastools" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "TASmod-1.12.2" diff --git a/src/main/java/de/scribble/lp/tasmod/ModLoader.java b/src/main/java/de/scribble/lp/tasmod/ModLoader.java index ee6c6750..78a2d68b 100644 --- a/src/main/java/de/scribble/lp/tasmod/ModLoader.java +++ b/src/main/java/de/scribble/lp/tasmod/ModLoader.java @@ -6,7 +6,6 @@ import de.scribble.lp.tasmod.playback.CommandPlay; import de.scribble.lp.tasmod.recording.CommandRecord; import de.scribble.lp.tasmod.tickratechanger.CommandTickrate; -import de.scribble.lp.tasmod.ticksync.CommandTickSync; import de.scribble.lp.tasmod.tutorial.CommandPlaybacktutorial; import net.minecraft.server.MinecraftServer; import net.minecraftforge.fml.common.Mod; @@ -58,7 +57,6 @@ public void serverStart(FMLServerStartingEvent ev) { //Command handling ev.registerServerCommand(new CommandTickrate()); - ev.registerServerCommand(new CommandTickSync()); ev.registerServerCommand(new CommandRecord()); ev.registerServerCommand(new CommandPlay()); ev.registerServerCommand(new CommandPlaybacktutorial()); diff --git a/src/main/java/de/scribble/lp/tasmod/gui/GuiMultiplayerTimeOut.java b/src/main/java/de/scribble/lp/tasmod/gui/GuiMultiplayerTimeOut.java new file mode 100644 index 00000000..edcb54ad --- /dev/null +++ b/src/main/java/de/scribble/lp/tasmod/gui/GuiMultiplayerTimeOut.java @@ -0,0 +1,45 @@ +package de.scribble.lp.tasmod.gui; + +import java.io.IOException; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiMultiplayer; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.resources.I18n; + +public class GuiMultiplayerTimeOut extends GuiScreen{ + private GuiScreen previous; + + public GuiMultiplayerTimeOut() { + previous=new GuiMainMenu(); + } + @Override + public void initGui() { + this.buttonList.add(new GuiButton(0, width / 2 -100, height / 2 + 70, "Continue")); + super.initGui(); + } + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + this.drawDefaultBackground(); + + ScaledResolution scaled = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaled.getScaledWidth(); + int height = scaled.getScaledHeight(); + + drawCenteredString(fontRenderer,I18n.format("TASmod: Timed out"), width / 2, height / 4 + 50 + -16, 0xFFFFFF); + drawCenteredString(fontRenderer,I18n.format("Lost or could not make a connection to the TASmod on the server side"), width / 2, height / 4 + 50 + -6, 0xFFFFFF); + drawCenteredString(fontRenderer,I18n.format("Possible Cause:"), width / 2, height / 4 + 50 + 14, 0xFFFFFF); + drawCenteredString(fontRenderer,I18n.format("The server has no TASmod installed or the server lagged too much."), width / 2, height / 4 + 50 + 24, 0xFFFFFF); + drawCenteredString(fontRenderer,I18n.format("It's also possible to get this message in singleplayer if the integrated server stopped responding."), width / 2, height / 4 + 50 + 34, 0xFFFFFF); + super.drawScreen(mouseX, mouseY, partialTicks); + } + @Override + protected void actionPerformed(GuiButton button) throws IOException { + if(button.id==0) { + Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(previous)); + } + } +} diff --git a/src/main/java/de/scribble/lp/tasmod/gui/GuiMultiplayerWarn.java b/src/main/java/de/scribble/lp/tasmod/gui/GuiMultiplayerWarn.java new file mode 100644 index 00000000..38439544 --- /dev/null +++ b/src/main/java/de/scribble/lp/tasmod/gui/GuiMultiplayerWarn.java @@ -0,0 +1,43 @@ +package de.scribble.lp.tasmod.gui; + +import java.io.IOException; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiMultiplayer; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.resources.I18n; + +public class GuiMultiplayerWarn extends GuiScreen{ + private GuiScreen previous; + public GuiMultiplayerWarn(GuiScreen screen) { + previous=screen; + } + @Override + public void initGui() { + this.buttonList.add(new GuiButton(0, width / 2 -100, height / 2 + 70, "Continue")); + super.initGui(); + } + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + this.drawDefaultBackground(); + + ScaledResolution scaled = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaled.getScaledWidth(); + int height = scaled.getScaledHeight(); + + drawCenteredString(fontRenderer,I18n.format("WARNING"), width / 2, height / 4 + 50 + -16, 0xCE0000); + drawCenteredString(fontRenderer,I18n.format("Do NOT join a server that has not installed the TASmod (e.g. Hypixel)."), width / 2, height / 4 + 50 + -6, 0xFFFFFF); + drawCenteredString(fontRenderer,I18n.format("You will softlock your game for a few seconds then disconnect!"), width / 2, height / 4 + 50 + 4, 0xFFFFFF); + drawCenteredString(fontRenderer,I18n.format("This mod only works together with a server."), width / 2, height / 4 + 50 + 14, 0xFFFFFF); + + super.drawScreen(mouseX, mouseY, partialTicks); + } + @Override + protected void actionPerformed(GuiButton button) throws IOException { + if(button.id==0) { + Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(previous)); + } + } +} diff --git a/src/main/java/de/scribble/lp/tasmod/mixin/MixinGuiMainMenu.java b/src/main/java/de/scribble/lp/tasmod/mixin/MixinGuiMainMenu.java new file mode 100644 index 00000000..28e7013b --- /dev/null +++ b/src/main/java/de/scribble/lp/tasmod/mixin/MixinGuiMainMenu.java @@ -0,0 +1,18 @@ +package de.scribble.lp.tasmod.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import de.scribble.lp.tasmod.gui.GuiMultiplayerWarn; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiScreen; + +@Mixin(GuiMainMenu.class) +public class MixinGuiMainMenu { + @Redirect(method = "actionPerformed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;displayGuiScreen(Lnet/minecraft/client/gui/GuiScreen;)V", ordinal = 3)) + public void redirectOpenGuiMultiplayer(Minecraft mc) { + mc.displayGuiScreen(new GuiMultiplayerWarn((GuiMainMenu)(Object)this)); + } +} diff --git a/src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraft.java b/src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraft.java index 07ee990e..69130da8 100644 --- a/src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraft.java +++ b/src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraft.java @@ -15,6 +15,8 @@ import de.scribble.lp.tasmod.ModLoader; import de.scribble.lp.tasmod.duck.SubtickDuck; +import de.scribble.lp.tasmod.gui.GuiMultiplayerTimeOut; +import de.scribble.lp.tasmod.gui.GuiMultiplayerWarn; import de.scribble.lp.tasmod.playback.InputPlayback; import de.scribble.lp.tasmod.recording.InputRecorder; import de.scribble.lp.tasmod.tickratechanger.TickrateChangerClient; @@ -178,6 +180,8 @@ public abstract class MixinMinecraft { protected abstract int getLimitFramerate(); @Shadow protected abstract boolean isFramerateLimitBelowMax(); + + public int softLockTimer; /** * Rewrites * @@ -224,6 +228,12 @@ public void redoentireRunGameLoop(CallbackInfo ci) throws IOException { } this.runTick(); }else if(TickSync.getClienttickcounter()>TickSync.getServertickcounter()) { //If it's too fast + softLockTimer++; + if(softLockTimer==100) { + this.world.sendQuittingDisconnectingPacket(); + this.loadWorld((WorldClient)null); + this.displayGuiScreen(new GuiMultiplayerTimeOut()); + } continue; }else if(TickSync.getClienttickcounter()0) { @@ -412,6 +418,7 @@ public void injectInit(CallbackInfo ci) { @Inject(method="runTick", at=@At(value="HEAD"), cancellable = true) public void injectRunTick(CallbackInfo ci) throws IOException { + softLockTimer=0; if (this.rightClickDelayTimer > 0) { --this.rightClickDelayTimer; diff --git a/src/main/java/de/scribble/lp/tasmod/ticksync/CommandTickSync.java b/src/main/java/de/scribble/lp/tasmod/ticksync/CommandTickSync.java deleted file mode 100644 index 227488ca..00000000 --- a/src/main/java/de/scribble/lp/tasmod/ticksync/CommandTickSync.java +++ /dev/null @@ -1,41 +0,0 @@ -package de.scribble.lp.tasmod.ticksync; - -import java.util.List; - -import de.scribble.lp.tasmod.CommonProxy; -import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; - -public class CommandTickSync extends CommandBase{ - - @Override - public String getName() { - return "ticksync"; - } - - @Override - public String getUsage(ICommandSender sender) { - return "/ticksync [reset]"; - } - - @Override - public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { - if(args.length==0) { - TickSyncServer.sync(!TickSyncServer.isEnabled()); - TickSyncServer.resetTickCounter(); - CommonProxy.NETWORK.sendToAll(new TickSyncPackage(TickSyncServer.getServertickcounter(),true,!TickSyncServer.isEnabled())); - }else if(args[0].equalsIgnoreCase("reset")&&args.length==1) { - TickSyncServer.resetTickCounter(); - CommonProxy.NETWORK.sendToAll(new TickSyncPackage(TickSyncServer.getServertickcounter(),true,TickSyncServer.isEnabled())); - } - } - @Override - public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, - BlockPos targetPos) { - return getListOfStringsMatchingLastWord(args, "reset"); - } - -} diff --git a/src/main/java/de/scribble/lp/tasmod/ticksync/TickSyncCamera.java b/src/main/java/de/scribble/lp/tasmod/ticksync/TickSyncCamera.java deleted file mode 100644 index 81a7e8b1..00000000 --- a/src/main/java/de/scribble/lp/tasmod/ticksync/TickSyncCamera.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.scribble.lp.tasmod.ticksync; - -public class TickSyncCamera { - private static int cameratickcounter; - - public static void incrementCameratickcounter() { - cameratickcounter++; - } - public static void resetCameraTickcounter() { - cameratickcounter=0; - } - public static int getCameratickcounter() { - return cameratickcounter; - } -} diff --git a/src/main/resources/mixins.tasmod.json b/src/main/resources/mixins.tasmod.json index eacd2bfe..e7b9c9bb 100644 --- a/src/main/resources/mixins.tasmod.json +++ b/src/main/resources/mixins.tasmod.json @@ -19,6 +19,7 @@ "MixinGuiChat", "MixinGuiScreenAdvancements", "MixinGuiScreen", - "MixinKeyBinding" + "MixinKeyBinding", + "MixinGuiMainMenu" ] } \ No newline at end of file