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 new file mode 100644 index 0000000..a1902ca --- /dev/null +++ b/src/main/java/me/rigamortis/seppuku/api/gui/hud/component/CarouselComponent.java @@ -0,0 +1,101 @@ +package me.rigamortis.seppuku.api.gui.hud.component; + +import me.rigamortis.seppuku.api.util.RenderUtil; +import me.rigamortis.seppuku.api.value.Value; +import net.minecraft.client.Minecraft; + +/** + * @author noil + */ +public final class CarouselComponent extends HudComponent { + + private Value value; + + public String displayValue; + public boolean focused; + + public CarouselComponent(String name, Value value) { + super(name); + + this.value = value; + this.displayValue = value.getValue().toString(); + this.focused = false; + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) { + super.render(mouseX, mouseY, partialTicks); + + if (isMouseInside(mouseX, mouseY)) + RenderUtil.drawGradientRect(this.getX(), this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0x30909090, 0x00101010); + + RenderUtil.drawRect(this.getX(), this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0x45303030); + + final String displayValueText = this.getName() + ": " + this.displayValue; + Minecraft.getMinecraft().fontRenderer.drawString(displayValueText, (int) this.getX() + 1, (int) this.getY() + 1, this.focused ? 0xFFFFFFFF : 0xFFAAAAAA); + + 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); + } + + @Override + public void mouseRelease(int mouseX, int mouseY, int button) { + super.mouseRelease(mouseX, mouseY, button); + + if (this.isMouseInside(mouseX, mouseY) && button == 0) { + this.focus(); + + this.onLeftButtonPress(mouseX); + this.onRightButtonPress(mouseX); + + this.displayValue = this.value.getValue().toString().toLowerCase(); + } else { + this.focused = false; + } + } + + protected boolean onLeftButtonPress(int mouseX) { + if (mouseX >= this.getX() + this.getW() - 18 && mouseX <= this.getX() + this.getW() - 10) { + this.declineOption(); + return true; + } + return false; + } + + protected boolean onRightButtonPress(int mouseX) { + if (mouseX >= this.getX() + this.getW() - 8 && mouseX <= this.getX() + this.getW()) { + this.raiseOption(); + return true; + } + return false; + } + + public void focus() { + this.focused = true; + } + + public void raiseOption() { + final Enum[] options = ((Enum) this.value.getValue()).getClass().getEnumConstants(); + for (int index = 0; index < options.length; index++) { + if (options[index].name().equalsIgnoreCase(value.getValue().toString())) { + index++; + if (index > options.length - 1) + index = 0; + value.setEnumValue(options[index].toString()); + } + } + } + + public void declineOption() { + final Enum[] options = ((Enum) this.value.getValue()).getClass().getEnumConstants(); + for (int index = 0; index < options.length; index++) { + if (options[index].name().equalsIgnoreCase(value.getValue().toString())) { + index--; + if (index < 0) + index = options.length - 1; + value.setEnumValue(options[index].toString()); + } + } + } +} 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 95b9867..14d2ba3 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 @@ -227,11 +227,11 @@ public class TextComponent extends HudComponent { return ""; } - public interface TextComponentListener { - void onKeyTyped(int keyCode); - } - public void focus() { this.focused = true; } + + public interface TextComponentListener { + void onKeyTyped(int keyCode); + } } diff --git a/src/main/java/me/rigamortis/seppuku/api/value/Value.java b/src/main/java/me/rigamortis/seppuku/api/value/Value.java index d9b1f6c..362548f 100644 --- a/src/main/java/me/rigamortis/seppuku/api/value/Value.java +++ b/src/main/java/me/rigamortis/seppuku/api/value/Value.java @@ -70,13 +70,17 @@ public class Value { } public void setEnumValue(String value) { - for (Enum e : ((Enum) this.value).getClass().getEnumConstants()) { + for (Enum e : ((Enum) this.value).getClass().getEnumConstants()) { if (e.name().equalsIgnoreCase(value)) { this.value = (T) e; } } } + public String getEnumReplacedName() { + return Character.toString(this.getName().charAt(0)) + this.getName().toLowerCase().replaceFirst(Character.toString(this.getName().charAt(0)).toLowerCase(), ""); + } + public T getMin() { return min; } 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 663954a..41832c0 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 @@ -548,15 +548,15 @@ public final class ModuleListComponent extends ResizableHudComponent { this.addComponentToButtons(sliderComponent); } else if (value.getValue() instanceof Enum) { final Enum val = (Enum) value.getValue(); - final StringBuilder options = new StringBuilder(); final int size = val.getClass().getEnumConstants().length; + final StringBuilder options = new StringBuilder(); for (int i = 0; i < size; i++) { final Enum option = val.getClass().getEnumConstants()[i]; options.append(option.name().toLowerCase()).append((i == size - 1) ? "" : ", "); } - TextComponent valueText = new TextComponent(value.getName(), value.getValue().toString().toLowerCase(), false); + /*TextComponent valueText = new TextComponent(value.getName(), value.getValue().toString().toLowerCase(), false); valueText.setTooltipText(value.getDesc() + " " + ChatFormatting.GRAY + "(" + options.toString() + ")"); valueText.returnListener = new ComponentListener() { @Override @@ -570,7 +570,12 @@ public final class ModuleListComponent extends ResizableHudComponent { } }; components.add(valueText); - this.addComponentToButtons(valueText); + this.addComponentToButtons(valueText);*/ + + CarouselComponent carouselComponent = new CarouselComponent(value.getName(), value); + carouselComponent.setTooltipText(value.getDesc() + " " + ChatFormatting.GRAY + "(" + options.toString() + ")"); + components.add(carouselComponent); + this.addComponentToButtons(carouselComponent); } else if (value.getValue() instanceof String) { TextComponent valueText = new TextComponent(value.getName(), value.getValue().toString().toLowerCase(), false); valueText.setTooltipText(value.getDesc()); diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/combat/VelocityModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/combat/VelocityModule.java index 95f82d0..d981cf0 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/combat/VelocityModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/combat/VelocityModule.java @@ -38,6 +38,9 @@ public final class VelocityModule extends Module { @Listener public void receivePacket(EventReceivePacket event) { if (event.getStage() == EventStageable.EventStage.PRE) { + if (mc.player == null || mc.world == null) + return; + if (event.getPacket() instanceof SPacketEntityStatus && this.bobbers.getValue()) { final SPacketEntityStatus packet = (SPacketEntityStatus) event.getPacket(); if (packet.getOpCode() == 31) {