aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java26
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java38
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java9
5 files changed, 51 insertions, 41 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
index c03588db..fe35e7d2 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
@@ -14,14 +14,11 @@ import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
import de.hysky.skyblocker.skyblock.dwarven.WishingCompassSolver;
import de.hysky.skyblocker.skyblock.dwarven.CrystalsChestHighlighter;
-import de.hysky.skyblocker.skyblock.end.BeaconHighlighter;
import de.hysky.skyblocker.skyblock.end.EnderNodes;
import de.hysky.skyblocker.skyblock.end.TheEnd;
import de.hysky.skyblocker.skyblock.slayers.SlayerEntitiesGlow;
import de.hysky.skyblocker.skyblock.waypoint.MythologicalRitual;
-import de.hysky.skyblocker.utils.SlayerUtils;
import de.hysky.skyblocker.utils.Utils;
-import net.minecraft.block.Blocks;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
@@ -48,16 +45,6 @@ public abstract class ClientPlayNetworkHandlerMixin {
@Final
private static Logger LOGGER;
- @Inject(method = "onBlockUpdate", at = @At("RETURN"))
- private void skyblocker$onBlockUpdate(BlockUpdateS2CPacket packet, CallbackInfo ci) {
- if (Utils.isInTheEnd() && SlayerUtils.isInSlayer()) {
- BeaconHighlighter.beaconPositions.remove(packet.getPos());
- if (packet.getState().isOf(Blocks.BEACON)) {
- BeaconHighlighter.beaconPositions.add(packet.getPos());
- }
- }
- }
-
@Inject(method = "method_64896", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V"))
private void skyblocker$onItemDestroy(int entityId, CallbackInfo ci) {
if (world.getEntityById(entityId) instanceof ItemEntity itemEntity) {
diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java
index a4bd14b8..28b2c7dc 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java
@@ -3,8 +3,11 @@ package de.hysky.skyblocker.mixins;
import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager;
import de.hysky.skyblocker.skyblock.dungeon.device.SimonSays;
import de.hysky.skyblocker.skyblock.dwarven.CrystalsChestHighlighter;
+import de.hysky.skyblocker.skyblock.end.BeaconHighlighter;
+import de.hysky.skyblocker.utils.SlayerUtils;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.BlockPos;
import org.spongepowered.asm.mixin.Mixin;
@@ -21,14 +24,19 @@ public class ClientWorldMixin {
* @implNote The {@code pos} can be mutable when this is called by chunk delta updates, so if you want to copy it into memory
* (e.g. store it in a field/list/map) make sure to duplicate it via {@link BlockPos#toImmutable()}.
*/
- @Inject(method = "handleBlockUpdate", at = @At("RETURN"))
- private void skyblocker$handleBlockUpdate(CallbackInfo ci, @Local(argsOnly = true) BlockPos pos, @Local(argsOnly = true) BlockState state) {
- if (Utils.isInCrimson()) {
- DojoManager.onBlockUpdate(pos.toImmutable(), state);
- } else if (Utils.isInCrystalHollows()) {
- CrystalsChestHighlighter.onBlockUpdate(pos.toImmutable(), state);
- }
+ //TODO might be worth creating an event for this
+ @Inject(method = "handleBlockUpdate", at = @At("RETURN"))
+ private void skyblocker$handleBlockUpdate(CallbackInfo ci, @Local(argsOnly = true) BlockPos pos, @Local(argsOnly = true) BlockState state) {
+ if (Utils.isInCrimson()) {
+ DojoManager.onBlockUpdate(pos.toImmutable(), state);
+ } else if (Utils.isInCrystalHollows()) {
+ CrystalsChestHighlighter.onBlockUpdate(pos.toImmutable(), state);
+ } else if (Utils.isInTheEnd() && SlayerUtils.isInSlayer()) {
+ BeaconHighlighter.beaconPositions.remove(pos);
- SimonSays.onBlockUpdate(pos, state);
- }
+ if (state.isOf(Blocks.BEACON)) BeaconHighlighter.beaconPositions.add(pos.toImmutable());
+ }
+
+ SimonSays.onBlockUpdate(pos, state);
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java
index 9a2a8311..bd933fd6 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/HandledScreenAccessor.java
@@ -3,28 +3,40 @@ package de.hysky.skyblocker.mixins.accessors;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;
+import net.minecraft.util.Identifier;
+
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(HandledScreen.class)
public interface HandledScreenAccessor {
- @Accessor("x")
- int getX();
+ @Accessor("x")
+ int getX();
+
+ @Accessor("y")
+ int getY();
+
+ @Accessor
+ int getBackgroundWidth();
- @Accessor("y")
- int getY();
+ @Accessor
+ int getBackgroundHeight();
- @Accessor
- int getBackgroundWidth();
+ @Mutable
+ @Accessor("handler")
+ void setHandler(ScreenHandler handler);
- @Accessor
- int getBackgroundHeight();
+ @Accessor("focusedSlot")
+ Slot getFocusedSlot();
- @Mutable
- @Accessor("handler")
- void setHandler(ScreenHandler handler);
+ @Accessor
+ static Identifier getSLOT_HIGHLIGHT_BACK_TEXTURE() {
+ throw new UnsupportedOperationException();
+ }
- @Accessor("focusedSlot")
- Slot getFocusedSlot();
+ @Accessor
+ static Identifier getSLOT_HIGHLIGHT_FRONT_TEXTURE() {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
index cc487424..0296f52d 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
@@ -4,6 +4,7 @@ import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.RenderHelper;
+import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
@@ -11,11 +12,8 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos;
-import java.util.ArrayList;
-import java.util.List;
-
public class BeaconHighlighter {
- public static final List<BlockPos> beaconPositions = new ArrayList<>();
+ public static final ObjectOpenHashSet<BlockPos> beaconPositions = new ObjectOpenHashSet<>();
private static final float[] RED_COLOR_COMPONENTS = { 1.0f, 0.0f, 0.0f };
/**
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java
index 7892b864..fedb2ce8 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java
@@ -4,6 +4,7 @@ import com.mojang.serialization.Codec;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.events.SkyblockEvents;
+import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.mixins.accessors.SlotAccessor;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Utils;
@@ -134,9 +135,13 @@ public class SkyblockInventoryScreen extends InventoryScreen {
@Override
protected void drawForeground(DrawContext context, int mouseX, int mouseY) {
for (Slot equipmentSlot : equipmentSlots) {
+ boolean hovered = isPointWithinBounds(equipmentSlot.x, equipmentSlot.y, 16, 16, mouseX, mouseY);
+
+ if (hovered) context.drawGuiTexture(RenderLayer::getGuiTextured, HandledScreenAccessor.getSLOT_HIGHLIGHT_BACK_TEXTURE(), equipmentSlot.x - 4, equipmentSlot.y - 4, 24, 24);;
+
drawSlot(context, equipmentSlot);
- //FIXME maybe this is not needed?
- //if (isPointWithinBounds(equipmentSlot.x, equipmentSlot.y, 16, 16, mouseX, mouseY)) drawSlotHighlight(context, equipmentSlot.x, equipmentSlot.y, 0);
+
+ if (hovered) context.drawGuiTexture(RenderLayer::getGuiTexturedOverlay, HandledScreenAccessor.getSLOT_HIGHLIGHT_FRONT_TEXTURE(), equipmentSlot.x - 4, equipmentSlot.y - 4, 24, 24);
}
super.drawForeground(context, mouseX, mouseY);