aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java68
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ItemButtonWidget.java39
3 files changed, 106 insertions, 17 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java
index a0ba8284..a96d327d 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java
@@ -15,12 +15,10 @@ import de.hysky.skyblocker.skyblock.itemlist.recipebook.SkyblockRecipeBookWidget
import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.gui.DrawContext;
-import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.gui.screen.ingame.StatusEffectsDisplay;
import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
-import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.screen.PlayerScreenHandler;
import net.minecraft.text.Text;
@@ -33,8 +31,6 @@ public abstract class InventoryScreenMixin extends HandledScreen<PlayerScreenHan
@Unique
private GardenPlotsWidget gardenPlotsWidget;
- @Unique
- private ButtonWidget deskButton;
public InventoryScreenMixin(PlayerScreenHandler handler, PlayerInventory inventory, Text title) {
super(handler, inventory, title);
@@ -64,23 +60,15 @@ public abstract class InventoryScreenMixin extends HandledScreen<PlayerScreenHan
@Inject(method = "onRecipeBookToggled", at = @At("TAIL"))
private void skyblocker$moveGardenPlotsWdiget(CallbackInfo ci) {
- if (Utils.getLocation().equals(Location.GARDEN) && gardenPlotsWidget != null) {
+ if (gardenPlotsWidget != null) {
gardenPlotsWidget.setPosition(x + backgroundWidth + 4, y);
- if (deskButton != null) deskButton.setPosition(gardenPlotsWidget.getX() + 4, y + 108);
}
}
@Inject(method = "init", at = @At("TAIL"))
private void skyblocker$addGardenPlotsWidget(CallbackInfo ci) {
if (Utils.getLocation().equals(Location.GARDEN) && SkyblockerConfigManager.get().farming.garden.gardenPlotsWidget) {
- gardenPlotsWidget = new GardenPlotsWidget(x + backgroundWidth + 4, y);
- deskButton = ButtonWidget.builder(Text.translatable("skyblocker.gardenPlots.openDesk"), button -> MessageScheduler.INSTANCE.sendMessageAfterCooldown("/desk", true))
- .dimensions(gardenPlotsWidget.getX() + 7, y + 108, 60, 15)
- .build();
- // make desk button get selected before the widget but render after the widget
- addSelectableChild(deskButton);
- addDrawableChild(gardenPlotsWidget);
- addDrawable(deskButton);
+ addDrawableChild(gardenPlotsWidget = new GardenPlotsWidget(x + backgroundWidth + 4, y));
}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java
index 93fc0c49..70fe587a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java
@@ -9,6 +9,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.events.SkyblockEvents;
import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListManager;
import de.hysky.skyblocker.utils.Utils;
+import de.hysky.skyblocker.utils.render.gui.ItemButtonWidget;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import it.unimi.dsi.fastutil.ints.*;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
@@ -16,9 +17,10 @@ import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
-import net.minecraft.client.gui.widget.ClickableWidget;
+import net.minecraft.client.gui.widget.ContainerWidget;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.component.DataComponentTypes;
@@ -45,7 +47,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
-public class GardenPlotsWidget extends ClickableWidget {
+public class GardenPlotsWidget extends ContainerWidget {
private static final Logger LOGGER = LoggerFactory.getLogger("Garden Plots");
private static final Path FOLDER = SkyblockerMod.CONFIG_DIR.resolve("garden_plots");
@@ -173,8 +175,10 @@ public class GardenPlotsWidget extends ClickableWidget {
private long updateFromTabTime = System.currentTimeMillis();
private final IntList infectedPlots = new IntArrayList(8);
+ private final ItemButtonWidget[] widgets;
+
public GardenPlotsWidget(int x, int y) {
- super(x, y, 104, 127, Text.translatable("skyblocker.gardenPlots"));
+ super(x, y, 104, 132, Text.translatable("skyblocker.gardenPlots"));
items = Arrays.stream(gardenPlots).map(gardenPlot -> {
if (gardenPlot == null) return null;
ItemStack itemStack = new ItemStack(gardenPlot.item());
@@ -184,6 +188,24 @@ public class GardenPlotsWidget extends ClickableWidget {
items[12] = new ItemStack(Items.LODESTONE);
items[12].set(DataComponentTypes.ITEM_NAME, Text.literal("The Barn"));
updateInfestedFromTab();
+
+ // Inner widgets
+ ItemButtonWidget deskButton = new ItemButtonWidget(
+ getX() + 7, getBottom() - 24,
+ new ItemStack(Items.BOOK), Text.translatable("skyblocker.gardenPlots.openDesk"),
+ button -> MessageScheduler.INSTANCE.sendMessageAfterCooldown("/desk", true)
+ );
+ ItemButtonWidget spawnButton = new ItemButtonWidget(
+ getRight() - 7 - 40 - 2, getBottom() - 24,
+ new ItemStack(Items.ENDER_EYE), Text.translatable("skyblocker.gardenPlots.spawn"),
+ button -> MessageScheduler.INSTANCE.sendMessageAfterCooldown("/warp garden", true)
+ );
+ ItemButtonWidget setSpawnButton = new ItemButtonWidget(
+ getRight() - 7 - 20, getBottom() - 24,
+ new ItemStack(Math.random() < 0.001 ? Items.PINK_BED : Items.RED_BED), Text.translatable("skyblocker.gardenPlots.setSpawn"),
+ button -> MessageScheduler.INSTANCE.sendMessageAfterCooldown("/setspawn", true)
+ );
+ widgets = new ItemButtonWidget[]{deskButton, spawnButton, setSpawnButton};
}
@Override
@@ -253,6 +275,11 @@ public class GardenPlotsWidget extends ClickableWidget {
matrices.pop();
+ for (ItemButtonWidget widget : widgets) {
+ widget.render(context, mouseX, mouseY, delta);
+ }
+
+
if (timeMillis - updateFromTabTime > 3000) {
updateFromTabTime = timeMillis;
@@ -297,6 +324,41 @@ public class GardenPlotsWidget extends ClickableWidget {
protected void appendClickableNarrations(NarrationMessageBuilder builder) {
}
+ @Override
+ public List<? extends Element> children() {
+ return List.of(widgets);
+ }
+
+ @Override
+ protected int getContentsHeightWithPadding() {
+ return getHeight();
+ }
+
+ @Override
+ protected double getDeltaYPerScroll() {
+ return 0;
+ }
+
+ @Override
+ public void setX(int x) {
+ int prevX = getX();
+ super.setX(x);
+ int diff = x - prevX;
+ for (ItemButtonWidget widget : widgets) {
+ widget.setX(widget.getX() + diff);
+ }
+ }
+
+ @Override
+ public void setY(int y) {
+ int prevY = getY();
+ super.setY(y);
+ int diff = y - prevY;
+ for (ItemButtonWidget widget : widgets) {
+ widget.setY(widget.getY() + diff);
+ }
+ }
+
private record GardenPlot(Item item, String name) {
}
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ItemButtonWidget.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ItemButtonWidget.java
new file mode 100644
index 00000000..a4f6adff
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ItemButtonWidget.java
@@ -0,0 +1,39 @@
+package de.hysky.skyblocker.utils.render.gui;
+
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.tooltip.Tooltip;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+
+import java.time.Duration;
+
+public class ItemButtonWidget extends ButtonWidget {
+
+ private final ItemStack item;
+
+ public ItemButtonWidget(int x, int y, int width, int height, ItemStack item, Text message, PressAction onPress, NarrationSupplier narrationSupplier) {
+ super(x, y, width, height, message, onPress, narrationSupplier);
+ this.item = item.copy();
+ setTooltip(Tooltip.of(message));
+ setTooltipDelay(Duration.ofMillis(250));
+ }
+
+ public ItemButtonWidget(int x, int y, int width, int height, ItemStack item, Text message, PressAction onPress) {
+ this(x, y, width, height, item, message, onPress, DEFAULT_NARRATION_SUPPLIER);
+ }
+
+ public ItemButtonWidget(int x, int y, ItemStack item, Text message, PressAction onPress) {
+ this(x, y, 20, 20, item, message, onPress, DEFAULT_NARRATION_SUPPLIER);
+ }
+
+ @Override
+ public void drawMessage(DrawContext context, TextRenderer textRenderer, int color) {}
+
+ @Override
+ protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
+ super.renderWidget(context, mouseX, mouseY, delta);
+ context.drawItem(this.item, getX() + getWidth() / 2 - 8, getY() + getHeight() / 2 - 8);
+ }
+}