diff --git a/src/main/java/net/silentclient/client/gui/elements/Input.java b/src/main/java/net/silentclient/client/gui/elements/Input.java index e34d762..71fc4b2 100644 --- a/src/main/java/net/silentclient/client/gui/elements/Input.java +++ b/src/main/java/net/silentclient/client/gui/elements/Input.java @@ -87,18 +87,18 @@ public class Input { ColorUtils.setColor(theme.getBorderColor().getRGB()); if(value.length() != 0) { renderText = value; - ColorUtils.setColor(theme.getFocusedBorderColor().getRGB()); } if(keyValue) { if(key != -1) { renderText = Keyboard.getKeyName(key); - ColorUtils.setColor(theme.getFocusedBorderColor().getRGB()); + } else { + renderText = "NONE"; } if(isFocused) { renderText = "..."; - ColorUtils.setColor(theme.getFocusedBorderColor().getRGB()); } } + ColorUtils.setColor(theme.getFocusedBorderColor().getRGB()); float textX = x + 2; if(center) { textX = x + (width / 2) - (Client.getInstance().getSilentFontRenderer().getStringWidth(renderText, small ? 12 : 14, SilentFontRenderer.FontType.TITLE) / 2); @@ -129,10 +129,19 @@ public class Input { public void onKeyTyped(char typedChar, int keyCode) { if(isFocused) { if(keyValue) { + if(keyCode == Keyboard.KEY_ESCAPE) { + key = -1; + isFocused = false; + return; + } key = keyCode; isFocused = false; return; } + if(keyCode == Keyboard.KEY_ESCAPE) { + isFocused = false; + return; + } if(keyCode == Keyboard.KEY_BACK) { if (value != null || value.length() != 0 || value != "") { this.value = StringUtils.chop(this.value); diff --git a/src/main/java/net/silentclient/client/gui/lite/clickgui/ModSettings.java b/src/main/java/net/silentclient/client/gui/lite/clickgui/ModSettings.java index 0383c54..7000b7f 100644 --- a/src/main/java/net/silentclient/client/gui/lite/clickgui/ModSettings.java +++ b/src/main/java/net/silentclient/client/gui/lite/clickgui/ModSettings.java @@ -67,7 +67,7 @@ public class ModSettings extends SilentScreen { this.silentInputs.add(new Input(setting.getName(), setting.getValString())); } - if(setting.isKeybind()) { + if(setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { this.silentInputs.add(new Input(setting.getName(), setting.getKeybind())); } } @@ -87,7 +87,7 @@ public class ModSettings extends SilentScreen { setting.setValString(this.silentInputs.get(inputIndex).getValue().length() != 0 ? this.silentInputs.get(inputIndex).getValue() : setting.defaultsval); inputIndex++; } - if (setting.isKeybind()) { + if (setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { setting.setKeybind(this.silentInputs.get(inputIndex).getKey() != 0 ? this.silentInputs.get(inputIndex).getKey() : setting.defaultkval); inputIndex++; } @@ -170,7 +170,7 @@ public class ModSettings extends SilentScreen { inputIndex++; } - if(setting.isKeybind()) { + if(setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { Client.getInstance().getSilentFontRenderer().drawString(setting.getName() + ":", x + 100, settingY + 1, 12, SilentFontRenderer.FontType.TITLE); this.silentInputs.get(inputIndex).render(mouseX, mouseY, x + width - 50 - 5, settingY, 50, true, new DefaultInputTheme(), true); ColorUtils.setColor(-1); @@ -349,7 +349,7 @@ public class ModSettings extends SilentScreen { inputIndex++; } - if(setting.isKeybind()) { + if(setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { this.silentInputs.get(inputIndex).onClick(mouseX, mouseY, x + width - 50 - 5, settingY, 50, true); settingY += 5; inputIndex++; @@ -429,7 +429,7 @@ public class ModSettings extends SilentScreen { setting.setValString(this.silentInputs.get(inputIndex).getValue()); inputIndex++; } - if (setting.isKeybind()) { + if (setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { this.silentInputs.get(inputIndex).onKeyTyped(typedChar, keyCode); setting.setKeybind(this.silentInputs.get(inputIndex).getKey()); inputIndex++; diff --git a/src/main/java/net/silentclient/client/gui/modmenu/ModMenu.java b/src/main/java/net/silentclient/client/gui/modmenu/ModMenu.java index 1dafa1f..c36873d 100644 --- a/src/main/java/net/silentclient/client/gui/modmenu/ModMenu.java +++ b/src/main/java/net/silentclient/client/gui/modmenu/ModMenu.java @@ -159,6 +159,17 @@ public class ModMenu extends SilentScreen { Client.getInstance().getSilentFontRenderer().drawString(mod.getName(), modX, modY + 10 - 6, 12, SilentFontRenderer.FontType.TITLE); + if(mod.isUpdated() || mod.isNew()) { + String status = "UPDATED"; + if(mod.isNew()) { + status = "NEW"; + } + float badgeX = modX + Client.getInstance().getSilentFontRenderer().getStringWidth(mod.getName(), 12, SilentFontRenderer.FontType.TITLE) + 2; + float badgeY = modY + 6; + RenderUtil.drawRoundedRect(badgeX, badgeY, Client.getInstance().getSilentFontRenderer().getStringWidth(status, 6, SilentFontRenderer.FontType.HEADER) + 4, 8, 8, Color.RED.getRGB()); + Client.getInstance().getSilentFontRenderer().drawString(status, badgeX + 2, badgeY + 1, 6, SilentFontRenderer.FontType.HEADER); + } + if(modCategory == ModCategory.MODS) { Switch.render(mouseX, mouseY, 129, modY + 10 - 4, mod.switchAniamation, mod.isEnabled(), mod.isForceDisabled(), mod.isForceDisabled() ? "Force disabled" : null); if(Switch.isHovered(mouseX, mouseY, 129, modY + 10 - 4)) { diff --git a/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java b/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java index 6789023..0113f08 100644 --- a/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java +++ b/src/main/java/net/silentclient/client/gui/modmenu/ModSettings.java @@ -69,7 +69,7 @@ public class ModSettings extends SilentScreen { this.silentInputs.add(new Input(setting.getName(), setting.getValString())); } - if(setting.isKeybind()) { + if(setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { this.silentInputs.add(new Input(setting.getName(), setting.getKeybind())); } } @@ -117,7 +117,7 @@ public class ModSettings extends SilentScreen { settingY += 5; inputIndex++; } - if(setting.isKeybind()) { + if(setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { Client.getInstance().getSilentFontRenderer().drawString(setting.getName(), 3, settingY, 12, SilentFontRenderer.FontType.TITLE); this.silentInputs.get(inputIndex).render(mouseX, mouseY, 150 - 50 - 3, settingY, 50, true, new DefaultInputTheme(), true); settingY += 5; @@ -247,7 +247,7 @@ public class ModSettings extends SilentScreen { settingY += 5; inputIndex++; } - if(setting.isKeybind()) { + if(setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { Client.getInstance().getSilentFontRenderer().drawString(setting.getName(), 3, settingY, 12, SilentFontRenderer.FontType.TITLE); this.silentInputs.get(inputIndex).onClick(mouseX, mouseY, 150 - 50 - 3, (int) settingY, 50, true); settingY += 5; @@ -351,7 +351,7 @@ public class ModSettings extends SilentScreen { inputIndex++; } - if (setting.isKeybind()) { + if (setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { this.silentInputs.get(inputIndex).onKeyTyped(typedChar, keyCode); setting.setKeybind(this.silentInputs.get(inputIndex).getKey()); inputIndex++; @@ -372,7 +372,7 @@ public class ModSettings extends SilentScreen { setting.setValString(this.silentInputs.get(inputIndex).getValue().length() != 0 ? this.silentInputs.get(inputIndex).getValue() : setting.defaultsval); inputIndex++; } - if (setting.isKeybind()) { + if (setting.isKeybind() && !setting.getName().startsWith("Quickplay Mode")) { setting.setKeybind(this.silentInputs.get(inputIndex).getKey() != 0 ? this.silentInputs.get(inputIndex).getKey() : setting.defaultkval); inputIndex++; } diff --git a/src/main/java/net/silentclient/client/gui/quickplay/QuickplayGui.java b/src/main/java/net/silentclient/client/gui/quickplay/QuickplayGui.java new file mode 100644 index 0000000..daedd9e --- /dev/null +++ b/src/main/java/net/silentclient/client/gui/quickplay/QuickplayGui.java @@ -0,0 +1,154 @@ +package net.silentclient.client.gui.quickplay; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.util.ResourceLocation; +import net.silentclient.client.Client; +import net.silentclient.client.gui.SilentScreen; +import net.silentclient.client.gui.animation.SimpleAnimation; +import net.silentclient.client.gui.elements.IconButton; +import net.silentclient.client.gui.font.SilentFontRenderer; +import net.silentclient.client.gui.lite.clickgui.utils.MouseUtils; +import net.silentclient.client.gui.theme.Theme; +import net.silentclient.client.gui.util.RenderUtil; +import net.silentclient.client.mods.hypixel.QuickPlayMod; +import net.silentclient.client.mods.util.Server; +import net.silentclient.client.utils.MenuBlurUtils; +import net.silentclient.client.utils.MouseCursorHandler; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.io.IOException; + +public class QuickplayGui extends SilentScreen { + private SimpleAnimation scrollAnimation = new SimpleAnimation(0.0F); + private float scrollY = 0; + + @Override + public void initGui() { + super.initGui(); + MenuBlurUtils.loadBlur(); + defaultCursor = false; + this.scrollY = 0; + this.buttonList.clear(); + this.buttonList.add(new IconButton(0, this.width - 14 - 3, 3, 14, 14, 8, 8, new ResourceLocation("silentclient/icons/exit.png"))); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + MouseCursorHandler.CursorType cursorType = getCursor(silentInputs, buttonList); + MenuBlurUtils.renderBackground(this); + + Client.getInstance().getSilentFontRenderer().drawString("Quickplay",3, 3, 14, SilentFontRenderer.FontType.TITLE); + + super.drawScreen(mouseX, mouseY, partialTicks); + + int modeBaseX = this.width / 2; + + int column = 1; + float modeY = 24 - scrollAnimation.getValue(); + + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_SCISSOR_TEST); + ScaledResolution r = new ScaledResolution(Minecraft.getMinecraft()); + int s = r.getScaleFactor(); + int listHeight = height - 24; + int translatedY = r.getScaledHeight() - 24 - listHeight; + GL11.glScissor(0 * s, translatedY * s, this.width * s, listHeight * s); + + for(QuickPlayMod.QuickplayModeType quickplayMode : (Server.isRuHypixel() ? QuickPlayMod.ruhypixelQuickplayModes : QuickPlayMod.hypixelQuickplayModes)) { + int modeX = column == 1 ? modeBaseX - 155 : modeBaseX + 5; + boolean isHovered = MouseUtils.isInside(mouseX, mouseY, modeX, modeY, 150, 30); + if(isHovered) { + cursorType = MouseCursorHandler.CursorType.POINTER; + RenderUtil.drawRoundedRect(modeX, modeY, 150, 30, 3, new Color(255, 255, 255, 30).getRGB()); + } + RenderUtil.drawRoundedOutline(modeX, modeY, 150, 30, 3, 1, Theme.borderColor().getRGB()); + RenderUtil.drawImage(new ResourceLocation("silentclient/mods/quickplay/"+quickplayMode.icon+".png"), modeX + 2, modeY + 2, 26, 26); + Client.getInstance().getSilentFontRenderer().drawString(quickplayMode.name, modeX + 32, modeY + 8, 14, SilentFontRenderer.FontType.TITLE); + + if(column == 1) { + column = 2; + } else { + column = 1; + modeY += 40; + } + } + + GL11.glDisable(GL11.GL_SCISSOR_TEST); + GL11.glPopMatrix(); + + Client.getInstance().getMouseCursorHandler().enableCursor(cursorType); + + scrollAnimation.setAnimation(scrollY, 12); + } + + @Override + public void handleMouseInput() throws IOException { + super.handleMouseInput(); + int dw = Mouse.getEventDWheel(); + double newScrollY = this.scrollY; + int height = this.height; + if(dw != 0) { + if (dw > 0) { + dw = -1; + } else { + dw = 1; + } + float amountScrolled = (float) (dw * 10); + if (newScrollY + amountScrolled > 0) + newScrollY += amountScrolled; + else + newScrollY = 0; + if((newScrollY < ((Math.ceil((Server.isRuHypixel() ? QuickPlayMod.ruhypixelQuickplayModes : QuickPlayMod.hypixelQuickplayModes).size() / 2) + 1) * 30) && (((Math.ceil((Server.isRuHypixel() ? QuickPlayMod.ruhypixelQuickplayModes : QuickPlayMod.hypixelQuickplayModes).size() / 2) + 1) * 30) + 24) > height) || amountScrolled < 0) { + this.scrollY = (float) newScrollY; + if(this.scrollY < 0) { + this.scrollY = 0; + } + } + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + int modeBaseX = this.width / 2; + + int column = 1; + float modeY = 24 - scrollAnimation.getValue(); + + for(QuickPlayMod.QuickplayModeType quickplayMode : (Server.isRuHypixel() ? QuickPlayMod.ruhypixelQuickplayModes : QuickPlayMod.hypixelQuickplayModes)) { + int modeX = column == 1 ? modeBaseX - 155 : modeBaseX + 5; + boolean isHovered = MouseUtils.isInside(mouseX, mouseY, modeX, modeY, 150, 30); + if(isHovered) { + mc.displayGuiScreen(new QuickplayModeGui(quickplayMode)); + break; + } + + if(column == 1) { + column = 2; + } else { + column = 1; + modeY += 40; + } + } + } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + switch (button.id) { + case 0: + mc.displayGuiScreen(null); + break; + } + } + + @Override + public void onGuiClosed() { + super.onGuiClosed(); + MenuBlurUtils.unloadBlur(); + } +} diff --git a/src/main/java/net/silentclient/client/gui/quickplay/QuickplayModeGui.java b/src/main/java/net/silentclient/client/gui/quickplay/QuickplayModeGui.java new file mode 100644 index 0000000..6de02dd --- /dev/null +++ b/src/main/java/net/silentclient/client/gui/quickplay/QuickplayModeGui.java @@ -0,0 +1,202 @@ +package net.silentclient.client.gui.quickplay; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.util.ResourceLocation; +import net.silentclient.client.Client; +import net.silentclient.client.gui.SilentScreen; +import net.silentclient.client.gui.animation.SimpleAnimation; +import net.silentclient.client.gui.elements.IconButton; +import net.silentclient.client.gui.elements.Input; +import net.silentclient.client.gui.font.SilentFontRenderer; +import net.silentclient.client.gui.lite.clickgui.utils.MouseUtils; +import net.silentclient.client.gui.theme.Theme; +import net.silentclient.client.gui.theme.input.DefaultInputTheme; +import net.silentclient.client.gui.util.RenderUtil; +import net.silentclient.client.mods.hypixel.QuickPlayMod; +import net.silentclient.client.mods.util.Server; +import net.silentclient.client.utils.MenuBlurUtils; +import net.silentclient.client.utils.MouseCursorHandler; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.io.IOException; + +public class QuickplayModeGui extends SilentScreen { + private final QuickPlayMod.QuickplayModeType quickplayMode; + private SimpleAnimation scrollAnimation = new SimpleAnimation(0.0F); + private float scrollY = 0; + + public QuickplayModeGui(QuickPlayMod.QuickplayModeType quickplayMode) { + this.quickplayMode = quickplayMode; + } + + @Override + public void initGui() { + super.initGui(); + this.scrollY = 0; + MenuBlurUtils.loadBlur(); + defaultCursor = false; + this.buttonList.clear(); + this.silentInputs.clear(); + this.buttonList.add(new IconButton(0, this.width - 14 - 3, 3, 14, 14, 8, 8, new ResourceLocation("silentclient/icons/exit.png"))); + for(QuickPlayMod.QuickplayCommandType quickplayMode : quickplayMode.modes) { + this.silentInputs.add(new Input(quickplayMode.name, Client.getInstance().getSettingsManager().getSettingByClass(QuickPlayMod.class, String.format("Quickplay Mode:%s:%s", Server.isRuHypixel() ? "RuHypixel" : "Hypixel", quickplayMode.command)).getKeybind())); + } + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + MouseCursorHandler.CursorType cursorType = getCursor(silentInputs, buttonList); + MenuBlurUtils.renderBackground(this); + + Client.getInstance().getSilentFontRenderer().drawString("Quickplay",3, 3, 14, SilentFontRenderer.FontType.TITLE); + + super.drawScreen(mouseX, mouseY, partialTicks); + + int modeBaseX = this.width / 2; + + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_SCISSOR_TEST); + ScaledResolution r = new ScaledResolution(Minecraft.getMinecraft()); + int s = r.getScaleFactor(); + int listHeight = height - 24; + int translatedY = r.getScaledHeight() - 24 - listHeight; + GL11.glScissor(0 * s, translatedY * s, this.width * s, listHeight * s); + + RenderUtil.drawRoundedOutline(modeBaseX - 205, 24 - scrollAnimation.getValue(), 410, 30, 3, 1, Theme.borderColor().getRGB()); + RenderUtil.drawImage(new ResourceLocation("silentclient/mods/quickplay/"+quickplayMode.icon+".png"), modeBaseX - 205 + 2, 24 + 2 - scrollAnimation.getValue(), 26, 26); + Client.getInstance().getSilentFontRenderer().drawString(quickplayMode.name, modeBaseX - 205 + 32, 24 + 8 - scrollAnimation.getValue(), 14, SilentFontRenderer.FontType.TITLE); + + int column = 1; + float modeY = 24 + 40 - scrollAnimation.getValue(); + int inputIndex = 0; + + for(QuickPlayMod.QuickplayCommandType quickplayMode : quickplayMode.modes) { + int modeX = column == 1 ? modeBaseX - 205 : modeBaseX + 5; + boolean isCommandHovered = MouseUtils.isInside(mouseX, mouseY, modeX, modeY, 140, 20); + if(isCommandHovered) { + cursorType = MouseCursorHandler.CursorType.POINTER; + RenderUtil.drawRoundedRect(modeX, modeY, 140, 20, 3, new Color(255, 255, 255, 30).getRGB()); + } + RenderUtil.drawRoundedOutline(modeX, modeY, 140, 20, 3, 1, Theme.borderColor().getRGB()); + Client.getInstance().getSilentFontRenderer().drawString(quickplayMode.name, modeX + 3, modeY + 3, 14, SilentFontRenderer.FontType.TITLE, 140); + + this.silentInputs.get(inputIndex).render(mouseX, mouseY, modeX + 145, modeY, 55, false, new DefaultInputTheme(), true); + + if(column == 1) { + column = 2; + } else { + column = 1; + modeY += 30; + } + inputIndex++; + } + + GL11.glDisable(GL11.GL_SCISSOR_TEST); + GL11.glPopMatrix(); + + Client.getInstance().getMouseCursorHandler().enableCursor(cursorType); + scrollAnimation.setAnimation(scrollY, 12); + } + + @Override + public void handleMouseInput() throws IOException { + super.handleMouseInput(); + int dw = Mouse.getEventDWheel(); + double newScrollY = this.scrollY; + int height = this.height; + if(dw != 0) { + if (dw > 0) { + dw = -1; + } else { + dw = 1; + } + float amountScrolled = (float) (dw * 10); + if (newScrollY + amountScrolled > 0) + newScrollY += amountScrolled; + else + newScrollY = 0; + if((newScrollY < ((Math.ceil(quickplayMode.modes.size() / 2) + 1) * 20) && (((Math.ceil(quickplayMode.modes.size() / 2) + 1) * 20) + 24 + 40) > height) || amountScrolled < 0) { + this.scrollY = (float) newScrollY; + if(this.scrollY < 0) { + this.scrollY = 0; + } + } + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + int modeBaseX = this.width / 2; + + RenderUtil.drawRoundedOutline(modeBaseX - 205, 24, 410, 30, 3, 1, Theme.borderColor().getRGB()); + RenderUtil.drawImage(new ResourceLocation("silentclient/mods/quickplay/"+quickplayMode.icon+".png"), modeBaseX - 205 + 2, 24 + 2, 26, 26); + Client.getInstance().getSilentFontRenderer().drawString(quickplayMode.name, modeBaseX - 205 + 32, 24 + 8, 14, SilentFontRenderer.FontType.TITLE); + + int column = 1; + float modeY = 24 + 40 - scrollAnimation.getValue(); + int inputIndex = 0; + + for(QuickPlayMod.QuickplayCommandType quickplayMode : quickplayMode.modes) { + int modeX = column == 1 ? modeBaseX - 205 : modeBaseX + 5; + boolean isCommandHovered = MouseUtils.isInside(mouseX, mouseY, modeX, modeY, 140, 20); + if(isCommandHovered) { + QuickPlayMod.runCommand(quickplayMode.command); + mc.displayGuiScreen(null); + } + + this.silentInputs.get(inputIndex).onClick(mouseX, mouseY, modeX + 145, (int) modeY, 55, false); + + if(column == 1) { + column = 2; + } else { + column = 1; + modeY += 30; + } + inputIndex++; + } + } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + switch (button.id) { + case 0: + mc.displayGuiScreen(new QuickplayGui()); + break; + } + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException { + int inputIndex = 0; + boolean neededKeyCheck = true; + + for(QuickPlayMod.QuickplayCommandType quickplayMode : quickplayMode.modes) { + if(silentInputs.get(inputIndex).isFocused()) { + this.silentInputs.get(inputIndex).onKeyTyped(typedChar, keyCode); + Client.getInstance().getSettingsManager().getSettingByClass(QuickPlayMod.class, String.format("Quickplay Mode:%s:%s", Server.isRuHypixel() ? "RuHypixel" : "Hypixel", quickplayMode.command)).setKeybind(this.silentInputs.get(inputIndex).getKey()); + if(keyCode == Keyboard.KEY_ESCAPE) { + neededKeyCheck = false; + break; + } + } + inputIndex++; + } + + if (neededKeyCheck && keyCode == Keyboard.KEY_ESCAPE) { + mc.displayGuiScreen(null); + }; + } + + @Override + public void onGuiClosed() { + super.onGuiClosed(); + MenuBlurUtils.unloadBlur(); + } +} diff --git a/src/main/java/net/silentclient/client/mixin/mixins/NetHandlerPlayClientMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/NetHandlerPlayClientMixin.java index 45f5d69..528a329 100644 --- a/src/main/java/net/silentclient/client/mixin/mixins/NetHandlerPlayClientMixin.java +++ b/src/main/java/net/silentclient/client/mixin/mixins/NetHandlerPlayClientMixin.java @@ -9,6 +9,7 @@ import net.minecraft.network.play.server.S48PacketResourcePackSend; import net.minecraft.util.IChatComponent; import net.silentclient.client.event.impl.EntityDamageEvent; import net.silentclient.client.hooks.NetHandlerPlayClientHook; +import net.silentclient.client.utils.Players; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.*; @@ -31,6 +32,7 @@ public class NetHandlerPlayClientMixin { at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;displayGuiScreen(Lnet/minecraft/client/gui/GuiScreen;)V") ) private GuiScreen skipTerrainScreen(GuiScreen original) { + Players.reload(); return null; } diff --git a/src/main/java/net/silentclient/client/mixin/mixins/RendererLivingEntityMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/RendererLivingEntityMixin.java index 60a8230..5593263 100644 --- a/src/main/java/net/silentclient/client/mixin/mixins/RendererLivingEntityMixin.java +++ b/src/main/java/net/silentclient/client/mixin/mixins/RendererLivingEntityMixin.java @@ -79,13 +79,16 @@ public class RendererLivingEntityMixin { if (entity instanceof IMob && entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Hostile Entity Render Distance").getValInt()) { ci.cancel(); return; - } else if ((entity instanceof EntityAnimal || entity instanceof EntityAmbientCreature || entity instanceof EntityWaterMob) && entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Passive Entity Render Distance").getValInt()) { + } + if ((entity instanceof EntityAnimal || entity instanceof EntityAmbientCreature || entity instanceof EntityWaterMob) && entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Passive Entity Render Distance").getValInt()) { ci.cancel(); return; - } else if (entity instanceof EntityPlayer && entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Player Render Distance").getValInt()) { + } + if (entity instanceof EntityPlayer && entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Player Render Distance").getValInt()) { ci.cancel(); return; - } else if (entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Misc. Entity Render Distance").getValInt()) { + } + if (entityDistance > Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Misc. Entity Render Distance").getValInt()) { ci.cancel(); return; } diff --git a/src/main/java/net/silentclient/client/mods/ModInstances.java b/src/main/java/net/silentclient/client/mods/ModInstances.java index bd71853..b063610 100644 --- a/src/main/java/net/silentclient/client/mods/ModInstances.java +++ b/src/main/java/net/silentclient/client/mods/ModInstances.java @@ -1,59 +1,14 @@ package net.silentclient.client.mods; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - import net.silentclient.client.Client; -import net.silentclient.client.mods.hud.ArmorStatusMod; -import net.silentclient.client.mods.hud.BlockInfoMod; -import net.silentclient.client.mods.hud.BossBarMod; -import net.silentclient.client.mods.hud.CPSMod; -import net.silentclient.client.mods.hud.ClockMod; -import net.silentclient.client.mods.hud.ComboCounterMod; -import net.silentclient.client.mods.hud.CoordinatesMod; -import net.silentclient.client.mods.hud.DayCounterMod; -import net.silentclient.client.mods.hud.FPSMod; -import net.silentclient.client.mods.hud.KeystrokesMod; -import net.silentclient.client.mods.hud.MemoryMod; -import net.silentclient.client.mods.hud.PackDisplayMod; -import net.silentclient.client.mods.hud.PingMod; -import net.silentclient.client.mods.hud.PotionHudMod; -import net.silentclient.client.mods.hud.ReachDisplayMod; -import net.silentclient.client.mods.hud.ScoreboardMod; -import net.silentclient.client.mods.hud.ServerAddressMod; -import net.silentclient.client.mods.hud.SpeedometerMod; +import net.silentclient.client.mods.hud.*; import net.silentclient.client.mods.hypixel.AutoGGMod; import net.silentclient.client.mods.hypixel.AutoTipMod; import net.silentclient.client.mods.hypixel.LevelHeadMod; +import net.silentclient.client.mods.hypixel.QuickPlayMod; import net.silentclient.client.mods.hypixel.togglechat.ToggleChatMod; -import net.silentclient.client.mods.player.AutoSprintMod; -import net.silentclient.client.mods.player.AutoTextMod; -import net.silentclient.client.mods.player.DonationsAlertsMod; -import net.silentclient.client.mods.player.NickHiderMod; -import net.silentclient.client.mods.player.PerspectiveMod; -import net.silentclient.client.mods.player.ZoomMod; -import net.silentclient.client.mods.render.AnimationsMod; -import net.silentclient.client.mods.render.BlockOverlayMod; -import net.silentclient.client.mods.render.ChatMod; -import net.silentclient.client.mods.render.ChunkBordersMod; -import net.silentclient.client.mods.render.ClearGlassMod; -import net.silentclient.client.mods.render.ColorSaturationMod; -import net.silentclient.client.mods.render.CrosshairMod; -import net.silentclient.client.mods.render.DamageTintMod; -import net.silentclient.client.mods.render.HitColorMod; -import net.silentclient.client.mods.render.HitboxesMod; -import net.silentclient.client.mods.render.InventoryBlurMod; -import net.silentclient.client.mods.render.ItemPhysicsMod; -import net.silentclient.client.mods.render.NametagsMod; -import net.silentclient.client.mods.render.NewMotionBlurMod; -import net.silentclient.client.mods.render.PackTweaksMod; -import net.silentclient.client.mods.render.ParticlesMod; -import net.silentclient.client.mods.render.TNTTimerMod; -import net.silentclient.client.mods.render.TabMod; -import net.silentclient.client.mods.render.TitlesMod; -import net.silentclient.client.mods.render.UhcOverlayMod; +import net.silentclient.client.mods.player.*; +import net.silentclient.client.mods.render.*; import net.silentclient.client.mods.settings.CosmeticsMod; import net.silentclient.client.mods.settings.FPSBoostMod; import net.silentclient.client.mods.settings.GeneralMod; @@ -67,6 +22,11 @@ import net.silentclient.client.mods.world.PlayerCounterMod; import net.silentclient.client.mods.world.TimeChangerMod; import net.silentclient.client.mods.world.WeatherChangerMod; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + public class ModInstances { private ArrayList mods = new ArrayList(); @@ -227,6 +187,7 @@ public class ModInstances { if(Client.getInstance().getBuildData().getBranch().equals("fushka")) { mods.add(new DonationsAlertsMod()); } + mods.add(new QuickPlayMod()); } public void postInit() { diff --git a/src/main/java/net/silentclient/client/mods/Setting.java b/src/main/java/net/silentclient/client/mods/Setting.java index b255d58..7f2ff96 100644 --- a/src/main/java/net/silentclient/client/mods/Setting.java +++ b/src/main/java/net/silentclient/client/mods/Setting.java @@ -160,7 +160,7 @@ public class Setting implements Comparable { } public boolean isKeyDown() { - if(!isKeybind()) { + if(!isKeybind() || kval == -1) { return false; } diff --git a/src/main/java/net/silentclient/client/mods/hypixel/QuickPlayMod.java b/src/main/java/net/silentclient/client/mods/hypixel/QuickPlayMod.java new file mode 100644 index 0000000..5a5b8b6 --- /dev/null +++ b/src/main/java/net/silentclient/client/mods/hypixel/QuickPlayMod.java @@ -0,0 +1,143 @@ +package net.silentclient.client.mods.hypixel; + +import com.google.common.reflect.TypeToken; +import net.minecraft.client.Minecraft; +import net.silentclient.client.Client; +import net.silentclient.client.event.EventTarget; +import net.silentclient.client.event.impl.KeyEvent; +import net.silentclient.client.gui.quickplay.QuickplayGui; +import net.silentclient.client.mods.Mod; +import net.silentclient.client.mods.ModCategory; +import net.silentclient.client.mods.Setting; +import net.silentclient.client.mods.util.Server; +import org.lwjgl.input.Keyboard; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Type; +import java.util.ArrayList; + +public class QuickPlayMod extends Mod { + public static ArrayList hypixelQuickplayModes; + public static ArrayList ruhypixelQuickplayModes; + public static boolean sending = false; + + public QuickPlayMod() { + super("Quickplay", ModCategory.MODS, "silentclient/icons/mods/quickplay.png"); + } + + @Override + public void setup() { + super.setup(); + setNewMod(true); + this.addKeybindSetting("Open Menu", this, Keyboard.KEY_MINUS); + initHypixelModes(); + initRuHypixelModes(); + } + + private void initHypixelModes() { + try { + Client.logger.info("Initialising Hypixel Quickplay Modes"); + InputStream in = getClass().getResourceAsStream("/assets/minecraft/silentclient/mods/quickplay/modes_hypixel.json"); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + StringBuffer content = new StringBuffer(); + String inputLine; + while ((inputLine = reader.readLine()) != null) { + content.append(inputLine); + } + + Type listType = new TypeToken>(){}.getType(); + hypixelQuickplayModes = Client.getInstance().getGson().fromJson(content.toString(), listType); + + for(QuickplayModeType mode : hypixelQuickplayModes) { + Client.logger.info(String.format("Initialising Hypixel Quickplay Mode (%s)", mode.name)); + mode.modes.forEach((command) -> { + Client.logger.info(String.format("Initialising Hypixel Quickplay Mode (%s) Command (%s)", mode.name, command.name)); + this.addKeybindSetting("Quickplay Mode:Hypixel:"+command.command, this, -1); + }); + } + } catch (Exception err) { + Client.logger.catching(err); + } + } + + private void initRuHypixelModes() { + try { + Client.logger.info("Initialising RuHypixel Quickplay Modes"); + InputStream in = getClass().getResourceAsStream("/assets/minecraft/silentclient/mods/quickplay/modes_ruhypixel.json"); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + StringBuffer content = new StringBuffer(); + String inputLine; + while ((inputLine = reader.readLine()) != null) { + content.append(inputLine); + } + + Type listType = new TypeToken>(){}.getType(); + ruhypixelQuickplayModes = Client.getInstance().getGson().fromJson(content.toString(), listType); + + for(QuickplayModeType mode : ruhypixelQuickplayModes) { + Client.logger.info(String.format("Initialising RuHypixel Quickplay Mode (%s)", mode.name)); + mode.modes.forEach((command) -> { + Client.logger.info(String.format("Initialising RuHypixel Quickplay Mode (%s) Command (%s)", mode.name, command.name)); + this.addKeybindSetting("Quickplay Mode:RuHypixel:"+command.command, this, -1); + }); + } + } catch (Exception err) { + Client.logger.catching(err); + } + } + + public static void runCommand(String command) { + if(sending) { + return; + } + sending = true; + (new Thread("QPM: " + command) { + public void run() { + Minecraft.getMinecraft().thePlayer.sendChatMessage(command); + try { + Thread.sleep(2000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + sending = false; + } + }).start(); + } + + @EventTarget + public void onClick(KeyEvent event) { + if(mc.thePlayer != null && mc.theWorld != null && mc.currentScreen == null) { + for(Setting setting : Client.getInstance().getSettingsManager().getSettingByMod(this)) { + if(setting.isKeybind()) { + if(setting.getName().equals("Open Menu")) { + // Open Menu + if(setting.isKeyDown() && (Server.isHypixel() || Server.isRuHypixel())) { + mc.displayGuiScreen(new QuickplayGui()); + } + } else { + if(sending) { + return; + } + String[] args = setting.getName().split(":"); + if(((args[1].equals("Hypixel") && Server.isHypixel()) || (args[1].equals("RuHypixel") && Server.isRuHypixel())) && setting.isKeyDown()) { + runCommand(args[2]); + } + } + } + } + } + } + + public class QuickplayModeType { + public String name; + public String icon; + public ArrayList modes; + } + + public class QuickplayCommandType { + public String name; + public String command; + } +} diff --git a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/BedwarsBedsMod.java b/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/BedwarsBedsMod.java deleted file mode 100644 index ac1c7f2..0000000 --- a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/BedwarsBedsMod.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.silentclient.client.mods.hypixel.bedwarsbeds; - -import java.lang.reflect.Field; - -import org.lwjgl.opengl.GLContext; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ChunkRenderContainer; -import net.minecraft.client.renderer.RenderList; -import net.minecraft.client.renderer.VboRenderList; -import net.silentclient.client.event.EventTarget; -import net.silentclient.client.event.impl.RenderTickEvent; -import net.silentclient.client.mods.Mod; -import net.silentclient.client.mods.ModCategory; - -public class BedwarsBedsMod extends Mod { - public BedwarsBedsMod() { - super("Bedwars Beds", ModCategory.MODS, "silentclient/icons/mods/bedwarsbeds.png"); - } - - @Override - public boolean isForceDisabled() { - return !GLContext.getCapabilities().OpenGL32; - } - - @EventTarget - public void onTick(RenderTickEvent event) { - if(isForceDisabled()) { - return; - } - try { - Field e = Minecraft.getMinecraft().renderGlobal.getClass().getDeclaredField("renderContainer"); - - e.setAccessible(true); - ChunkRenderContainer renderContainer = (ChunkRenderContainer) e.get(Minecraft.getMinecraft().renderGlobal); - - if (renderContainer instanceof VboRenderList) { - e.set(Minecraft.getMinecraft().renderGlobal, new HookedVboRenderList()); - } else if (renderContainer instanceof RenderList) { - e.set(Minecraft.getMinecraft().renderGlobal, new HookedRenderList()); - } - } catch (SecurityException | IllegalArgumentException | IllegalAccessException | NoSuchFieldException nosuchfieldexception) { - nosuchfieldexception.printStackTrace(); - } - } -} diff --git a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/BedwarsData.java b/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/BedwarsData.java deleted file mode 100644 index e905efb..0000000 --- a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/BedwarsData.java +++ /dev/null @@ -1,365 +0,0 @@ -package net.silentclient.client.mods.hypixel.bedwarsbeds; - -import java.util.HashMap; -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import org.lwjgl.util.vector.Vector3f; - -public class BedwarsData { - private static HashMap heightsMap = new HashMap(); - private static int[] cachedBedColourSegments = null; - private static long timeOfLastCache; - - public static int getLowestBlock(int x, int z) { - for (int i = 0; i < 100; ++i) { - if (!Minecraft.getMinecraft().theWorld.getBlockState(new BlockPos(x, i, z)).getBlock().getDefaultState().equals(Blocks.air.getDefaultState())) { - return i; - } - } - - return -1; - } - - public static String getHeightsString() { - StringBuilder b = new StringBuilder(); - - for (int i = -2; i <= 2; ++i) { - for (int j = -2; j <= 2; ++j) { - b.append(getLowestBlock(i * 5, j * 5)).append(","); - } - } - - return b.toString(); - } - - public static String getCurrentMapName() { - String heights = getHeightsString(); - String mapName = (String) BedwarsData.heightsMap.get(heights); - - return mapName == null ? "UNKNOWN" : mapName; - } - - public static int getColourIdForPos(BlockPos pos) { - return getBedColourSegments()[getSegmentNumForPos(pos)]; - } - - public static Vector3f getColourForPos(BlockPos pos) { - int id = getColourIdForPos(pos); - - switch (id) { - case 0: - return new Vector3f(43.0F, 0.0F, 45.0F); - - case 1: - return new Vector3f(189.0F, -6.0F, 0.0F); - - case 2: - return new Vector3f(190.0F, -87.0F, 33.0F); - - case 3: - return new Vector3f(338.0F, -40.0F, 36.0F); - - case 4: - return new Vector3f(214.0F, -78.0F, -29.0F); - - case 5: - return new Vector3f(0.0F, 0.0F, 0.0F); - - case 6: - return new Vector3f(238.0F, -20.0F, 1.0F); - - case 7: - return new Vector3f(91.0F, -5.0F, 15.0F); - - default: - return new Vector3f(0.0F, 0.0F, 0.0F); - } - } - - public static int[] getBedColourSegments() { - if (System.currentTimeMillis() - BedwarsData.timeOfLastCache < 3000L && BedwarsData.cachedBedColourSegments != null) { - return BedwarsData.cachedBedColourSegments; - } else { - BedwarsData.timeOfLastCache = System.currentTimeMillis(); - String s = getCurrentMapName(); - byte b0 = -1; - - switch (s.hashCode()) { - case -2127832817: - if (s.equals("Hollow")) { - b0 = 12; - } - break; - - case -2066516632: - if (s.equals("Speedway")) { - b0 = 11; - } - break; - - case -2030051349: - if (s.equals("Aquarium")) { - b0 = 18; - } - break; - - case -2022811672: - if (s.equals("Lectus")) { - b0 = 28; - } - break; - - case -1946685265: - if (s.equals("Pernicious")) { - b0 = 14; - } - break; - - case -1891512576: - if (s.equals("Chained")) { - b0 = 25; - } - break; - - case -1793484691: - if (s.equals("Temple")) { - b0 = 15; - } - break; - - case -1362593870: - if (s.equals("Steampunk")) { - b0 = 13; - } - break; - - case -1250609183: - if (s.equals("Rooftop")) { - b0 = 4; - } - break; - - case -712865462: - if (s.equals("Stonekeep")) { - b0 = 22; - } - break; - - case -708491190: - if (s.equals("Eastwood")) { - b0 = 21; - } - break; - - case -675209562: - if (s.equals("Swashbuckle")) { - b0 = 23; - } - break; - - case -147584549: - if (s.equals("Playground")) { - b0 = 6; - } - break; - - case -60461228: - if (s.equals("Jurassic")) { - b0 = 27; - } - break; - - case 65391950: - if (s.equals("Crypt")) { - b0 = 1; - } - break; - - case 73609615: - if (s.equals("Lotus")) { - b0 = 8; - } - break; - - case 601014429: - if (s.equals("Treenan")) { - b0 = 20; - } - break; - - case 673068839: - if (s.equals("Airshow")) { - b0 = 0; - } - break; - - case 688644453: - if (s.equals("Invasion")) { - b0 = 16; - } - break; - - case 799700365: - if (s.equals("Orchestra")) { - b0 = 9; - } - break; - - case 916564665: - if (s.equals("Archway")) { - b0 = 24; - } - break; - - case 1386045189: - if (s.equals("Dragonstar")) { - b0 = 7; - } - break; - - case 1558896284: - if (s.equals("Sandcastle")) { - b0 = 26; - } - break; - - case 1726400934: - if (s.equals("Boletum")) { - b0 = 19; - } - break; - - case 1772835215: - if (s.equals("Glacier")) { - b0 = 2; - } - break; - - case 1790335218: - if (s.equals("Waterfall")) { - b0 = 10; - } - break; - - case 1793076202: - if (s.equals("Lighthouse")) { - b0 = 3; - } - break; - - case 1964569124: - if (s.equals("Amazon")) { - b0 = 5; - } - break; - - case 1970308300: - if (s.equals("Ashore")) { - b0 = 17; - } - } - - switch (b0) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - BedwarsData.cachedBedColourSegments = new int[] { 0, 1, 2, 3, 4, 5, 6, 7}; - break; - - case 13: - BedwarsData.cachedBedColourSegments = new int[] { 2, 1, 0, 7, 6, 5, 4, 3}; - break; - - case 14: - BedwarsData.cachedBedColourSegments = new int[] { 4, 5, 6, 7, 0, 1, 2, 3}; - break; - - case 15: - BedwarsData.cachedBedColourSegments = new int[] { 0, 6, 6, 7, 7, 5, 5, 0}; - break; - - case 16: - BedwarsData.cachedBedColourSegments = new int[] { 7, 7, 0, 0, 5, 5, 6, 6}; - break; - - case 17: - case 18: - case 19: - case 20: - case 21: - BedwarsData.cachedBedColourSegments = new int[] { 5, 6, 6, 7, 7, 0, 0, 5}; - break; - - case 22: - BedwarsData.cachedBedColourSegments = new int[] { 7, 0, 0, 5, 5, 6, 6, 7}; - break; - - case 23: - case 24: - case 25: - BedwarsData.cachedBedColourSegments = new int[] { 6, 7, 7, 0, 0, 5, 5, 6}; - break; - - case 26: - BedwarsData.cachedBedColourSegments = new int[] { 7, 6, 6, 0, 0, 5, 5, 7}; - break; - - case 27: - BedwarsData.cachedBedColourSegments = new int[] { 0, 7, 7, 6, 6, 5, 5, 0}; - break; - - case 28: - BedwarsData.cachedBedColourSegments = new int[] { 0, 0, 7, 7, 5, 5, 6, 6}; - } - - return BedwarsData.cachedBedColourSegments == null ? new int[] { 5, 5, 5, 5, 5, 5, 5, 5} : BedwarsData.cachedBedColourSegments; - } - } - - public static int getSegmentNumForPos(BlockPos pos) { - return pos.getX() > 0 ? (pos.getZ() > 0 ? (Math.abs(pos.getX()) > Math.abs(pos.getZ()) ? 0 : 1) : (Math.abs(pos.getX()) > Math.abs(pos.getZ()) ? 7 : 6)) : (pos.getZ() > 0 ? (Math.abs(pos.getX()) > Math.abs(pos.getZ()) ? 3 : 2) : (Math.abs(pos.getX()) > Math.abs(pos.getZ()) ? 4 : 5)); - } - - static { - BedwarsData.heightsMap.put("60,60,-1,64,64,60,61,-1,65,64,-1,-1,-1,-1,-1,64,65,-1,61,60,64,64,-1,60,60,", "Airshow"); - BedwarsData.heightsMap.put("62,61,62,61,61,61,62,62,62,62,62,62,-1,63,62,62,62,62,62,-1,62,61,62,62,61,", "Crypt"); - BedwarsData.heightsMap.put("56,56,-1,56,56,56,-1,-1,-1,56,-1,-1,-1,-1,-1,56,-1,-1,-1,56,56,56,-1,56,56,", "Glacier"); - BedwarsData.heightsMap.put("55,55,58,56,55,50,51,53,52,53,53,51,51,51,55,54,51,50,51,53,54,52,51,51,55,", "Lighthouse"); - BedwarsData.heightsMap.put("20,20,-1,-1,20,20,20,-1,-1,20,-1,-1,-1,-1,-1,20,-1,-1,20,20,20,-1,-1,20,20,", "Rooftop"); - BedwarsData.heightsMap.put("60,60,60,60,60,60,60,63,60,60,60,60,-1,60,60,60,60,63,60,60,60,60,60,60,60,", "Amazon"); - BedwarsData.heightsMap.put("65,65,65,65,65,65,65,65,65,65,65,65,107,65,65,65,65,65,65,65,65,65,65,65,65,", "Playground"); - BedwarsData.heightsMap.put("63,63,56,63,63,63,56,56,56,63,56,56,48,56,56,63,56,56,56,63,63,63,56,63,63,", "Steampunk"); - BedwarsData.heightsMap.put("65,68,65,67,65,67,65,65,65,68,65,65,65,65,65,68,65,65,65,67,65,67,65,68,65,", "Dragonstar"); - BedwarsData.heightsMap.put("57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,", "Lotus"); - BedwarsData.heightsMap.put("-1,66,63,66,-1,66,49,50,49,66,63,50,50,50,63,66,49,50,49,66,-1,66,63,66,-1,", "Orchestra"); - BedwarsData.heightsMap.put("58,59,59,58,58,58,-1,-1,-1,59,59,-1,-1,-1,59,59,-1,-1,-1,58,58,58,59,59,58,", "Waterfall"); - BedwarsData.heightsMap.put("-1,61,57,56,64,56,76,57,54,54,54,54,64,54,54,54,54,57,76,56,64,56,57,61,-1,", "Speedway"); - BedwarsData.heightsMap.put("57,55,55,56,57,56,57,-1,58,55,55,-1,-1,-1,55,55,56,-1,56,56,55,56,55,55,55,", "Hollow"); - BedwarsData.heightsMap.put("-1,68,60,65,-1,65,-1,66,-1,68,60,66,-1,66,63,68,-1,66,-1,65,-1,65,60,68,-1,", "Pernicious"); - BedwarsData.heightsMap.put("48,49,54,52,49,51,49,49,49,50,52,49,48,49,52,52,49,49,49,51,54,51,52,51,48,", "Ashore"); - BedwarsData.heightsMap.put("62,59,57,59,-1,58,62,60,-1,59,57,59,-1,59,57,59,-1,60,62,58,-1,59,57,59,62,", "Swashbuckle"); - BedwarsData.heightsMap.put("76,76,88,-1,-1,77,87,-1,-1,-1,87,-1,-1,-1,84,88,-1,-1,85,76,-1,87,87,76,76,", "Boletum"); - BedwarsData.heightsMap.put("52,50,50,51,51,51,55,-1,63,-1,55,-1,79,-1,55,-1,63,-1,55,51,51,51,50,50,52,", "Chained"); - BedwarsData.heightsMap.put("71,81,81,81,81,80,77,83,70,81,71,71,-1,-1,71,81,75,81,77,74,81,69,81,81,77,", "Aquarium"); - BedwarsData.heightsMap.put("58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,", "Archway"); - BedwarsData.heightsMap.put("36,35,35,35,36,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,36,35,35,35,36,", "Stonekeep"); - BedwarsData.heightsMap.put("-1,-1,84,-1,-1,-1,84,80,83,88,84,81,79,82,79,84,86,80,82,-1,77,77,98,-1,-1,", "Invasion"); - BedwarsData.heightsMap.put("55,54,53,53,54,53,52,52,52,54,53,51,51,52,54,53,53,52,53,54,55,53,53,53,55,", "Treenan"); - BedwarsData.heightsMap.put("53,53,53,53,53,53,55,77,55,53,53,77,59,77,53,53,55,77,55,53,53,53,53,53,53,", "Eastwood"); - BedwarsData.heightsMap.put("55,51,52,52,53,52,50,51,52,54,52,51,50,49,51,51,52,51,52,52,53,52,53,52,52,", "Lectus"); - BedwarsData.heightsMap.put("58,56,56,56,58,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,58,56,56,56,58,", "Jurassic"); - BedwarsData.heightsMap.put("52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,", "Temple"); - BedwarsData.heightsMap.put("57,60,59,59,59,59,58,58,58,59,59,58,58,58,59,59,58,58,58,59,59,59,59,59,59,", "Sandcastle"); - } -} diff --git a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/HookedRenderList.java b/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/HookedRenderList.java deleted file mode 100644 index 780104d..0000000 --- a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/HookedRenderList.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.silentclient.client.mods.hypixel.bedwarsbeds; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Iterator; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ChunkRenderContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.chunk.ListedRenderChunk; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.util.EnumWorldBlockLayer; -import org.lwjgl.opengl.GL11; -import org.lwjgl.util.vector.Vector3f; -import org.lwjgl.util.vector.Vector4f; - -public class HookedRenderList extends ChunkRenderContainer { - public void renderChunkLayer(EnumWorldBlockLayer layer) { - if (this.initialized) { - Iterator iterator = this.renderChunks.iterator(); - - while (iterator.hasNext()) { - RenderChunk renderchunk = (RenderChunk) iterator.next(); - ListedRenderChunk listedrenderchunk = (ListedRenderChunk) renderchunk; - - GlStateManager.pushMatrix(); - this.preRenderChunk(renderchunk); - HashMap data = new HashMap(); - - data.put("bed_colour_enabled", Integer.valueOf(1)); - Vector3f colour = BedwarsData.getColourForPos(renderchunk.getPosition().add(8, 0, 8)); - - data.put("bed_colour", Integer.valueOf((int) colour.x)); - data.put("bed_colour_s", Integer.valueOf((int) colour.y)); - data.put("bed_colour_v", Integer.valueOf((int) colour.z)); - String[] sprites = new String[] { "bed_feet_end", "bed_feet_side", "bed_feet_top", "bed_head_end", "bed_head_side", "bed_head_top"}; - String[] astring = sprites; - int i = sprites.length; - - for (int j = 0; j < i; ++j) { - String s = astring[j]; - TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/" + s); - - data.put(s, new Vector4f(sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV())); - ShaderManager.getShaderManager().putShaderData(ShaderManager.Shader.WORLD, data); - } - - ShaderManager.getShaderManager().enableShader(ShaderManager.Shader.WORLD); - GL11.glCallList(listedrenderchunk.getDisplayList(layer, listedrenderchunk.getCompiledChunk())); - ShaderManager.getShaderManager().disableShader(); - GlStateManager.popMatrix(); - } - - GlStateManager.resetColor(); - this.renderChunks.clear(); - } - - } -} diff --git a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/HookedVboRenderList.java b/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/HookedVboRenderList.java deleted file mode 100644 index 46ab4ad..0000000 --- a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/HookedVboRenderList.java +++ /dev/null @@ -1,74 +0,0 @@ -package net.silentclient.client.mods.hypixel.bedwarsbeds; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Iterator; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ChunkRenderContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.vertex.VertexBuffer; -import net.minecraft.util.EnumWorldBlockLayer; -import org.lwjgl.opengl.GL11; -import org.lwjgl.util.vector.Vector3f; -import org.lwjgl.util.vector.Vector4f; - -public class HookedVboRenderList extends ChunkRenderContainer { - - public void renderChunkLayer(EnumWorldBlockLayer layer) { - if (this.initialized) { - Iterator iterator = this.renderChunks.iterator(); - - while (iterator.hasNext()) { - RenderChunk renderchunk = (RenderChunk) iterator.next(); - VertexBuffer vertexbuffer = renderchunk.getVertexBufferByLayer(layer.ordinal()); - - GlStateManager.pushMatrix(); - this.preRenderChunk(renderchunk); - renderchunk.multModelviewMatrix(); - vertexbuffer.bindBuffer(); - this.setupArrayPointers(); - HashMap data = new HashMap(); - - data.put("bed_colour_enabled", Integer.valueOf(1)); - Vector3f colour = BedwarsData.getColourForPos(renderchunk.getPosition().add(8, 0, 8)); - - data.put("bed_colour", Integer.valueOf((int) colour.x)); - data.put("bed_colour_s", Integer.valueOf((int) colour.y)); - data.put("bed_colour_v", Integer.valueOf((int) colour.z)); - String[] sprites = new String[] { "bed_feet_end", "bed_feet_side", "bed_feet_top", "bed_head_end", "bed_head_side", "bed_head_top"}; - String[] astring = sprites; - int i = sprites.length; - - for (int j = 0; j < i; ++j) { - String s = astring[j]; - TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("minecraft:blocks/" + s); - - data.put(s, new Vector4f(sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV())); - ShaderManager.getShaderManager().putShaderData(ShaderManager.Shader.WORLD, data); - } - - ShaderManager.getShaderManager().enableShader(ShaderManager.Shader.WORLD); - vertexbuffer.drawArrays(7); - ShaderManager.getShaderManager().disableShader(); - GlStateManager.popMatrix(); - } - - OpenGlHelper.glBindBuffer(OpenGlHelper.GL_ARRAY_BUFFER, 0); - GlStateManager.resetColor(); - this.renderChunks.clear(); - } - - } - - private void setupArrayPointers() { - GL11.glVertexPointer(3, 5126, 28, 0L); - GL11.glColorPointer(4, 5121, 28, 12L); - GL11.glTexCoordPointer(2, 5126, 28, 16L); - OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit); - GL11.glTexCoordPointer(2, 5122, 28, 24L); - OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); - } -} \ No newline at end of file diff --git a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/ShaderManager.java b/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/ShaderManager.java deleted file mode 100644 index 70f7645..0000000 --- a/src/main/java/net/silentclient/client/mods/hypixel/bedwarsbeds/ShaderManager.java +++ /dev/null @@ -1,169 +0,0 @@ -package net.silentclient.client.mods.hypixel.bedwarsbeds; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.Iterator; - -import org.lwjgl.opengl.GL20; -import org.lwjgl.util.vector.Vector3f; -import org.lwjgl.util.vector.Vector4f; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.ResourceLocation; - -public class ShaderManager { - - private static ShaderManager INSTANCE = new ShaderManager(); - private HashMap shaderMap = new HashMap(); - private HashMap> shaderData = new HashMap>(); - - public static ShaderManager getShaderManager() { - return ShaderManager.INSTANCE; - } - - public void putShaderData(ShaderManager.Shader type, HashMap data) { - this.shaderData.put(type, data); - } - - public void disableShader() { - GL20.glUseProgram(0); - } - - public void enableShader(ShaderManager.Shader type) { - if (!this.shaderMap.containsKey(type)) { - this.loadProgram(type); - } - - GL20.glUseProgram(((int[]) this.shaderMap.get(type))[2]); - this.loadData(type); - } - - private void loadData(ShaderManager.Shader type) { - HashMap map = (HashMap) this.shaderData.get(type); - - if (map != null) { - Iterator iterator = map.keySet().iterator(); - - while (iterator.hasNext()) { - String key = (String) iterator.next(); - int location = GL20.glGetUniformLocation(((int[]) this.shaderMap.get(type))[2], key); - Object data = map.get(key); - - if (data instanceof Integer) { - GL20.glUniform1i(location, ((Integer) data).intValue()); - } else if (data instanceof Float) { - GL20.glUniform1f(location, ((Float) data).floatValue()); - } else if (data instanceof Vector3f) { - Vector3f vec = (Vector3f) data; - - GL20.glUniform3f(location, vec.x, vec.y, vec.z); - } else { - if (!(data instanceof Vector4f)) { - throw new UnsupportedOperationException("Failed to load data into shader: Unsupported data type."); - } - - Vector4f vec1 = (Vector4f) data; - - GL20.glUniform4f(location, vec1.x, vec1.y, vec1.z, vec1.w); - } - } - - } - } - - private void loadProgram(ShaderManager.Shader type) { - int vertShader = this.createShader('謱', this.getShaderSource('謱', type)); - - if (vertShader != -1) { - int fragShader = this.createShader('謰', this.getShaderSource('謰', type)); - - if (fragShader != -1) { - int program = GL20.glCreateProgram(); - - GL20.glAttachShader(program, vertShader); - GL20.glAttachShader(program, fragShader); - GL20.glLinkProgram(program); - if (GL20.glGetProgrami(program, '讂') == 0) { - System.err.println(GL20.glGetProgramInfoLog(program, 100)); - } else { - GL20.glValidateProgram(program); - if (GL20.glGetProgrami(program, '讃') == 0) { - System.err.println(GL20.glGetProgramInfoLog(program, 100)); - } else { - this.shaderMap.put(type, new int[] { vertShader, fragShader, program}); - } - } - } - } - } - - private String getShaderSource(int shaderType, ShaderManager.Shader shaderName) { - ResourceLocation loc = new ResourceLocation("silentclient/shaders/" + shaderName.toString().toLowerCase() + ".shd"); - InputStream is = null; - - try { - is = Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream(); - } catch (IOException ioexception) { - ioexception.printStackTrace(); - } - - try { - BufferedReader e = new BufferedReader(new InputStreamReader(is)); - Throwable throwable = null; - - try { - StringBuilder builder = new StringBuilder(); - - String line; - - while ((line = e.readLine()) != null) { - builder.append(line).append("\n"); - } - - String source = builder.toString(); - - return shaderType == '謱' ? source.split("###FRAGMENT SHADER")[0].split("###VERTEX SHADER")[1].trim() : (shaderType == '謰' ? source.split("###FRAGMENT SHADER")[1].trim() : null); - } catch (Throwable throwable1) { - throwable = throwable1; - throw throwable1; - } finally { - if (e != null) { - if (throwable != null) { - try { - e.close(); - } catch (Throwable throwable2) { - throwable.addSuppressed(throwable2); - } - } else { - e.close(); - } - } - - } - } catch (IOException ioexception1) { - ioexception1.printStackTrace(); - return null; - } - } - - private int createShader(int programType, String source) { - int shader = GL20.glCreateShader(programType); - - GL20.glShaderSource(shader, source); - GL20.glCompileShader(shader); - if (GL20.glGetShaderi(shader, '讁') == 0) { - System.err.println(GL20.glGetShaderInfoLog(shader, 100)); - return -1; - } else { - return shader; - } - } - - public static enum Shader { - - WORLD, HUD; - } -} \ No newline at end of file diff --git a/src/main/java/net/silentclient/client/mods/player/AutoTextMod.java b/src/main/java/net/silentclient/client/mods/player/AutoTextMod.java index 124e2a2..98641ed 100644 --- a/src/main/java/net/silentclient/client/mods/player/AutoTextMod.java +++ b/src/main/java/net/silentclient/client/mods/player/AutoTextMod.java @@ -18,6 +18,7 @@ import net.silentclient.client.gui.theme.Theme; import net.silentclient.client.mods.CustomFontRenderer; import net.silentclient.client.mods.Mod; import net.silentclient.client.mods.ModCategory; +import net.silentclient.client.mods.util.Server; import net.silentclient.client.utils.MenuBlurUtils; import net.silentclient.client.utils.MouseCursorHandler; import net.silentclient.client.utils.NotificationUtils; @@ -37,7 +38,12 @@ public class AutoTextMod extends Mod { public AutoTextMod() { super("Auto Text", ModCategory.MODS, "silentclient/icons/mods/autotext.png"); } - + + @Override + public boolean isForceDisabled() { + return Server.isHypixel(); + } + @Override public MouseCursorHandler.CursorType renderCustomLiteComponent(int x, int y, int width, int height, int mouseX, int mouseY) { MouseCursorHandler.CursorType cursorType = null; @@ -180,7 +186,7 @@ public class AutoTextMod extends Mod { @EventTarget public void onClick(KeyEvent event) { - if(mc.thePlayer != null && mc.theWorld != null && mc.currentScreen == null && !sending) { + if(mc.thePlayer != null && mc.theWorld != null && mc.currentScreen == null && !sending && !isForceDisabled()) { for(AutoTextCommand command : commands) { if(command.getKey() == event.getKey()) { Client.getInstance().getModInstances().getAutoText().sending = true; diff --git a/src/main/java/net/silentclient/client/utils/Players.java b/src/main/java/net/silentclient/client/utils/Players.java index d3d0029..b53dc83 100644 --- a/src/main/java/net/silentclient/client/utils/Players.java +++ b/src/main/java/net/silentclient/client/utils/Players.java @@ -19,7 +19,7 @@ public class Players { public static final Map playersCache = new WeakHashMap<>(); public static void reload() { -// playersCache.clear(); + playersCache.clear(); } public static String getPlayerStatus(boolean isMainPlayer, String name, UUID id, AbstractClientPlayer playerRow) { @@ -117,10 +117,28 @@ public class Players { Players.getPlayerStatus(false, ((AbstractClientPlayerExt) Minecraft.getMinecraft().thePlayer).silent$getNameClear(), EntityPlayer.getUUID(Minecraft.getMinecraft().thePlayer.getGameProfile()), Minecraft.getMinecraft().thePlayer); } } - if(playersCache.containsKey(account.getUsername())) { - playersCache.remove(account.getUsername()); + if(Minecraft.getMinecraft().theWorld != null && getPlayerEntityByName(account.original_username) != null) { + Client.logger.info("Account processing: " + account.getUsername()); + if(playersCache.containsKey(account.getUsername())) { + playersCache.remove(account.getUsername()); + } + playersCache.put(account.getUsername(), account); } - playersCache.put(account.getUsername(), account); + } + + public static EntityPlayer getPlayerEntityByName(String name) + { + for (int i = 0; i < Minecraft.getMinecraft().theWorld.playerEntities.size(); ++i) + { + EntityPlayer entityplayer = (EntityPlayer)Minecraft.getMinecraft().theWorld.playerEntities.get(i); + + if (name.equalsIgnoreCase(entityplayer.getName())) + { + return entityplayer; + } + } + + return null; } public static PlayerResponse getAccount(String name) { diff --git a/src/main/java/net/silentclient/client/utils/culling/EntityCulling.java b/src/main/java/net/silentclient/client/utils/culling/EntityCulling.java index 7086db8..579069d 100644 --- a/src/main/java/net/silentclient/client/utils/culling/EntityCulling.java +++ b/src/main/java/net/silentclient/client/utils/culling/EntityCulling.java @@ -162,8 +162,6 @@ public class EntityCulling { if (Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Occlusion Culling").getValString().equals("Off") || !shouldPerformCulling) { return; } - -// System.out.println("Working!!"); //#if MC==10809 EntityLivingBase entity = (EntityLivingBase)event.getEntity(); @@ -198,7 +196,9 @@ public class EntityCulling { //$$ RenderLivingBase renderer = event.getRenderer(); //#endif - renderer.renderName(entity, x, y, z); + if(entity instanceof EntityPlayer) { + renderer.renderName(entity, x, y, z); + } } } diff --git a/src/main/resources/assets/minecraft/silentclient/icons/mods/quickplay.png b/src/main/resources/assets/minecraft/silentclient/icons/mods/quickplay.png new file mode 100755 index 0000000..e9f7f3d Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/icons/mods/quickplay.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/arcade.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/arcade.png new file mode 100755 index 0000000..a826e20 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/arcade.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/bedwars.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/bedwars.png new file mode 100755 index 0000000..d84b2ee Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/bedwars.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/blitz.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/blitz.png new file mode 100755 index 0000000..cf167c6 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/blitz.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/build_battle.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/build_battle.png new file mode 100755 index 0000000..c101e0c Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/build_battle.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/classic.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/classic.png new file mode 100755 index 0000000..72ad05f Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/classic.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/cvc.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/cvc.png new file mode 100755 index 0000000..1adbe15 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/cvc.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/duels.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/duels.png new file mode 100755 index 0000000..ac2ba17 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/duels.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/housing.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/housing.png new file mode 100755 index 0000000..6da014c Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/housing.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/main_lobby.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/main_lobby.png new file mode 100755 index 0000000..8d4ba71 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/main_lobby.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/modes_hypixel.json b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/modes_hypixel.json new file mode 100644 index 0000000..ebdfe9a --- /dev/null +++ b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/modes_hypixel.json @@ -0,0 +1,609 @@ +[ + { + "name": "Main Lobby", + "icon": "main_lobby", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby main" + }, + { + "name": "Run Lobby Command", + "command": "/lobby" + }, + { + "name": "Run /stuck", + "command": "/stuck" + } + ] + }, + { + "name": "Arcade", + "icon": "arcade", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby arcade" + }, + { + "name": "Blocking Dead", + "command": "/play arcade_day_one" + }, + { + "name": "Bounty Hunters", + "command": "/play arcade_bounty_hunters" + }, + { + "name": "Capture The Wool", + "command": "/play arcade_pvp_ctw" + }, + { + "name": "Creeper Attack", + "command": "/play arcade_creeper_attack" + }, + { + "name": "Dragon Wars", + "command": "/play arcade_dragon_wars" + }, + { + "name": "Ender Spleef", + "command": "/play arcade_ender_spleef" + }, + { + "name": "Farm Hunt", + "command": "/play arcade_farm_hunt" + }, + { + "name": "Football", + "command": "/play arcade_soccer" + }, + { + "name": "Galaxy Wars", + "command": "/play arcade_starwars" + }, + { + "name": "Hide and Seek - Party Pooper", + "command": "/play arcade_hide_and_seek_party_pooper" + }, + { + "name": "Hide and Seek - Prop Hunt", + "command": "/play arcade_hide_and_seek_prop_hunt" + }, + { + "name": "Hole in the Wall", + "command": "/play arcade_hole_in_the_wall" + }, + { + "name": "Hypixel Says", + "command": "/play arcade_simon_says" + }, + { + "name": "Santa Says", + "command": "/play arcade_santa_says" + }, + { + "name": "Mini Walls", + "command": "/play arcade_mini_walls" + }, + { + "name": "Party Games", + "command": "/play arcade_party_games_1" + }, + { + "name": "Pixel Painters", + "command": "/play arcade_pixel_painters" + }, + { + "name": "Throw Out", + "command": "/play arcade_throw_out" + }, + { + "name": "Zombies - Dead End", + "command": "/play arcade_zombies_dead_end" + }, + { + "name": "Zombies - Bad Blood", + "command": "/play arcade_zombies_bad_blood" + }, + { + "name": "Zombies - Alien Arcadium", + "command": "/play arcade_zombies_alien_arcadium" + } + ] + }, + { + "name": "Bed Wars", + "icon": "bedwars", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby bedwars" + }, + { + "name": "Solo", + "command": "/play bedwars_eight_one" + }, + { + "name": "Doubles", + "command": "/play bedwars_eight_two" + }, + { + "name": "3v3v3v3", + "command": "/play bedwars_four_three" + }, + { + "name": "4v4v4v4", + "command": "/play bedwars_four_four" + }, + { + "name": "4v4", + "command": "/play bedwars_two_four" + }, + { + "name": "Capture", + "command": "/play bedwars_capture" + }, + { + "name": "Rush Doubles", + "command": "/play bedwars_eight_two_rush" + }, + { + "name": "Rush 4v4", + "command": "/play bedwars_four_four_rush" + }, + { + "name": "Ultimate Doubles", + "command": "/play bedwars_eight_two_ultimate" + }, + { + "name": "Ultimate 4v4", + "command": "/play bedwars_four_four_ultimate" + }, + { + "name": "Castles", + "command": "/play bedwars_castle" + }, + { + "name": "Voidless Doubles", + "command": "/play bedwars_eight_two_voidless" + }, + { + "name": "Voidless 4v4", + "command": "/play bedwars_four_four_voidless" + }, + { + "name": "Armed Doubles", + "command": "/play bedwars_eight two_armed" + }, + { + "name": "Armed 4v4", + "command": "/play bedwars_four_four_armed" + }, + { + "name": "Lucky Blocks Doubles", + "command": "/play bedwars_eight two_lucky" + }, + { + "name": "Lucky Blocks 4v4", + "command": "/play bedwars_four_four_lucky" + } + ] + }, + { + "name": "Blitz SG", + "icon": "blitz", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby blitz" + }, + { + "name": "Solo", + "command": "/play blitz_solo_normal" + }, + { + "name": "Teams", + "command": "/play blitz_teams_normal" + } + ] + }, + { + "name": "Build Battle", + "icon": "build_battle", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby buildbattle" + }, + { + "name": "Solo", + "command": "/play build_battle_solo_normal" + }, + { + "name": "Teams", + "command": "/play build_battle_teams_normal" + }, + { + "name": "Pro Mode", + "command": "/play build_battle_solo_pro" + }, + { + "name": "Guess The Build", + "command": "/play build_battle_guess_the_build" + } + ] + }, + { + "name": "Classic Games", + "icon": "classic", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby classic" + }, + { + "name": "Vampirez", + "command": "/play vampirez" + }, + { + "name": "Quakecraft Solo", + "command": "/play quake_solo" + }, + { + "name": "Quakecraft Teams", + "command": "/play quake_teams" + }, + { + "name": "Paintball", + "command": "/play paintball" + }, + { + "name": "Arena Brawl 1v1", + "command": "/play arena_1v1" + }, + { + "name": "Arena Brawl 2v2", + "command": "/play arena_2v2" + }, + { + "name": "Arena Brawl 4v4", + "command": "/play arena_4v4" + }, + { + "name": "The Walls", + "command": "/play walls" + }, + { + "name": "Turbo Kart Racers", + "command": "/play tkr" + } + ] + }, + { + "name": "Cops and Crims", + "icon": "cvc", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby cops" + }, + { + "name": "Defusal", + "command": "/play mcgo_normal" + }, + { + "name": "Team Deathmatch", + "command": "/play mcgo_deathmatch" + }, + { + "name": "Defusal Party", + "command": "/play mcgo_normal_party" + }, + { + "name": "Team Deathmatch Party", + "command": "/play mcgo_deathmatch_party" + } + ] + }, + { + "name": "Duels", + "icon": "duels", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby duels" + }, + { + "name": "Blitz 1v1", + "command": "/play duels_blitz_duel" + }, + { + "name": "Bow 1v1", + "command": "/play duels_bow_duel" + }, + { + "name": "Bow Spleef 1v1", + "command": "/play duels_bowspleef_duel" + }, + { + "name": "Boxing", + "command": "/play duels_boxing_duel" + }, + { + "name": "Bridge 1v1", + "command": "/play duels_bridge_duel" + }, + { + "name": "Bridge 2v2", + "command": "/play duels_bridge_doubles" + }, + { + "name": "Bridge 2v2v2v2", + "command": "/play duels_bridge_2v2v2v2" + }, + { + "name": "Bridge 3v3", + "command": "/play duels_bridge_threes" + }, + { + "name": "Bridge 3v3v3v3", + "command": "/play duels_bridge_3v3v3v3" + }, + { + "name": "Bridge 4v4", + "command": "/play duels_bridge_four" + }, + { + "name": "Bridge CTF", + "command": "/play duels_capture_threes" + },{ + "name": "Classic 1v1", + "command": "/play duels_classic_duel" + }, + { + "name": "Combo 1v1", + "command": "/play duels_combo_duel" + }, + { + "name": "MegaWalls 1v1", + "command": "/play duels_mw_duel" + }, + { + "name": "MegaWalls 2v2", + "command": "/play duels_mw_doubles" + }, + { + "name": "NoDebuff 1v1", + "command": "/play duels_potion_duel" + }, + { + "name": "OP 1v1", + "command": "/play duels_op_duel" + }, + { + "name": "OP 2v2", + "command": "/play duels_op_doubles" + }, + { + "name": "Parkour", + "command": "/play duels_parkour_eight" + }, + { + "name": "SkyWars 1v1", + "command": "/play duels_sw_duel" + }, + { + "name": "SkyWars 2v2", + "command": "/play duels_sw_doubles" + }, + { + "name": "Sumo", + "command": "/play duels_sumo_duel" + }, + { + "name": "UHC 1v1", + "command": "/play duels_uhc_duel" + }, + { + "name": "UHC 2v2", + "command": "/play duels_uhc_doubles" + }, + { + "name": "UHC 4v4", + "command": "/play arena_4v4" + }, + { + "name": "UHC Deathmatch", + "command": "/play duels_uhc_meetup" + } + ] + }, + { + "name": "Murder Mystery", + "icon": "murder", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby murder" + }, + { + "name": "Classic", + "command": "/play murder_classic" + }, + { + "name": "Assassins", + "command": "/play murder_assassins" + }, + { + "name": "Infection V2", + "command": "/play murder_infection" + }, + { + "name": "Double Up!", + "command": "/play murder_double_up" + } + ] + }, + { + "name": "SkyWars", + "icon": "skywars", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby skywars" + }, + { + "name": "Solo Normal", + "command": "/play solo_normal" + }, + { + "name": "Solo Insane", + "command": "/play solo_insane" + }, + { + "name": "Doubles Normal", + "command": "/play teams_normal" + }, + { + "name": "Doubles Insane", + "command": "/play teams_insane" + }, + { + "name": "Mega Normal", + "command": "/play mega_normal" + }, + { + "name": "Mega Doubles", + "command": "/play mega_doubles" + }, + { + "name": "Solo TNT Madness", + "command": "/play solo_insane_tnt_madness" + }, + { + "name": "Doubles TNT Madness", + "command": "/play teams_insane_tnt_madness" + }, + { + "name": "Solo Rush", + "command": "/play solo_insane_rush" + }, + { + "name": "Doubles Rush", + "command": "/play teams_insane_rush" + }, + { + "name": "Solo Slime", + "command": "/play solo_insane_slime" + }, + { + "name": "Doubles Slime", + "command": "/play teams_insane_slime" + }, + { + "name": "Solo Lucky Blocks", + "command": "/play solo_insane_lucky" + }, + { + "name": "Doubles Lucky Blocks", + "command": "/play teams_insane_lucky" + }, + { + "name": "Hunter vs. Beasts", + "command": "/play solo_insane_hunters_vs_beasts" + } + ] + }, + { + "name": "Smash Heroes", + "icon": "smash_heroes", + "modes": [ + { + "name": "Solo", + "command": "/play super_smash_solo_normal" + }, + { + "name": "2v2", + "command": "/play super_smash_2v2_normal" + }, + { + "name": "2v2v2", + "command": "/play super_smash_teams_normal" + }, + { + "name": "Friends", + "command": "/play super_smash_friends_normal" + }, + { + "name": "1v1", + "command": "/play super_smash_1v1_normal" + } + ] + }, + { + "name": "TNT Games", + "icon": "tnt", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby tnt" + }, + { + "name": "TNT Run", + "command": "/play tnt_tntrun" + }, + { + "name": "PVP Run", + "command": "/play tnt_pvprun" + }, + { + "name": "Bow Spleef", + "command": "/play tnt_bowspleef" + }, + { + "name": "TNT Tag", + "command": "/play tnt_tntag" + }, + { + "name": "Wizards", + "command": "/play tnt_capture" + } + ] + }, + { + "name": "Warlords", + "icon": "warlords", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby warlords" + }, + { + "name": "Capture the Flag", + "command": "/play warlords_ctf_mini" + }, + { + "name": "Domination", + "command": "/play warlords_domination" + }, + { + "name": "Team Deathmatch", + "command": "/play warlords_team_deathmatch" + } + ] + }, + { + "name": "Wool Wars", + "icon": "woolwars", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby woolwars" + }, + { + "name": "4v4", + "command": "/play wool_wool_wars_two_four" + } + ] + } +] \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/modes_ruhypixel.json b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/modes_ruhypixel.json new file mode 100644 index 0000000..bcda36b --- /dev/null +++ b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/modes_ruhypixel.json @@ -0,0 +1,138 @@ +[ + { + "name": "Lobby", + "icon": "ruhypixel", + "modes": [ + { + "name": "Go to Lobby", + "command": "/lobby" + } + ] + }, + { + "name": "Arcade", + "icon": "arcade", + "modes": [ + { + "name": "Block Party", + "command": "/play BLOCK_PARTY" + }, + { + "name": "Dropper", + "command": "/play DROPPER" + }, + { + "name": "Murder Mystery", + "command": "/play MURDERMYSTERY_CLASSIC" + } + ] + }, + { + "name": "Bed Wars", + "icon": "bedwars", + "modes": [ + { + "name": "Solo", + "command": "/play BEDWARS_SOLO" + }, + { + "name": "Doubles", + "command": "/play BEDWARS_TEAM" + }, + { + "name": "3v3v3v3", + "command": "/play BEDWARS_3v3v3v3" + }, + { + "name": "4v4v4v4", + "command": "/play BEDWARS_4v4v4v4" + } + ] + }, + { + "name": "Duels", + "icon": "duels", + "modes": [ + { + "name": "Bed Wars", + "command": "/play BEDWARS_DUELS" + }, + { + "name": "Bridge", + "command": "/play DUEL_THE_BRIDGE" + }, + { + "name": "Boxing", + "command": "/play DUEL_BOXING" + }, + { + "name": "Classic", + "command": "/play DUEL_CLASSIC" + }, + { + "name": "Combo", + "command": "/play DUEL_COMBO" + }, + { + "name": "NoDebuff", + "command": "/play DUEL_NODEBUFF" + }, + { + "name": "OP", + "command": "/play DUEL_OP" + }, + { + "name": "Pearl Fight", + "command": "/play DUEL_PEARL_FIGHT" + }, + { + "name": "Sky Wars", + "command": "/play SKYWARS_DUELS" + }, + { + "name": "Stick Fight", + "command": "/play DUEL_STICK_DUELS" + }, + { + "name": "Sumo", + "command": "/play DUEL_SUMO" + }, + { + "name": "UHC", + "command": "/play DUEL_UHC" + } + ] + }, + { + "name": "SkyWars", + "icon": "skywars", + "modes": [ + { + "name": "Solo", + "command": "/play SKYWARS_SOLO_INSANE" + }, + { + "name": "Teams", + "command": "/play SKYWARS_TEAM_INSANE" + }, + { + "name": "Ranked", + "command": "/play SKYWARS_RANKED" + } + ] + }, + { + "name": "TNT Games", + "icon": "tnt", + "modes": [ + { + "name": "TNT Run", + "command": "/play TNT_RUN" + }, + { + "name": "TNT Tag", + "command": "/play TNT_TAG" + } + ] + } +] \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/murder.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/murder.png new file mode 100755 index 0000000..9bf5675 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/murder.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/mw.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/mw.png new file mode 100755 index 0000000..8c9f2ea Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/mw.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/object.json b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/object.json new file mode 100644 index 0000000..1bde96a --- /dev/null +++ b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/object.json @@ -0,0 +1,108 @@ +// Вид объекта с мини-режимом +{ + "name": "Название режима", + "icon": "оставь пустым", + "modes": [ + { + "name": "Название режима", + "command": "команда для входа в режима" + } + ] +} +// Так же нужно указывать команду для входа в лобби с названием "Go to Lobby One" (если у мини-режима есть лобби) + +// Пример +{ + "name": "Arcade", + "icon": "arcade", + "modes": [ + { + "name": "Go to Lobby One", + "command": "/lobby arcade" + }, + { + "name": "Blocking Dead", + "command": "/play arcade_day_one" + }, + { + "name": "Bounty Hunters", + "command": "/play arcade_bounty_hunters" + }, + { + "name": "Capture The Wool", + "command": "/play arcade_pvp_ctw" + }, + { + "name": "Creeper Attack", + "command": "/play arcade_creeper_attack" + }, + { + "name": "Dragon Wars", + "command": "/play arcade_dragon_wars" + }, + { + "name": "Ender Spleef", + "command": "/play arcade_ender_spleef" + }, + { + "name": "Farm Hunt", + "command": "/play arcade_farm_hunt" + }, + { + "name": "Football", + "command": "/play arcade_soccer" + }, + { + "name": "Galaxy Wars", + "command": "/play arcade_starwars" + }, + { + "name": "Hide and Seek - Party Pooper", + "command": "/play arcade_hide_and_seek_party_pooper" + }, + { + "name": "Hide and Seek - Prop Hunt", + "command": "/play arcade_hide_and_seek_prop_hunt" + }, + { + "name": "Hole in the Wall", + "command": "/play arcade_hole_in_the_wall" + }, + { + "name": "Hypixel Says", + "command": "/play arcade_simon_says" + }, + { + "name": "Santa Says", + "command": "/play arcade_santa_says" + }, + { + "name": "Mini Walls", + "command": "/play arcade_mini_walls" + }, + { + "name": "Party Games", + "command": "/play arcade_party_games_1" + }, + { + "name": "Pixel Painters", + "command": "/play arcade_pixel_painters" + }, + { + "name": "Throw Out", + "command": "/play arcade_throw_out" + }, + { + "name": "Zombies - Dead End", + "command": "/play arcade_zombies_dead_end" + }, + { + "name": "Zombies - Bad Blood", + "command": "/play arcade_zombies_bad_blood" + }, + { + "name": "Zombies - Alien Arcadium", + "command": "/play arcade_zombies_alien_arcadium" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/partymode.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/partymode.png new file mode 100755 index 0000000..adf7017 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/partymode.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/prototype.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/prototype.png new file mode 100755 index 0000000..7a42d8f Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/prototype.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/ruhypixel.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/ruhypixel.png new file mode 100644 index 0000000..a1945cb Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/ruhypixel.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/skyblock.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/skyblock.png new file mode 100755 index 0000000..a03c47f Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/skyblock.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/skywars.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/skywars.png new file mode 100755 index 0000000..08a32aa Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/skywars.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/smash_heroes.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/smash_heroes.png new file mode 100755 index 0000000..0248d37 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/smash_heroes.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/the_pit.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/the_pit.png new file mode 100755 index 0000000..697d147 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/the_pit.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/tnt.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/tnt.png new file mode 100755 index 0000000..896ff9b Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/tnt.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/uhc.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/uhc.png new file mode 100755 index 0000000..297bf62 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/uhc.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/warlords.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/warlords.png new file mode 100755 index 0000000..c4a5265 Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/warlords.png differ diff --git a/src/main/resources/assets/minecraft/silentclient/mods/quickplay/woolwars.png b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/woolwars.png new file mode 100644 index 0000000..494471c Binary files /dev/null and b/src/main/resources/assets/minecraft/silentclient/mods/quickplay/woolwars.png differ