From 29d348d569e116d0aaa56d0710d628f8193c5208 Mon Sep 17 00:00:00 2001 From: noil Date: Sun, 24 Jan 2021 01:14:04 -0500 Subject: [PATCH] seppuku_at.cfg changed, run setupDecompWorkspace! Big update for the UI backend --- gradle.properties | 2 +- .../seppuku/api/command/Command.java | 21 +++ .../api/event/player/EventChatKeyTyped.java | 33 +++++ .../gui/hud/component/ButtonComponent.java | 23 ++- .../gui/hud/component/CarouselComponent.java | 15 ++ .../api/gui/hud/component/ColorComponent.java | 2 + .../api/gui/hud/component/HudComponent.java | 27 ++++ .../gui/hud/component/SliderComponent.java | 7 +- .../api/gui/hud/component/TextComponent.java | 11 +- .../seppuku/api/util/RenderUtil.java | 28 ++++ .../seppuku/impl/command/FriendCommand.java | 15 +- .../gui/hud/component/ColorsComponent.java | 137 ++++++++++++++++-- .../component/module/ModuleListComponent.java | 27 ++-- .../seppuku/impl/management/PatchManager.java | 1 + .../impl/module/combat/BurrowModule.java | 26 +++- .../impl/module/hidden/CommandsModule.java | 115 +++++++++++++++ .../impl/module/misc/NoBiomeColorModule.java | 2 +- .../module/render/PortalFinderModule.java | 10 +- .../impl/module/render/ProjectilesModule.java | 4 +- .../impl/module/render/TracersModule.java | 16 +- .../impl/module/render/WallHackModule.java | 18 +-- .../seppuku/impl/patch/GuiChatPatch.java | 44 ++++++ .../assets/seppukumod/textures/spectrum.jpg | Bin 0 -> 10838 bytes src/main/resources/seppuku_at.cfg | 7 +- 24 files changed, 509 insertions(+), 82 deletions(-) create mode 100644 src/main/java/me/rigamortis/seppuku/api/event/player/EventChatKeyTyped.java create mode 100644 src/main/java/me/rigamortis/seppuku/impl/patch/GuiChatPatch.java create mode 100644 src/main/resources/assets/seppukumod/textures/spectrum.jpg diff --git a/gradle.properties b/gradle.properties index e9b9fd5..386db30 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ # Sets default memory used for gradle commands. Can be overridden by user or command line properties. # This is required to provide enough memory for the Minecraft decompilation process. -org.gradle.jvmargs=-Xmx3G +org.gradle.jvmargs=-Xmx2G diff --git a/src/main/java/me/rigamortis/seppuku/api/command/Command.java b/src/main/java/me/rigamortis/seppuku/api/command/Command.java index 7d762c7..7955c9d 100644 --- a/src/main/java/me/rigamortis/seppuku/api/command/Command.java +++ b/src/main/java/me/rigamortis/seppuku/api/command/Command.java @@ -14,6 +14,7 @@ public abstract class Command { private String[] alias; private String desc; private String usage; + private String[] arguments; private TextComponentString textComponentUsage; @@ -28,6 +29,14 @@ public abstract class Command { this.usage = usage; } + public Command(String displayName, String[] alias, String desc, String usage, String[] arguments) { + this.displayName = displayName; + this.alias = alias; + this.desc = desc; + this.usage = usage; + this.arguments = arguments; + } + public Command(String displayName, String[] alias, String desc, TextComponentString textComponentUsage) { this(displayName, alias, desc, textComponentUsage.getText()); this.textComponentUsage = textComponentUsage; @@ -79,6 +88,10 @@ public abstract class Command { } } + public String tabComplete(String input) { + return null; + } + public String getDisplayName() { return displayName; } @@ -111,6 +124,14 @@ public abstract class Command { this.usage = usage; } + public String[] getArguments() { + return arguments; + } + + public void setArguments(String[] arguments) { + this.arguments = arguments; + } + public TextComponentString getTextComponentUsage() { return textComponentUsage; } diff --git a/src/main/java/me/rigamortis/seppuku/api/event/player/EventChatKeyTyped.java b/src/main/java/me/rigamortis/seppuku/api/event/player/EventChatKeyTyped.java new file mode 100644 index 0000000..9e91e83 --- /dev/null +++ b/src/main/java/me/rigamortis/seppuku/api/event/player/EventChatKeyTyped.java @@ -0,0 +1,33 @@ +package me.rigamortis.seppuku.api.event.player; + +import me.rigamortis.seppuku.api.event.EventCancellable; + +/** + * @author Seth + */ +public final class EventChatKeyTyped extends EventCancellable { + + private char typedChar; + private int keyCode; + + public EventChatKeyTyped(char typedChar, int keyCode) { + this.typedChar = typedChar; + this.keyCode = keyCode; + } + + public char getTypedChar() { + return typedChar; + } + + public void setTypedChar(char typedChar) { + this.typedChar = typedChar; + } + + public int getKeyCode() { + return keyCode; + } + + public void setKeyCode(int keyCode) { + this.keyCode = keyCode; + } +} diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ButtonComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ButtonComponent.java index f0a1972..fc14bdd 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ButtonComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ButtonComponent.java @@ -8,13 +8,11 @@ import net.minecraft.client.Minecraft; */ public class ButtonComponent extends HudComponent { - public boolean enabled, rightClickEnabled; - public ComponentListener mouseClickListener, rightClickListener; + public boolean enabled; public ButtonComponent(String name) { super(name); this.enabled = false; - this.rightClickEnabled = false; } @Override @@ -27,7 +25,7 @@ public class ButtonComponent extends HudComponent { // draw bg RenderUtil.drawRect(this.getX(), this.getY(), this.getX() + (this.rightClickListener != null ? this.getW() - 8 : this.getW()), this.getY() + this.getH(), this.enabled ? 0x45002E00 : 0x452E0000); - if (this.rightClickListener != null) { + if (this.subComponents > 0) { final boolean isMousingHoveringDropdown = mouseX >= this.getX() + this.getW() - 8 && mouseX <= this.getX() + this.getW() && mouseY >= this.getY() && mouseY <= this.getY() + this.getH(); // draw bg behind triangles @@ -46,7 +44,11 @@ public class ButtonComponent extends HudComponent { } // draw text - Minecraft.getMinecraft().fontRenderer.drawString(this.getName(), (int) this.getX() + 1, (int) this.getY() + 1, this.enabled ? 0xFF55FF55 : 0xFFFF5555); + String renderName = this.getName(); + if (this.getDisplayName() != null) { + renderName = this.getDisplayName(); + } + Minecraft.getMinecraft().fontRenderer.drawString(renderName, (int) this.getX() + 1, (int) this.getY() + 1, this.enabled ? 0xFF55FF55 : 0xFFFF5555); } @Override @@ -58,10 +60,10 @@ public class ButtonComponent extends HudComponent { if (button == 0) { // handle clicking the right click button - if (this.rightClickListener != null) { + if (this.subComponents > 0) { // is inside button if (mouseX >= this.getX() + this.getW() - 8 && mouseX <= this.getX() + this.getW() && mouseY >= this.getY() && mouseY <= this.getY() + this.getH()) { - this.rightClickListener.onComponentEvent(); + this.rightClickEnabled = !this.rightClickEnabled; return; // cancel normal action } } @@ -69,13 +71,6 @@ public class ButtonComponent extends HudComponent { // enable / disable normally this.enabled = !this.enabled; - - if (this.mouseClickListener != null) - this.mouseClickListener.onComponentEvent(); - - } else if (button == 1) { - if (this.rightClickListener != null) - this.rightClickListener.onComponentEvent(); } } } diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/CarouselComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/CarouselComponent.java index 12f52ce..9ded0bb 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/CarouselComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/CarouselComponent.java @@ -34,6 +34,14 @@ public final class CarouselComponent extends HudComponent { final String displayValueText = this.getName() + ": " + this.displayValue; Minecraft.getMinecraft().fontRenderer.drawString(displayValueText, (int) this.getX() + 1, (int) this.getY() + 1, this.focused ? 0xFFFFFFFF : 0xFFAAAAAA); + if (this.subComponents > 0) { + final int dotColor = this.rightClickEnabled ? 0xFF6D55FF : (this.focused ? 0x75FFFFFF : 0x75909090); + RenderUtil.drawRect(this.getX() + this.getW() - 27, this.getY(), this.getX() + this.getW() - 18, this.getY() + this.getH(), 0xFF101010); + RenderUtil.drawRect(this.getX() + this.getW() - 21, this.getY() + this.getH() - 2, this.getX() + this.getW() - 20, this.getY() + this.getH() - 1, dotColor); + RenderUtil.drawRect(this.getX() + this.getW() - 23, this.getY() + this.getH() - 2, this.getX() + this.getW() - 22, this.getY() + this.getH() - 1, dotColor); + RenderUtil.drawRect(this.getX() + this.getW() - 25, this.getY() + this.getH() - 2, this.getX() + this.getW() - 24, this.getY() + this.getH() - 1, dotColor); + } + RenderUtil.drawRect(this.getX() + this.getW() - 18, this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0xFF101010); RenderUtil.drawTriangle(this.getX() + this.getW() - 14, this.getY() + 4, 3, -90, this.focused ? 0x75FFFFFF : 0x75909090); RenderUtil.drawTriangle(this.getX() + this.getW() - 4, this.getY() + 4, 3, 90, this.focused ? 0x75FFFFFF : 0x75909090); @@ -59,6 +67,13 @@ public final class CarouselComponent extends HudComponent { if (mouseX >= this.getX() + this.getW() - 18 && mouseX <= this.getX() + this.getW() - 10) { this.declineOption(); return true; + } else if (mouseX >= this.getX() + this.getW() - 25 && mouseX <= this.getX() + this.getW() - 20) { + this.rightClickEnabled = !this.rightClickEnabled; + + if (!this.rightClickEnabled) { + this.focused = false; + } + return true; } return false; } diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ColorComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ColorComponent.java index 35dd74e..2cd3718 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ColorComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/ColorComponent.java @@ -60,6 +60,8 @@ public class ColorComponent extends TextComponent { displayedName = this.displayValue; } else if (customDisplayValue != null) { displayedName = customDisplayValue; + } else if (this.getDisplayName() != null) { + displayedName = this.getDisplayName(); } Minecraft.getMinecraft().fontRenderer.drawString(displayedName, (int) this.getX() + BORDER + COLOR_SIZE + BORDER, (int) this.getY() + BORDER, this.focused ? 0xFFFFFFFF : 0xFFAAAAAA); diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/HudComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/HudComponent.java index dd3b1f7..38ec447 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/HudComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/HudComponent.java @@ -19,10 +19,15 @@ public class HudComponent { private float emptyH; private String name; + private String displayName; private String tooltipText = ""; private boolean visible; + public ComponentListener mouseClickListener, rightClickListener; + public boolean rightClickEnabled; + public int subComponents = 0; + private List valueList = new ArrayList(); public HudComponent() { @@ -76,7 +81,17 @@ public class HudComponent { } public void mouseRelease(int mouseX, int mouseY, int button) { + if (this.isMouseInside(mouseX, mouseY)) { + if (button == 0) { + if (this.mouseClickListener != null) + this.mouseClickListener.onComponentEvent(); + } else if (button == 1) { + if (this.rightClickListener != null) + this.rightClickListener.onComponentEvent(); + this.rightClickEnabled = !this.rightClickEnabled; + } + } } public void keyTyped(char typedChar, int keyCode) { @@ -165,6 +180,18 @@ public class HudComponent { this.name = name; } + /*** + * Nullable, use getName if this is not set. + * @return + */ + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + public String getTooltipText() { return tooltipText; } diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/SliderComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/SliderComponent.java index 3a47c5d..f6c30a3 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/SliderComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/SliderComponent.java @@ -69,7 +69,12 @@ public final class SliderComponent extends HudComponent { this.sliderBar.render(mouseX, mouseY, partialTicks); } - Minecraft.getMinecraft().fontRenderer.drawString(this.getName(), (int) this.getX() + 1, (int) this.getY() + 1, 0xFFAAAAAA); + // draw text + String renderName = this.getName(); + if (this.getDisplayName() != null) { + renderName = this.getDisplayName(); + } + Minecraft.getMinecraft().fontRenderer.drawString(renderName, (int) this.getX() + 1, (int) this.getY() + 1, 0xFFAAAAAA); String displayedValue = this.decimalFormat.format(this.value.getValue()); if (this.sliding) { diff --git a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/TextComponent.java b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/TextComponent.java index 14d2ba3..d2d1773 100644 --- a/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/TextComponent.java +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/TextComponent.java @@ -47,15 +47,20 @@ public class TextComponent extends HudComponent { RenderUtil.drawRect(this.getX(), this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0x45303030); - final String displayValueText = this.getName() + ": " + this.displayValue; + String renderName = this.getName(); + if (this.getDisplayName() != null) { + renderName = this.getDisplayName(); + } + + final String displayValueText = renderName + ": " + this.displayValue; Minecraft.getMinecraft().fontRenderer.drawString(displayValueText, (int) this.getX() + 1, (int) this.getY() + 1, this.focused ? 0xFFFFFFFF : 0xFFAAAAAA); if (this.focused) { if (!this.selectedText.equals("")) { - RenderUtil.drawRect(this.getX() + Minecraft.getMinecraft().fontRenderer.getStringWidth(this.getName() + ": "), this.getY(), this.getX() + Minecraft.getMinecraft().fontRenderer.getStringWidth(displayValueText), this.getY() + this.getH(), 0x45FFFFFF); + RenderUtil.drawRect(this.getX() + Minecraft.getMinecraft().fontRenderer.getStringWidth(renderName + ": "), this.getY(), this.getX() + Minecraft.getMinecraft().fontRenderer.getStringWidth(displayValueText), this.getY() + this.getH(), 0x45FFFFFF); } - float blockX = this.getX() + Minecraft.getMinecraft().fontRenderer.getStringWidth(this.getName() + ": " + this.displayValue) + 1; + float blockX = this.getX() + Minecraft.getMinecraft().fontRenderer.getStringWidth(renderName + ": " + this.displayValue) + 1; float blockY = this.getY() + 1; int blockWidth = 2; int blockHeight = Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT - 2; diff --git a/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java b/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java index 381a8ce..c454db0 100644 --- a/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java +++ b/src/main/java/me/rigamortis/seppuku/api/util/RenderUtil.java @@ -83,6 +83,34 @@ public final class RenderUtil { GlStateManager.enableTexture2D(); } + public static void drawSideGradientRect(float left, float top, float right, float bottom, int startColor, int endColor) { + float f = (float) (startColor >> 24 & 255) / 255.0F; + float f1 = (float) (startColor >> 16 & 255) / 255.0F; + float f2 = (float) (startColor >> 8 & 255) / 255.0F; + float f3 = (float) (startColor & 255) / 255.0F; + float f4 = (float) (endColor >> 24 & 255) / 255.0F; + float f5 = (float) (endColor >> 16 & 255) / 255.0F; + float f6 = (float) (endColor >> 8 & 255) / 255.0F; + float f7 = (float) (endColor & 255) / 255.0F; + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.shadeModel(7425); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(right, top, 0).color(f1, f2, f3, f).endVertex(); + bufferbuilder.pos(left, top, 0).color(f4, f5, f6, f4).endVertex(); + bufferbuilder.pos(left, bottom, 0).color(f4, f5, f6, f4).endVertex(); + bufferbuilder.pos(right, bottom, 0).color(f1, f2, f3, f).endVertex(); + tessellator.draw(); + GlStateManager.shadeModel(7424); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + } + public static void drawTriangle(float x, float y, float size, float theta, int color) { GL11.glTranslated(x, y, 0); GL11.glRotatef(180 + theta, 0F, 0F, 1.0F); diff --git a/src/main/java/me/rigamortis/seppuku/impl/command/FriendCommand.java b/src/main/java/me/rigamortis/seppuku/impl/command/FriendCommand.java index 64b7db4..18055c7 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/command/FriendCommand.java +++ b/src/main/java/me/rigamortis/seppuku/impl/command/FriendCommand.java @@ -15,10 +15,10 @@ import net.minecraft.util.text.event.HoverEvent; */ public final class FriendCommand extends Command { - private String[] addAlias = new String[]{"Add", "A"}; - private String[] removeAlias = new String[]{"Remove", "R", "Rem", "Delete", "Del"}; - private String[] listAlias = new String[]{"List", "L"}; - private String[] clearAlias = new String[]{"Clear", "C"}; + private final String[] addAlias = new String[]{"Add", "A"}; + private final String[] removeAlias = new String[]{"Remove", "R", "Rem", "Delete", "Del"}; + private final String[] listAlias = new String[]{"List", "L"}; + private final String[] clearAlias = new String[]{"Clear", "C"}; public FriendCommand() { super("Friend", new String[]{"F"}, "Allows you to add or remove friends", "Friend Add \n" + @@ -26,6 +26,13 @@ public final class FriendCommand extends Command { "Friend Remove \n" + "Friend List\n" + "Friend Clear"); + + this.setArguments(new String[]{"add", "remove", "list", "clear"}); + } + + @Override + public String tabComplete(String input) { + return super.tabComplete(input); } @Override diff --git a/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/ColorsComponent.java b/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/ColorsComponent.java index a5f1d1a..c75bd56 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/ColorsComponent.java +++ b/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/ColorsComponent.java @@ -7,17 +7,22 @@ import me.rigamortis.seppuku.api.gui.hud.component.ComponentListener; import me.rigamortis.seppuku.api.gui.hud.component.HudComponent; import me.rigamortis.seppuku.api.gui.hud.component.ResizableHudComponent; import me.rigamortis.seppuku.api.module.Module; +import me.rigamortis.seppuku.api.texture.Texture; +import me.rigamortis.seppuku.api.util.ColorUtil; +import me.rigamortis.seppuku.api.util.MathUtil; import me.rigamortis.seppuku.api.util.RenderUtil; import me.rigamortis.seppuku.api.value.Value; import me.rigamortis.seppuku.impl.config.HudConfig; import me.rigamortis.seppuku.impl.config.ModuleConfig; import me.rigamortis.seppuku.impl.gui.hud.GuiHudEditor; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.math.MathHelper; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import java.awt.*; +import java.util.logging.Level; /** * @author noil @@ -34,6 +39,15 @@ public final class ColorsComponent extends ResizableHudComponent { private final int TITLE_BAR_HEIGHT = mc.fontRenderer.FONT_HEIGHT + 1; private ColorComponent currentColorComponent = null; + private Texture spectrum; + + private int lastGradientMouseX = -1; + private int lastGradientMouseY = -1; + private int lastSpectrumMouseX = -1; + private int lastSpectrumMouseY = -1; + + public int baseColor = 0xFFFFFFFF; + public int selectedColor = 0xFFFFFFFF; public ColorsComponent() { super("Colors", 100, 120, 215, 1000); @@ -43,6 +57,8 @@ public final class ColorsComponent extends ResizableHudComponent { this.setH(120); this.setX((mc.displayWidth / 2.0f) - (this.getW() / 2)); this.setY((mc.displayHeight / 2.0f) - (this.getH() / 2)); + + this.spectrum = new Texture("spectrum.jpg"); } @Override @@ -153,10 +169,43 @@ public final class ColorsComponent extends ResizableHudComponent { // draw overlay RenderUtil.drawRect(this.getX() + BORDER, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 1, this.getX() + this.getW() - BORDER, this.getY() + this.getH() - BORDER, 0xCC101010); + // draw exit button + RenderUtil.drawRect(this.getX() + BORDER + 3, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 4, this.getX() + BORDER + 14, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 15, 0xFF101010); + RenderUtil.drawRect(this.getX() + BORDER + 4, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 5, this.getX() + BORDER + 13, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 14, 0xFF303030); + RenderUtil.drawLine(this.getX() + BORDER + 6, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 12, this.getX() + BORDER + 11, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 7, 1.0f, 0xFFFF0000); + RenderUtil.drawLine(this.getX() + BORDER + 6, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 7, this.getX() + BORDER + 11, this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 12, 1.0f, 0xFFFF0000); // draw color RenderUtil.drawRect(this.getX() + (this.getW() / 2) - 10, this.getY() + (this.getH() / 4) - 10, this.getX() + (this.getW() / 2) + 10, this.getY() + (this.getH() / 4) + 10, this.currentColorComponent.getCurrentColor().getRGB()); RenderUtil.drawBorderedRect(this.getX() + (this.getW() / 2) - 10, this.getY() + (this.getH() / 4) - 10, this.getX() + (this.getW() / 2) + 10, this.getY() + (this.getH() / 4) + 10, 1.0f, 0x00000000, 0xFFAAAAAA); + // draw spectrum + this.spectrum.bind(); + this.spectrum.render(this.getX() + this.getW() / 4 + this.getW() / 16, this.getY() + this.getH() / 2 + 10, this.getW() / 2 - this.getW() / 16, this.getH() / 2 - 18); + // draw gradients + GlStateManager.enableBlend(); + RenderUtil.drawRect(this.getX() + this.getW() / 4, this.getY() + this.getH() / 2 + 10, this.getX() + this.getW() / 4 + this.getW() / 16, this.getY() + this.getH() - 8, 0xFFFFFFFF); + RenderUtil.drawGradientRect(this.getX() + this.getW() / 4, this.getY() + this.getH() / 2 + 10, this.getX() + this.getW() / 4 + this.getW() / 16, this.getY() + this.getH() - 8, 0x00000000, 0xFF000000); + RenderUtil.drawSideGradientRect(this.getX() + this.getW() / 4 + this.getW() / 16, this.getY() + this.getH() / 2 + 10, this.getX() + this.getW() / 2 + this.getW() / 4, this.getY() + this.getH() - 8, ColorUtil.changeAlpha(this.baseColor, 0xFF), 0x00000000); + GlStateManager.disableBlend(); + // draw line between spectrum & gradients + RenderUtil.drawLine(this.getX() + this.getW() / 4 + this.getW() / 16, this.getY() + this.getH() / 2 + 10, this.getX() + this.getW() / 4 + this.getW() / 16, this.getY() + this.getH() - 8, 1.0f, 0xFF000000); + + // draw selection rects + int gradientSelectionColorInt = -1; + if (this.lastGradientMouseX != -1 && this.lastGradientMouseY != -1) { + gradientSelectionColorInt = (int) MathUtil.map(lastGradientMouseY, this.getY() + this.getH() / 2 + 10, this.getY() + this.getH() - 8, 0x00, 0xFF); + final Color gradientSelectionColor = new Color(gradientSelectionColorInt, gradientSelectionColorInt, gradientSelectionColorInt); + RenderUtil.drawLine(this.lastGradientMouseX - 1, this.lastGradientMouseY - 1, this.lastGradientMouseX + 1, this.lastGradientMouseY + 1, 1f, gradientSelectionColor.getRGB()); + RenderUtil.drawLine(this.lastGradientMouseX - 1, this.lastGradientMouseY + 1, this.lastGradientMouseX + 1, this.lastGradientMouseY - 1, 1f, gradientSelectionColor.getRGB()); + } + if (this.lastSpectrumMouseX != -1 && this.lastSpectrumMouseY != -1) { + final int spectrumSelectionColorInt = (gradientSelectionColorInt != -1) ? gradientSelectionColorInt : 0x00; + final Color spectrumSelectionColor = new Color(spectrumSelectionColorInt, spectrumSelectionColorInt, spectrumSelectionColorInt); + RenderUtil.drawLine(this.lastSpectrumMouseX - 1, this.lastSpectrumMouseY - 1, this.lastSpectrumMouseX + 1, this.lastSpectrumMouseY + 1, 1f, spectrumSelectionColor.getRGB()); + RenderUtil.drawLine(this.lastSpectrumMouseX - 1, this.lastSpectrumMouseY + 1, this.lastSpectrumMouseX + 1, this.lastSpectrumMouseY - 1, 1f, spectrumSelectionColor.getRGB()); + } + + // draw color data if (this.getW() > 180) { final String hexColor = "#" + Integer.toHexString(this.currentColorComponent.getCurrentColor().getRGB()).toLowerCase().substring(2); final String rgbColor = String.format("r%s g%s b%s", this.currentColorComponent.getCurrentColor().getRed(), this.currentColorComponent.getCurrentColor().getGreen(), this.currentColorComponent.getCurrentColor().getBlue()); @@ -172,11 +221,13 @@ public final class ColorsComponent extends ResizableHudComponent { GL11.glDisable(GL11.GL_SCISSOR_TEST); // Over list - if (this.scroll > 6) { - RenderUtil.drawGradientRect(this.getX() + BORDER, listTop, this.getX() + this.getW() - SCROLL_WIDTH - BORDER, listTop + 8, 0xFF101010, 0x00000000); - } - if (this.getH() != this.getTotalHeight() && this.scroll != (this.totalHeight - this.getH())) { - RenderUtil.drawGradientRect(this.getX() + BORDER, this.getY() + this.getH() - BORDER - 8, this.getX() + this.getW() - SCROLL_WIDTH - BORDER, this.getY() + this.getH() - BORDER, 0x00000000, 0xFF101010); + if (this.currentColorComponent == null) { + if (this.scroll > 6) { + RenderUtil.drawGradientRect(this.getX() + BORDER, listTop, this.getX() + this.getW() - SCROLL_WIDTH - BORDER, listTop + 8, 0xFF101010, 0x00000000); + } + if (this.getH() != this.getTotalHeight() && this.scroll != (this.totalHeight - this.getH())) { + RenderUtil.drawGradientRect(this.getX() + BORDER, this.getY() + this.getH() - BORDER - 8, this.getX() + this.getW() - SCROLL_WIDTH - BORDER, this.getY() + this.getH() - BORDER, 0x00000000, 0xFF101010); + } } // render current color component @@ -196,20 +247,25 @@ public final class ColorsComponent extends ResizableHudComponent { @Override public void mouseRelease(int mouseX, int mouseY, int button) { + final boolean inside = this.isMouseInside(mouseX, mouseY); + final boolean insideTitlebar = mouseY <= this.getY() + BORDER + TITLE_BAR_HEIGHT; + if (this.currentColorComponent != null) { - if (this.currentColorComponent.isMouseInside(mouseX, mouseY)) + if (this.currentColorComponent.isMouseInside(mouseX, mouseY)) { this.currentColorComponent.mouseRelease(mouseX, mouseY, button); - else if (!this.isResizeDragging()) { - this.currentColorComponent = null; - return; + } else if (inside && !insideTitlebar) { + final boolean insideExit = mouseX <= this.getX() + BORDER + 14 && mouseY <= this.getY() + BORDER + TITLE_BAR_HEIGHT + 15; + if (insideExit) { + this.currentColorComponent = null; + this.removeSelections(); + this.baseColor = 0xFFFFFFFF; + return; + } } } super.mouseRelease(mouseX, mouseY, button); - final boolean inside = this.isMouseInside(mouseX, mouseY); - final boolean insideTitlebar = mouseY <= this.getY() + BORDER + TITLE_BAR_HEIGHT; - if (inside && button == 0 && !insideTitlebar) { int offsetY = BORDER; @@ -221,7 +277,7 @@ public final class ColorsComponent extends ResizableHudComponent { final boolean insideComponent = mouseX >= (this.getX() + BORDER) && mouseX <= (this.getX() + this.getW() - BORDER - SCROLL_WIDTH) && mouseY >= (this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 1 + offsetY - this.scroll) && mouseY <= (this.getY() + BORDER + (mc.fontRenderer.FONT_HEIGHT * 2) + 1 + offsetY - this.scroll); if (insideComponent && this.currentColorComponent == null) { - ColorComponent colorComponent = new ColorComponent(component.getName() + " " + value.getName(), ((Color) value.getValue()).getRGB(), ChatFormatting.WHITE + "Click to edit"); + ColorComponent colorComponent = new ColorComponent(component.getName() + " " + value.getName(), ((Color) value.getValue()).getRGB(), ChatFormatting.WHITE + "Edit..."); colorComponent.returnListener = new ComponentListener() { @Override public void onComponentEvent() { @@ -245,7 +301,7 @@ public final class ColorsComponent extends ResizableHudComponent { final boolean insideComponent = mouseX >= (this.getX() + BORDER) && mouseX <= (this.getX() + this.getW() - BORDER - SCROLL_WIDTH) && mouseY >= (this.getY() + BORDER + mc.fontRenderer.FONT_HEIGHT + 1 + offsetY - this.scroll) && mouseY <= (this.getY() + BORDER + (mc.fontRenderer.FONT_HEIGHT * 2) + 1 + offsetY - this.scroll); if (insideComponent && this.currentColorComponent == null) { - ColorComponent colorComponent = new ColorComponent(module.getDisplayName() + " " + value.getName(), ((Color) value.getValue()).getRGB(), ChatFormatting.WHITE + "Click to edit"); + ColorComponent colorComponent = new ColorComponent(module.getDisplayName() + " " + value.getName(), ((Color) value.getValue()).getRGB(), ChatFormatting.WHITE + "Edit..."); colorComponent.returnListener = new ComponentListener() { @Override public void onComponentEvent() { @@ -279,6 +335,52 @@ public final class ColorsComponent extends ResizableHudComponent { if (insideDragZone) { super.mouseClick(mouseX, mouseY, button); } + + if (this.isDragging() || this.isResizeDragging()) { + this.removeSelections(); + return; + } + + if (this.isMouseInside(mouseX, mouseY) && this.currentColorComponent != null) { + final boolean insideSpectrum = + mouseX >= this.getX() + this.getW() / 4 + this.getW() / 16 && + mouseY >= this.getY() + this.getH() / 2 + 10 && + mouseX <= this.getX() + this.getW() / 4 + this.getW() / 16 + this.getW() / 2 - this.getW() / 16 && + mouseY <= this.getY() + this.getH() / 2 + 10 + this.getH() / 2 - 18; + final boolean insideGradient = + mouseX >= this.getX() + this.getW() / 4 && + mouseY >= this.getY() + this.getH() / 2 + 10 && + mouseX <= this.getX() + this.getW() / 4 + this.getW() / 16 && + mouseY <= this.getY() + this.getH() - 8; + if (insideGradient || insideSpectrum) { + Robot robot = null; + try { + robot = new Robot(); + } catch (AWTException e) { + Seppuku.INSTANCE.getLogger().log(Level.WARNING, "Could not create robot for " + this.getName()); + } + + if (robot != null) { + PointerInfo pointerInfo = MouseInfo.getPointerInfo(); + Point point = pointerInfo.getLocation(); + int mX = (int) point.getX(); + int mY = (int) point.getY(); + Color colorAtMouseClick = robot.getPixelColor(mX, mY); + if (insideSpectrum) { + this.selectedColor = colorAtMouseClick.getRGB(); + this.currentColorComponent.setCurrentColor(colorAtMouseClick); + this.currentColorComponent.returnListener.onComponentEvent(); + this.currentColorComponent.displayValue = "#" + Integer.toHexString(this.selectedColor).toLowerCase().substring(2); + this.lastSpectrumMouseX = mouseX; + this.lastSpectrumMouseY = mouseY; + } else { + this.baseColor = colorAtMouseClick.getRGB(); + this.lastGradientMouseX = mouseX; + this.lastGradientMouseY = mouseY; + } + } + } + } } @Override @@ -305,6 +407,13 @@ public final class ColorsComponent extends ResizableHudComponent { } } + private void removeSelections() { + this.lastGradientMouseX = -1; + this.lastGradientMouseY = -1; + this.lastSpectrumMouseX = -1; + this.lastSpectrumMouseY = -1; + } + public int getScroll() { return scroll; } diff --git a/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/module/ModuleListComponent.java b/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/module/ModuleListComponent.java index bb98e54..e4ea135 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/module/ModuleListComponent.java +++ b/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/module/ModuleListComponent.java @@ -624,16 +624,14 @@ public final class ModuleListComponent extends ResizableHudComponent { if (otherComponent == component || otherComponent.getName().equals(component.getName())) continue; - if (otherComponent instanceof ButtonComponent) { boolean isChildComponent = component.getName().toLowerCase().startsWith(otherComponent.getName().toLowerCase()); if (isChildComponent) { - if (!((ButtonComponent) otherComponent).rightClickEnabled) { + if (!otherComponent.rightClickEnabled) { skipRendering = true; } offsetX += 4; } - } } if (skipRendering) @@ -646,8 +644,8 @@ public final class ModuleListComponent extends ResizableHudComponent { component.render(mouseX, mouseY, partialTicks); if (offsetX > 0) { - RenderUtil.drawLine(component.getX() - offsetX + 1, component.getY(), component.getX() - offsetX + 1, component.getY() + component.getH(), 2.0f, 0xFF202020); - RenderUtil.drawLine(component.getX() - offsetX + 1, component.getY() + component.getH() / 2, component.getX(), component.getY() + component.getH() / 2, 2.0f, 0xFF202020); + RenderUtil.drawLine(component.getX() - offsetX + 1, component.getY(), component.getX() - offsetX + 1, component.getY() + component.getH(), 2.0f, 0x90707070); + RenderUtil.drawLine(component.getX() - offsetX + 1.5f, component.getY() + component.getH() / 2, component.getX() - 0.5f, component.getY() + component.getH() / 2, 2.0f, 0x90707070); } offsetY += component.getH() + 1; @@ -688,18 +686,13 @@ public final class ModuleListComponent extends ResizableHudComponent { private void addComponentToButtons(HudComponent hudComponent) { for (HudComponent component : this.components) { - if (component instanceof ButtonComponent) { - boolean similarName = hudComponent.getName().toLowerCase().startsWith(component.getName().toLowerCase()); - if (similarName) { - if (((ButtonComponent) component).rightClickListener == null) { - ((ButtonComponent) component).rightClickListener = new ComponentListener() { - @Override - public void onComponentEvent() { - ((ButtonComponent) component).rightClickEnabled = !((ButtonComponent) component).rightClickEnabled; - } - }; - } - } + if (component == hudComponent) + continue; + + boolean similarName = hudComponent.getName().toLowerCase().startsWith(component.getName().toLowerCase()); + if (similarName) { + component.subComponents++; + hudComponent.setDisplayName(hudComponent.getName().substring(component.getName().length())); } } } diff --git a/src/main/java/me/rigamortis/seppuku/impl/management/PatchManager.java b/src/main/java/me/rigamortis/seppuku/impl/management/PatchManager.java index 46eb8f1..4183c2b 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/management/PatchManager.java +++ b/src/main/java/me/rigamortis/seppuku/impl/management/PatchManager.java @@ -60,6 +60,7 @@ public final class PatchManager { this.patchList.add(new ChunkPatch()); this.patchList.add(new GuiScreenPatch()); this.patchList.add(new RenderGlobalPatch()); + this.patchList.add(new GuiChatPatch()); //load custom external patches //TODO this needs more testing diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/combat/BurrowModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/combat/BurrowModule.java index f57b112..3e1653a 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/combat/BurrowModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/combat/BurrowModule.java @@ -28,9 +28,18 @@ import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; */ public final class BurrowModule extends Module { + public enum Mode { + JUMP, GLITCH, TP + } + + public final Value mode = new Value("Mode", new String[]{"m"}, "The current mode to use.", Mode.JUMP); + public final Value glitchY = new Value<>("ModeGlitchY", new String[]{"mgy", "glitchy"}, "Using GLITCH mode, this will be your player's motionY.", 0.5f, 0.1f, 1.5f, 0.1f); + public final Value tpHeight = new Value<>("ModeTPHeight", new String[]{"mtph", "mth", "tpheight", "tpy"}, "Using TP mode, this will be how many blocks above the player to TP.", 5, 1, 10, 1); + public final Value delay = new Value<>("Delay", new String[]{"del", "d"}, "Delay(ms) to wait for placing obsidian after the initial jump.", 200.0f, 1.0f, 500.0f, 1.0f); public final Value rotate = new Value<>("Rotate", new String[]{"rot", "r"}, "Rotate the players head to place the block.", true); public final Value center = new Value("Center", new String[]{"centered", "c", "cen"}, "Centers the player on their current block when beginning to place.", false); + public final Value offGround = new Value("OffGround", new String[]{"offg", "og", "o"}, "Forces player onGround to false when enabled.", true); private final Timer timer = new Timer(); private final RotationTask rotationTask = new RotationTask("BurrowTask", 9); // 9 == high priority @@ -99,8 +108,21 @@ public final class BurrowModule extends Module { // get our block pos to place at final BlockPos positionToPlaceAt = new BlockPos(mc.player.getPositionVector()).down(); if (this.place(positionToPlaceAt, mc)) { // we've attempted to place the block - mc.player.onGround = false; // set onground to false - mc.player.jump(); // attempt another jump to flag ncp + if (this.offGround.getValue()) { + mc.player.onGround = false; // set onground to false + } + + switch (this.mode.getValue()) { + case JUMP: + mc.player.jump(); // attempt another jump to flag ncp + break; + case GLITCH: + mc.player.motionY = this.glitchY.getValue(); + break; + case TP: + mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY - this.tpHeight.getValue(), mc.player.posZ, mc.player.onGround)); + break; + } } // swap back to original diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/hidden/CommandsModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/hidden/CommandsModule.java index 065fbb0..4ad6885 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/hidden/CommandsModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/hidden/CommandsModule.java @@ -3,14 +3,22 @@ package me.rigamortis.seppuku.impl.module.hidden; import me.rigamortis.seppuku.Seppuku; import me.rigamortis.seppuku.api.command.Command; import me.rigamortis.seppuku.api.event.minecraft.EventKeyPress; +import me.rigamortis.seppuku.api.event.player.EventChatKeyTyped; import me.rigamortis.seppuku.api.event.player.EventSendChatMessage; +import me.rigamortis.seppuku.api.event.render.EventRender2D; +import me.rigamortis.seppuku.api.gui.hud.component.HudComponent; import me.rigamortis.seppuku.api.module.Module; +import me.rigamortis.seppuku.api.util.RenderUtil; import me.rigamortis.seppuku.api.value.Value; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiChat; import org.lwjgl.input.Keyboard; import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; + /** * Author Seth * 4/16/2019 @ 8:44 AM. @@ -18,6 +26,9 @@ import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; public final class CommandsModule extends Module { public final Value prefix = new Value("Prefix", new String[]{"prefx", "pfx"}, "The command prefix.", "."); + public final Value predictions = new Value("Predictions", new String[]{"predict", "pre"}, "Renders command predictions on the screen (WIP).", false); + + private final Set predictedCommands = new LinkedHashSet<>(); public CommandsModule() { super("Commands", new String[]{"cmds", "cmd"}, "Allows you to execute client commands", "NONE", -1, ModuleType.HIDDEN); @@ -25,6 +36,80 @@ public final class CommandsModule extends Module { this.toggle(); } + @Listener + public void onRender2D(EventRender2D event) { + if (!this.predictions.getValue()) + return; + + final Minecraft mc = Minecraft.getMinecraft(); + if (mc.player != null) { + if (mc.currentScreen instanceof GuiChat) { + int height = 0; + + //final String input = ((GuiChat) mc.currentScreen).inputField.getText(); + + for (String cmd : this.predictedCommands) { + final HudComponent predictionComponent = new HudComponent(2, event.getScaledResolution().getScaledHeight() - 24 - height, 4 + mc.fontRenderer.getStringWidth(cmd), mc.fontRenderer.FONT_HEIGHT); + RenderUtil.drawRect(predictionComponent.getX(), predictionComponent.getY(), predictionComponent.getX() + predictionComponent.getW(), predictionComponent.getY() + predictionComponent.getH(), 0xFF101010); + mc.fontRenderer.drawStringWithShadow(cmd, predictionComponent.getX() + 2, predictionComponent.getY(), 0xFF9900EE); + height += mc.fontRenderer.FONT_HEIGHT + 1; + } + } else { + this.predictedCommands.clear(); + } + } + } + + @Listener + public void onChatKeyTyped(EventChatKeyTyped event) { + if (!this.predictions.getValue()) + return; + + final Minecraft mc = Minecraft.getMinecraft(); + if (mc.player != null) { + if (mc.currentScreen instanceof GuiChat) { + if (event.getKeyCode() == 15) { // tab + event.setCanceled(true); + } + + final int prefixLength = this.prefix.getValue().length(); + String input = ((GuiChat) mc.currentScreen).inputField.getText(); + + if (Character.isLetter(event.getTypedChar()) && !Character.isSpaceChar(event.getTypedChar())) { + input += event.getTypedChar(); + } + + if (input.startsWith(this.prefix.getValue())) { + if (input.length() > prefixLength) { + input = input.substring(prefixLength); + } + + Command similarCommand = null; + + this.populateCommands(input); + if (this.predictedCommands.size() > 0) { + for (String cmd : this.predictedCommands) { + similarCommand = Seppuku.INSTANCE.getCommandManager().findSimilar(cmd); + if (similarCommand != null) { + if (event.getKeyCode() == 15) { + ((GuiChat) mc.currentScreen).inputField.setText(this.prefix.getValue() + similarCommand.getDisplayName()); + } + } + } + } + + if (similarCommand != null) { + if (input.length() > similarCommand.getDisplayName().length()) { + if (this.matches(input, similarCommand.getDisplayName())) { + this.populateArguments(similarCommand); + } + } + } + } + } + } + } + @Listener public void keyPress(EventKeyPress event) { if (this.prefix.getValue().length() == 1) { @@ -63,6 +148,36 @@ public final class CommandsModule extends Module { } } + private void populateCommands(String input) { + this.predictedCommands.clear(); + + for (Command cmd : Seppuku.INSTANCE.getCommandManager().getCommandList()) { + if (this.matches(input, cmd.getDisplayName())) { + this.predictedCommands.add(cmd.getDisplayName()); + } + } + } + + private void populateArguments(Command command) { + for (Command cmd : Seppuku.INSTANCE.getCommandManager().getCommandList()) { + if (!cmd.getDisplayName().equalsIgnoreCase(command.getDisplayName())) + continue; + + if (cmd.getArguments() == null) { + Seppuku.INSTANCE.getNotificationManager().addNotification("Command Error", "Command has no arguments to tab complete."); + continue; + } + + //if (matches(split[1], arg)) { + //} + this.predictedCommands.addAll(Arrays.asList(cmd.getArguments())); + } + } + + private boolean matches(String input, String cmd) { + return cmd.toLowerCase().startsWith(input.toLowerCase()); + } + public Value getPrefix() { return prefix; } diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/misc/NoBiomeColorModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/misc/NoBiomeColorModule.java index 383e05b..c716f4e 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/misc/NoBiomeColorModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/misc/NoBiomeColorModule.java @@ -24,7 +24,7 @@ public final class NoBiomeColorModule extends Module { DEFAULT, CUSTOM } - public final Value color = new Value("Custom Color", new String[]{"customcolor", "color", "c"}, "Edit the custom biome color.", new Color(255, 255, 255)); + public final Value color = new Value("CustomColor", new String[]{"customcolor", "color", "c"}, "Edit the custom biome color.", new Color(255, 255, 255)); private float prevRed; private float prevGreen; diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/render/PortalFinderModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/render/PortalFinderModule.java index cded812..93d6303 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/render/PortalFinderModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/render/PortalFinderModule.java @@ -45,15 +45,15 @@ public final class PortalFinderModule extends Module { public final Value chat = new Value("Chat", new String[]{"Chat", "ChatMessages", "ChatNotifications"}, "Display a message in chat when a portal is found (Hover the message for more info).", true); public final Value remove = new Value("Remove", new String[]{"R", "Delete"}, "Removes a portal from being drawn if the player is a distance aways from it.", true); - public final Value removeDistance = new Value("Remove Distance", new String[]{"RemoveDistance", "RD", "RemoveRange"}, "Minimum distance in blocks the player must be from a portal for it to stop being drawn.", 200, 1, 2000, 1); + public final Value removeDistance = new Value("RemoveDistance", new String[]{"RemoveDistance", "RD", "RemoveRange"}, "Minimum distance in blocks the player must be from a portal for it to stop being drawn.", 200, 1, 2000, 1); public final Value showInfo = new Value("Info", new String[]{"SI", "DrawInfo", "DrawText"}, "Draws information about the portal at it's location.", true); - public final Value infoScale = new Value("Info Scale", new String[]{"InfoScale", "IS", "Scale", "TextScale"}, "Scale of the text size on the drawn information.", 1.0f, 0.1f, 3.0f, 0.25f); + public final Value infoScale = new Value("InfoScale", new String[]{"InfoScale", "IS", "Scale", "TextScale"}, "Scale of the text size on the drawn information.", 1.0f, 0.1f, 3.0f, 0.25f); public final Value tracer = new Value("Tracer", new String[]{"TracerLine", "trace", "line"}, "Display a tracer line to each found portal.", true); - public final Value color = new Value("Tracer Color", new String[]{"TracerColor", "Color", "c"}, "Edit the portal tracer color.", new Color(255, 255, 255)); - public final Value width = new Value("Tracer Width", new String[]{"TracerWidth", "W", "Width"}, "Width of each line that is drawn to indicate a portal's location.", 0.5f, 0.1f, 5.0f, 0.1f); - public final Value alpha = new Value("Tracer Alpha", new String[]{"TracerAlpha", "A", "Opacity", "Op"}, "Alpha value for each drawn line.", 255, 1, 255, 1); + public final Value color = new Value("TracerColor", new String[]{"TracerColor", "Color", "c"}, "Edit the portal tracer color.", new Color(255, 255, 255)); + public final Value width = new Value("TracerWidth", new String[]{"TracerWidth", "W", "Width"}, "Width of each line that is drawn to indicate a portal's location.", 0.5f, 0.1f, 5.0f, 0.1f); + public final Value alpha = new Value("TracerAlpha", new String[]{"TracerAlpha", "A", "Opacity", "Op"}, "Alpha value for each drawn line.", 255, 1, 255, 1); private final List portals = new CopyOnWriteArrayList<>(); diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/render/ProjectilesModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/render/ProjectilesModule.java index 9300f21..7d5934b 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/render/ProjectilesModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/render/ProjectilesModule.java @@ -46,8 +46,8 @@ public final class ProjectilesModule extends Module { private final Queue flightPoint = new ConcurrentLinkedQueue<>(); public final Value width = new Value("Width", new String[]{"W", "Width"}, "Pixel width of the projectile path.", 1.0f, 0.1f, 5.0f, 0.1f); - public final Value color = new Value("Path Color", new String[]{"pathcolor", "color", "c", "pc"}, "Change the color of the predicted path.", new Color(255, 255, 255)); - public final Value alpha = new Value("Path Alpha", new String[]{"pathalpha", "opacity", "a", "o", "pa", "po"}, "Alpha value for the predicted path.", 255, 1, 255, 1); + public final Value color = new Value("PathColor", new String[]{"color", "c", "pc"}, "Change the color of the predicted path.", new Color(255, 255, 255)); + public final Value alpha = new Value("PathAlpha", new String[]{"opacity", "a", "o", "pa", "po"}, "Alpha value for the predicted path.", 255, 1, 255, 1); public ProjectilesModule() { super("Projectiles", new String[]{"Proj"}, "Projects the possible path of an entity that was fired.", "NONE", -1, ModuleType.RENDER); diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/render/TracersModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/render/TracersModule.java index 51568e5..e8f078a 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/render/TracersModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/render/TracersModule.java @@ -28,19 +28,23 @@ import java.awt.*; public final class TracersModule extends Module { public final Value players = new Value("Players", new String[]{"Player"}, "Choose to enable on players.", true); - public final Value playersColor = new Value("Players Color", new String[]{"playerscolor", "pc"}, "Change the color of player tracer lines.", new Color(255, 68, 68)); + public final Value playersColor = new Value("PlayersColor", new String[]{"playerscolor", "pc"}, "Change the color of player tracer lines.", new Color(255, 68, 68)); + public final Value mobs = new Value("Mobs", new String[]{"Mob"}, "Choose to enable on mobs.", true); - public final Value mobsColor = new Value("Mobs Color", new String[]{"mobscolor", "mc"}, "Change the color of mob tracer lines.", new Color(255, 170, 0)); + public final Value mobsColor = new Value("MobsColor", new String[]{"mobscolor", "mc"}, "Change the color of mob tracer lines.", new Color(255, 170, 0)); + public final Value animals = new Value("Animals", new String[]{"Animal"}, "Choose to enable on animals.", true); - public final Value animalsColor = new Value("Animals Color", new String[]{"animalscolor", "ac"}, "Change the color of animal tracer lines.", new Color(0, 255, 68)); + public final Value animalsColor = new Value("AnimalsColor", new String[]{"animalscolor", "ac"}, "Change the color of animal tracer lines.", new Color(0, 255, 68)); + public final Value vehicles = new Value("Vehicles", new String[]{"Vehic", "Vehicle"}, "Choose to enable on vehicles.", true); - public final Value vehiclesColor = new Value("Vehicles Color", new String[]{"vehiclescolor", "vc"}, "Change the color of vehicle tracer lines.", new Color(213, 255, 0)); + public final Value vehiclesColor = new Value("VehiclesColor", new String[]{"vehiclescolor", "vc"}, "Change the color of vehicle tracer lines.", new Color(213, 255, 0)); + public final Value items = new Value("Items", new String[]{"Item"}, "Choose to enable on items.", true); - public final Value itemsColor = new Value("Items Color", new String[]{"itemscolor", "ic"}, "Change the color of item tracer lines.", new Color(0, 255, 170)); + public final Value itemsColor = new Value("ItemsColor", new String[]{"itemscolor", "ic"}, "Change the color of item tracer lines.", new Color(0, 255, 170)); public final Value mode = new Value("Mode", new String[]{"Mode"}, "The rendering mode to use for drawing the tracer-line.", Mode.TWO_D); - public final Value friendsColor = new Value("Friends Color", new String[]{"friendscolor", "fc"}, "Change the color of added friends tracer lines.", new Color(153, 0, 238)); + public final Value friendsColor = new Value("FriendsColor", new String[]{"friendscolor", "fc"}, "Change the color of added friends tracer lines.", new Color(153, 0, 238)); private enum Mode { TWO_D, THREE_D // TWO_DIMENSIONAL, THREE_DIMENSIONAL diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/render/WallHackModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/render/WallHackModule.java index de9564d..301edf3 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/render/WallHackModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/render/WallHackModule.java @@ -63,27 +63,27 @@ public final class WallHackModule extends Module { } public final Value players = new Value("Players", new String[]{"Player"}, "Choose to enable on players.", true); - public final Value playersColor = new Value("Players Color", new String[]{"playerscolor", "pc"}, "Change the color of players on esp.", new Color(255, 68, 68)); + public final Value playersColor = new Value("PlayersColor", new String[]{"playerscolor", "pc"}, "Change the color of players on esp.", new Color(255, 68, 68)); public final Value mobs = new Value("Mobs", new String[]{"Mob"}, "Choose to enable on mobs.", true); - public final Value mobsColor = new Value("Mobs Color", new String[]{"mobscolor", "mc"}, "Change the color of mobs on esp.", new Color(255, 170, 0)); + public final Value mobsColor = new Value("MobsColor", new String[]{"mobscolor", "mc"}, "Change the color of mobs on esp.", new Color(255, 170, 0)); public final Value animals = new Value("Animals", new String[]{"Animal"}, "Choose to enable on animals.", true); - public final Value animalsColor = new Value("Animals Color", new String[]{"animalscolor", "ac"}, "Change the color of animals on esp.", new Color(0, 255, 68)); + public final Value animalsColor = new Value("AnimalsColor", new String[]{"animalscolor", "ac"}, "Change the color of animals on esp.", new Color(0, 255, 68)); public final Value vehicles = new Value("Vehicles", new String[]{"Vehic", "Vehicle"}, "Choose to enable on vehicles.", true); - public final Value vehiclesColor = new Value("Vehicles Color", new String[]{"vehiclescolor", "vc"}, "Change the color of vehicles on esp.", new Color(213, 255, 0)); + public final Value vehiclesColor = new Value("VehiclesColor", new String[]{"vehiclescolor", "vc"}, "Change the color of vehicles on esp.", new Color(213, 255, 0)); public final Value items = new Value("Items", new String[]{"Item"}, "Choose to enable on items.", true); - public final Value itemsColor = new Value("Items Color", new String[]{"itemscolor", "ic"}, "Change the color of items on esp", new Color(0, 255, 170)); + public final Value itemsColor = new Value("ItemsColor", new String[]{"itemscolor", "ic"}, "Change the color of items on esp", new Color(0, 255, 170)); public final Value local = new Value("Local", new String[]{"Self"}, "Choose to enable on self/local-player.", true); public final Value crystals = new Value("Crystals", new String[]{"crystal", "crystals", "endcrystal", "endcrystals"}, "Choose to enable on end crystals.", true); - public final Value crystalsColor = new Value("Crystals Color", new String[]{"endercrystalscolor", "endercrystalcolor", "crystalscolor", "crystalcolor", "ecc"}, "Change the color of ender crystals on esp.", new Color(205, 0, 205)); + public final Value crystalsColor = new Value("CrystalsColor", new String[]{"endercrystalscolor", "endercrystalcolor", "crystalscolor", "crystalcolor", "ecc"}, "Change the color of ender crystals on esp.", new Color(205, 0, 205)); public final Value pearls = new Value("Pearls", new String[]{"Pearl"}, "Choose to enable on ender pearls.", true); - public final Value pearlsColor = new Value("Pearls Color", new String[]{"enderpearlscolor", "enderpearlcolor", "pearlscolor", "pearlcolor", "epc"}, "Change the color of ender pearls on esp.", new Color(151, 255, 252)); + public final Value pearlsColor = new Value("PearlsColor", new String[]{"enderpearlscolor", "enderpearlcolor", "pearlscolor", "pearlcolor", "epc"}, "Change the color of ender pearls on esp.", new Color(151, 255, 252)); public final Value armorStand = new Value("ArmorStands", new String[]{"ArmorStand", "ArmourStand", "ArmourStands", "ArmStand"}, "Choose to enable on armor-stands.", true); public final Value footsteps = new Value("FootSteps", new String[]{"FootStep", "Steps"}, "Choose to draw entity footsteps.", false); @@ -96,8 +96,8 @@ public final class WallHackModule extends Module { public final Value absorption = new Value("Absorption", new String[]{"Abs", "GappleHearts"}, "Adds absorption value to heart display.", true); public final Value enchants = new Value("Enchants", new String[]{"Ench"}, "Draw enchant names above the entity's equipped armor. (requires Armor value to be enabled.", true); - public final Value friendsColor = new Value("Friends Color", new String[]{"friendscolor", "friendcolor", "fc"}, "Change the color of friendly players on esp.", new Color(153, 0, 238)); - public final Value sneakingColor = new Value("Sneaking Color", new String[]{"sneakingcolor", "sneakcolor", "sc"}, "Change the color of sneaking players on esp.", new Color(238, 153, 0)); + public final Value friendsColor = new Value("FriendsColor", new String[]{"friendscolor", "friendcolor", "fc"}, "Change the color of friendly players on esp.", new Color(153, 0, 238)); + public final Value sneakingColor = new Value("SneakingColor", new String[]{"sneakingcolor", "sneakcolor", "sc"}, "Change the color of sneaking players on esp.", new Color(238, 153, 0)); private enum PotionsMode { NONE, ICON, TEXT diff --git a/src/main/java/me/rigamortis/seppuku/impl/patch/GuiChatPatch.java b/src/main/java/me/rigamortis/seppuku/impl/patch/GuiChatPatch.java new file mode 100644 index 0000000..7b83a68 --- /dev/null +++ b/src/main/java/me/rigamortis/seppuku/impl/patch/GuiChatPatch.java @@ -0,0 +1,44 @@ +package me.rigamortis.seppuku.impl.patch; + +import me.rigamortis.seppuku.Seppuku; +import me.rigamortis.seppuku.api.event.player.EventChatKeyTyped; +import me.rigamortis.seppuku.api.patch.ClassPatch; +import me.rigamortis.seppuku.api.patch.MethodPatch; +import me.rigamortis.seppuku.impl.management.PatchManager; +import org.objectweb.asm.Type; +import org.objectweb.asm.tree.*; + +import static org.objectweb.asm.Opcodes.*; + +/** + * Author Seth + * 12/23/2019 @ 4:29 AM. + */ +public final class GuiChatPatch extends ClassPatch { + + public GuiChatPatch() { + super("net.minecraft.client.gui.GuiChat", "bkn"); + } + + @MethodPatch( + mcpName = "keyTyped", + notchName = "a", + mcpDesc = "(CI)V") + public void keyTyped(MethodNode methodNode, PatchManager.Environment env) { + final InsnList insnList = new InsnList(); + insnList.add(new VarInsnNode(ILOAD, 1)); + insnList.add(new VarInsnNode(ILOAD, 2)); + insnList.add(new MethodInsnNode(INVOKESTATIC, Type.getInternalName(this.getClass()), "keyTypedHook", "(CI)Z", false)); + final LabelNode jmp = new LabelNode(); + insnList.add(new JumpInsnNode(IFEQ, jmp)); + insnList.add(new InsnNode(RETURN)); + insnList.add(jmp); + methodNode.instructions.insert(insnList); + } + + public static boolean keyTypedHook(char typedChar, int keyCode) { + final EventChatKeyTyped event = new EventChatKeyTyped(typedChar, keyCode); + Seppuku.INSTANCE.getEventManager().dispatchEvent(event); + return event.isCanceled(); + } +} \ No newline at end of file diff --git a/src/main/resources/assets/seppukumod/textures/spectrum.jpg b/src/main/resources/assets/seppukumod/textures/spectrum.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c483d1a96c7624fb852201d529fad495fdc922d GIT binary patch literal 10838 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 ZG+NW(%C|%+i!0I+ih3gXeE@y{_%F$#hN}Po literal 0 HcmV?d00001 diff --git a/src/main/resources/seppuku_at.cfg b/src/main/resources/seppuku_at.cfg index e8bb793..e4fa643 100644 --- a/src/main/resources/seppuku_at.cfg +++ b/src/main/resources/seppuku_at.cfg @@ -115,6 +115,7 @@ public net.minecraft.network.play.client.CPacketCloseWindow field_149556_a #smallshield stuff public net.minecraft.client.renderer.ItemRenderer field_187471_h # equippedProgressOffHand public net.minecraft.client.renderer.RenderGlobal field_72738_E # damagedBlocks - public net.minecraft.network.play.server.SPacketCloseWindow field_148896_a # windowId - public net.minecraft.network.play.server.SPacketSetSlot field_149179_a # windowId - public net.minecraft.network.play.server.SPacketSetSlot field_149177_b # slot \ No newline at end of file + public net.minecraft.network.play.server.SPacketCloseWindow field_148896_a # windowId + public net.minecraft.network.play.server.SPacketSetSlot field_149179_a # windowId + public net.minecraft.network.play.server.SPacketSetSlot field_149177_b # slot + public net.minecraft.client.gui.GuiChat field_146415_a # inputField