From d8738996dee06edebb26db94d8922d769d43ba39 Mon Sep 17 00:00:00 2001 From: radmanplays <95340057+radmanplays@users.noreply.github.com> Date: Sun, 11 Feb 2024 21:55:19 +0330 Subject: [PATCH] add mod gui --- .../client/gui/GuiMainMenu.edit.java | 12 +- .../client/gui/ServerSelectionList.edit.java | 3 +- .../assets/minecraft/lang/en_US.edit.lang | 5 +- .../main/java/net/eaglerforge/GuiMods.java | 244 +++++++++++++++--- .../eaglercraft/v1_8/log4j/LogManager.java | 2 +- 5 files changed, 220 insertions(+), 46 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java index 1b90374..0b7a05a 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.edit.java @@ -155,14 +155,16 @@ + } + -> CHANGE 8 : 11 @ 8 : 10 +> CHANGE 6 : 7 @ 6 : 7 -~ this.buttonList.add(new GuiButton(4, this.width / 2 + 2, i + 72 + 12, 98, 20, +~ this.buttonList.add(new GuiButton(0, this.width / 2 - 100, i + 72 + 24, 98, 20, + +> CHANGE 1 : 10 @ 1 : 5 + +~ this.buttonList.add(new GuiButton(4, this.width / 2 + 2, i + 72 + 24, 98, 20, ~ I18n.format("menu.editProfile", new Object[0]))); ~ - -> CHANGE 1 : 6 @ 1 : 2 - +~ this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, i + 72 + 24)); ~ ~ if (isFork) { ~ this.openGLWarning1 = EaglercraftVersion.mainMenuStringE; diff --git a/patches/minecraft/net/minecraft/client/gui/ServerSelectionList.edit.java b/patches/minecraft/net/minecraft/client/gui/ServerSelectionList.edit.java index 3eba377..0ff4b25 100644 --- a/patches/minecraft/net/minecraft/client/gui/ServerSelectionList.edit.java +++ b/patches/minecraft/net/minecraft/client/gui/ServerSelectionList.edit.java @@ -7,11 +7,12 @@ > DELETE 2 @ 2 : 3 -> INSERT 1 : 7 @ 1 +> INSERT 1 : 8 @ 1 + + import com.google.common.collect.Lists; + ++ import net.eaglerforge.GuiMods; + import net.lax1dude.eaglercraft.v1_8.sp.lan.LANServerController; + import net.lax1dude.eaglercraft.v1_8.sp.lan.LANServerList; + import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayManager; diff --git a/patches/resources/assets/minecraft/lang/en_US.edit.lang b/patches/resources/assets/minecraft/lang/en_US.edit.lang index 0a5ea4c..a7ad505 100644 --- a/patches/resources/assets/minecraft/lang/en_US.edit.lang +++ b/patches/resources/assets/minecraft/lang/en_US.edit.lang @@ -12,7 +12,7 @@ ~ eaglercraft.recording.start=Record Screen... ~ eaglercraft.soundCategory.voice=Voice -> INSERT 1 : 197 @ 1 +> INSERT 1 : 200 @ 1 + eaglercraft.resourcePack.prompt.title=What do you want to do with '%s'? + eaglercraft.resourcePack.prompt.text=Tip: Hold Shift to skip this screen when selecting a resource pack! @@ -209,6 +209,9 @@ + eaglercraft.command.clientStub=This command is client side! + + eaglerforge.menu.mods=Mods ++ eaglerforge.menu.mods.title=Loaded Mods ++ eaglerforge.menu.mods.addmod=Add Mod ++ eaglerforge.menu.mods.removemod=Remove Mod + > INSERT 163 : 350 @ 163 diff --git a/sources/main/java/net/eaglerforge/GuiMods.java b/sources/main/java/net/eaglerforge/GuiMods.java index 2fca663..1af848c 100644 --- a/sources/main/java/net/eaglerforge/GuiMods.java +++ b/sources/main/java/net/eaglerforge/GuiMods.java @@ -1,48 +1,216 @@ package net.eaglerforge; +import java.io.IOException; + +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; + +import net.lax1dude.eaglercraft.v1_8.Keyboard; +import net.lax1dude.eaglercraft.v1_8.Mouse; +import net.lax1dude.eaglercraft.v1_8.internal.EnumCursorType; +import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; +import net.lax1dude.eaglercraft.v1_8.log4j.Logger; +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.sp.gui.GuiNetworkSettingsButton; +import net.lax1dude.eaglercraft.v1_8.sp.gui.GuiScreenConnectOption; +import net.lax1dude.eaglercraft.v1_8.sp.gui.GuiScreenLANConnecting; +import net.lax1dude.eaglercraft.v1_8.sp.lan.LANServerList; +import net.lax1dude.eaglercraft.v1_8.sp.relay.RelayServer; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiListExtended; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiScreenAddServer; +import net.minecraft.client.gui.GuiYesNo; +import net.minecraft.client.gui.GuiYesNoCallback; +import net.minecraft.client.multiplayer.GuiConnecting; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.multiplayer.ServerList; import net.minecraft.client.resources.I18n; -import net.minecraft.util.IChatComponent; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; -import java.util.List; +/**+ + * This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code. + * + * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" + * Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team + * + * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +public class GuiMods extends GuiScreen implements GuiYesNoCallback { + private static final Logger logger = LogManager.getLogger(); + private GuiScreen parentScreen; + private ServerList savedServerList; + private GuiButton btnEditServer; + private GuiButton btnSelectServer; + private GuiButton btnDeleteServer; + private boolean deletingServer; + private boolean addingServer; + private boolean editingServer; + private boolean directConnect; + private String hoveringText; -public class GuiMods extends GuiScreen { - private final GuiScreen parentScreen; - private IChatComponent message; - private List multilineMessage; - private int field_175353_i; - public GuiMods(GuiScreen parentScreen) { - this.parentScreen = parentScreen; - } - public void initGui() { - this.buttonList.clear(); - this.multilineMessage = this.fontRendererObj.listFormattedStringToWidth(this.message.getFormattedText(), - this.width - 50); - this.field_175353_i = this.multilineMessage.size() * this.fontRendererObj.FONT_HEIGHT; - this.buttonList.add(new GuiButton(69, this.width / 2 - 100, - this.height / 2 + this.field_175353_i / 2 + this.fontRendererObj.FONT_HEIGHT, - I18n.format("gui.toMenu", new Object[0]))); - } - protected void actionPerformed(GuiButton parGuiButton) { - if (parGuiButton.id == 0) { - this.mc.displayGuiScreen(this.parentScreen); - } + private boolean initialized; + private static long lastRefreshCommit = 0l; - } - public void drawScreen(int i, int j, float f) { - this.drawDefaultBackground(); - this.drawCenteredString(this.fontRendererObj, "testing", this.width / 2, - this.height / 2 - this.field_175353_i / 2 - this.fontRendererObj.FONT_HEIGHT * 2, 11184810); - int k = this.height / 2 - this.field_175353_i / 2; - if (this.multilineMessage != null) { - for (String s : this.multilineMessage) { - this.drawCenteredString(this.fontRendererObj, s, this.width / 2, k, 16777215); - k += this.fontRendererObj.FONT_HEIGHT; - } - } + private static LANServerList lanServerList = null; - super.drawScreen(i, j, f); - } -} + public int ticksOpened; + + private final GuiNetworkSettingsButton relaysButton; + + public GuiMods(GuiScreen parentScreen) { + this.parentScreen = parentScreen; + this.relaysButton = new GuiNetworkSettingsButton(this); + } + + /**+ + * Adds the buttons (and other controls) to the screen in + * question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + if (!this.initialized) { + this.initialized = true; + } else { + } + + this.createButtons(); + } + + /**+ + * Handles mouse input. + */ + public void handleMouseInput() throws IOException { + super.handleMouseInput(); + } + + public void createButtons() { + this.buttonList.add(this.btnDeleteServer = new GuiButton(2, this.width / 2 - 230, this.height - 28, 150, 20, + I18n.format("eaglerforge.menu.mods.removemod", new Object[0]))); + this.buttonList.add(new GuiButton(8, this.width / 2 + 4 - 77, this.height - 28, 150, 20, + I18n.format("eaglerforge.menu.mods.addmod", new Object[0]))); + this.buttonList.add(new GuiButton(0, this.width / 2 + 4 + 80, this.height - 28, 150, 20, + I18n.format("gui.done", new Object[0]))); + } + + /**+ + * Called from the main game loop to update the screen. + */ + public void updateScreen() { + super.updateScreen(); + ++ticksOpened; + } + + /**+ + * Called when the screen is unloaded. Used to disable keyboard + * repeat events + */ + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + /**+ + * Called by the controls from the buttonList when activated. + * (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton parGuiButton) { + if (parGuiButton.enabled) { + if (parGuiButton.id == 2) { + } else if (parGuiButton.id == 1) { + } else if (parGuiButton.id == 4) { + } else if (parGuiButton.id == 3) { + } else if (parGuiButton.id == 7) { + } else if (parGuiButton.id == 0) { + this.mc.displayGuiScreen(this.parentScreen); + } else if (parGuiButton.id == 8) { + } + + } + } + + public void refreshServerList() { + this.mc.displayGuiScreen(new GuiMods(this.parentScreen)); + } + + public void confirmClicked(boolean flag, int var2) { + if (this.deletingServer) { + this.deletingServer = false; + long millis = System.currentTimeMillis(); + if (millis - lastRefreshCommit > 700l) { + lastRefreshCommit = millis; + this.refreshServerList(); + } + } else if (this.directConnect) { + this.directConnect = false; + } else if (this.addingServer) { + this.addingServer = false; + long millis = System.currentTimeMillis(); + if (millis - lastRefreshCommit > 700l) { + lastRefreshCommit = millis; + this.refreshServerList(); + } + } else if (this.editingServer) { + this.editingServer = false; + long millis = System.currentTimeMillis(); + if (millis - lastRefreshCommit > 700l) { + lastRefreshCommit = millis; + this.refreshServerList(); + } + } + } + + + /**+ + * Draws the screen and all the components in it. Args : mouseX, + * mouseY, renderPartialTicks + */ + public void drawScreen(int i, int j, float f) { + this.hoveringText = null; + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRendererObj, I18n.format("eaglerforge.menu.mods.title", new Object[0]), this.width / 2, + 20, 16777215); + super.drawScreen(i, j, f); + if (this.hoveringText != null) { + this.drawHoveringText(Lists.newArrayList(Splitter.on("\n").split(this.hoveringText)), i, j); + } + } + + + + private void connectToServer(ServerData server) { + this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, server)); + } + + + public void setHoveringText(String parString1) { + this.hoveringText = parString1; + } + + /**+ + * Called when the mouse is clicked. Args : mouseX, mouseY, + * clickedButton + */ + protected void mouseClicked(int parInt1, int parInt2, int parInt3) { + relaysButton.mouseClicked(parInt1, parInt2, parInt3); + super.mouseClicked(parInt1, parInt2, parInt3); + } + + +} \ No newline at end of file diff --git a/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java b/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java index 3cc11e1..63dd615 100644 --- a/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java +++ b/sources/main/java/net/lax1dude/eaglercraft/v1_8/log4j/LogManager.java @@ -18,7 +18,7 @@ import java.util.Map; * POSSIBILITY OF SUCH DAMAGE. * */ -public class LogManager { +public class LogManager{ private static final Map loggerInstances = new HashMap();