diff options
Diffstat (limited to 'src/main/java/de/hysky/skyblocker')
3 files changed, 48 insertions, 16 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/AbstractWaypointsScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/AbstractWaypointsScreen.java index 932bc144..da6f52c8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/AbstractWaypointsScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/AbstractWaypointsScreen.java @@ -37,7 +37,7 @@ public abstract class AbstractWaypointsScreen<T extends Screen> extends Screen { protected void init() { super.init(); waypointsListWidget = addDrawableChild(new WaypointsListWidget(client, this, width, height - 96, 32, 24)); - islandWidget = addDrawableChild(new DropdownWidget<>(client, width - 160, 8, 150, Arrays.asList(Location.values()), this::islandChanged, Location.from(island))); + islandWidget = addDrawableChild(new DropdownWidget<>(client, width - 160, 8, 150, height - 8, Arrays.asList(Location.values()), this::islandChanged, Location.from(island))); } @Override @@ -50,6 +50,14 @@ public abstract class AbstractWaypointsScreen<T extends Screen> extends Screen { return mouseClicked; } + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { + if (islandWidget.isMouseOver(mouseX, mouseY) && islandWidget.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount)) { + return true; + } + return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); + } + protected void islandChanged(Location location) { island = location.id(); waypointsListWidget.setIsland(island); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java index 157b0b15..724cb461 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java @@ -20,8 +20,8 @@ public class DropdownWidget<T> extends ElementListWidget<DropdownWidget.Entry<T> protected T selected; protected boolean open; - public DropdownWidget(MinecraftClient minecraftClient, int x, int y, int width, List<T> entries, Consumer<T> selectCallback, T selected) { - super(minecraftClient, width, (entries.size() + 1) * ENTRY_HEIGHT + 8, y, ENTRY_HEIGHT); + public DropdownWidget(MinecraftClient minecraftClient, int x, int y, int width, int maxHeight, List<T> entries, Consumer<T> selectCallback, T selected) { + super(minecraftClient, width, Math.min((entries.size() + 1) * ENTRY_HEIGHT + 8, maxHeight), y, ENTRY_HEIGHT); setX(x); this.entries = entries; this.selectCallback = selectCallback; @@ -58,29 +58,44 @@ public class DropdownWidget<T> extends ElementListWidget<DropdownWidget.Entry<T> context.getMatrices().push(); context.getMatrices().translate(0, 0, 100); - context.fill(getX(), getY(), getX() + width, getY() + headerHeight, 0xFF000000); - context.drawHorizontalLine(getX(), getX() + width, getY(), 0xFFFFFFFF); - context.drawHorizontalLine(getX(), getX() + width, getY() + headerHeight, 0xFFFFFFFF); - context.drawVerticalLine(getX(), getY(), getY() + headerHeight, 0xFFFFFFFF); - context.drawVerticalLine(getX() + width, getY(), getY() + headerHeight, 0xFFFFFFFF); + int y = getY() - (int) getScrollAmount(); + int height = getMaxPosition(); + + context.fill(getX(), y, getX() + width, y + headerHeight, 0xFF000000); + context.drawHorizontalLine(getX(), getX() + width, y, 0xFFFFFFFF); + context.drawHorizontalLine(getX(), getX() + width, y + headerHeight, 0xFFFFFFFF); + context.drawVerticalLine(getX(), y, y + headerHeight, 0xFFFFFFFF); + context.drawVerticalLine(getX() + width, y, y + headerHeight, 0xFFFFFFFF); if (open) { - context.fill(getX(), getY() + headerHeight + 1, getX() + width, getY() + height, 0xFF000000); - context.drawHorizontalLine(getX(), getX() + width, getY() + height, 0xFFFFFFFF); - context.drawVerticalLine(getX(), getY() + headerHeight, getY() + height, 0xFFFFFFFF); - context.drawVerticalLine(getX() + width, getY() + headerHeight, getY() + height, 0xFFFFFFFF); + context.fill(getX(), y + headerHeight + 1, getX() + width, y + height, 0xFF000000); + context.drawHorizontalLine(getX(), getX() + width, y + height, 0xFFFFFFFF); + context.drawVerticalLine(getX(), y + headerHeight, y + height, 0xFFFFFFFF); + context.drawVerticalLine(getX() + width, y + headerHeight, y + height, 0xFFFFFFFF); super.renderWidget(context, mouseX, mouseY, delta); } else { - renderHeader(context, getRowLeft(), getY() + 4 - (int) getScrollAmount()); + renderHeader(context, getRowLeft(), y + 4); } context.getMatrices().pop(); } + @Override + protected void drawMenuListBackground(DrawContext context) {} + + @Override + protected void drawHeaderAndFooterSeparators(DrawContext context) {} + + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { + return open && super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); + } + protected void select(T entry) { selected = entry; open = false; + setScrollAmount(0); if (selected != prevSelected) { selectCallback.accept(entry); prevSelected = selected; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsListWidget.java index 96e82b63..045c694d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsListWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/WaypointsListWidget.java @@ -239,7 +239,7 @@ public class WaypointsListWidget extends ElementListWidget<WaypointsListWidget.A private boolean checkInt(String string) { try { - Integer.parseInt(string); + parseEmptiableInt(string); return true; } catch (NumberFormatException e) { return false; @@ -261,7 +261,7 @@ public class WaypointsListWidget extends ElementListWidget<WaypointsListWidget.A private void updateInt(String newValueString, int currentValue, Int2ObjectFunction<NamedWaypoint> wither) { try { int index = category.category.waypoints().indexOf(waypoint); - int newValue = Integer.parseInt(newValueString); + int newValue = parseEmptiableInt(newValueString); if (newValue == currentValue) return; waypoint = wither.apply(newValue); if (index >= 0) { @@ -275,7 +275,7 @@ public class WaypointsListWidget extends ElementListWidget<WaypointsListWidget.A private void updateColor(String colorString) { try { int index = category.category.waypoints().indexOf(waypoint); - int colorInt = Integer.parseInt(colorString, 16); + int colorInt = parseEmptiableInt(colorString, 16); float[] colorComponents = {((colorInt & 0x00FF0000) >> 16) / 255f, ((colorInt & 0x0000FF00) >> 8) / 255f, (colorInt & 0x000000FF) / 255f}; float alpha = ((colorInt & 0xFF000000) >>> 24) / 255f; if (Arrays.equals(waypoint.getColorComponents(), colorComponents) && waypoint.alpha == alpha) return; @@ -288,6 +288,15 @@ public class WaypointsListWidget extends ElementListWidget<WaypointsListWidget.A } } + private int parseEmptiableInt(String value) throws NumberFormatException { + return value.isEmpty() || value.equals("-") ? 0 : Integer.parseInt(value); + } + + @SuppressWarnings("SameParameterValue") + private int parseEmptiableInt(String value, int radix) throws NumberFormatException { + return value.isEmpty() || value.equals("-") ? 0 : Integer.parseInt(value, radix); + } + @Override public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { context.drawTextWithShadow(client.textRenderer, "X:", width / 2 - 56, y + 6, 0xFFFFFF); |