aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java49
2 files changed, 21 insertions, 40 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
index a8537088..15339c78 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
@@ -6,6 +6,7 @@ import com.llamalad7.mixinextras.sugar.Local;
import de.hysky.skyblocker.skyblock.FishingHelper;
import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
+import de.hysky.skyblocker.skyblock.end.BeaconHighlighter;
import de.hysky.skyblocker.skyblock.waypoint.MythologicalRitual;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
@@ -15,6 +16,7 @@ import net.minecraft.entity.EntityStatuses;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.network.packet.s2c.play.EntityStatusS2CPacket;
+import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket;
import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
import net.minecraft.util.Identifier;
@@ -71,7 +73,15 @@ public abstract class ClientPlayNetworkHandlerMixin {
@ModifyExpressionValue(method = "onEntityStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/EntityStatusS2CPacket;getEntity(Lnet/minecraft/world/World;)Lnet/minecraft/entity/Entity;"))
private Entity skyblocker$onEntityDeath(Entity entity, @Local(argsOnly = true) EntityStatusS2CPacket packet) {
- if (packet.getStatus() == EntityStatuses.PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES) DungeonScore.handleEntityDeath(entity);
+ if (packet.getStatus() == EntityStatuses.PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES)
+ DungeonScore.handleEntityDeath(entity);
return entity;
}
+ @Inject(method = "onBlockUpdate", at = @At("RETURN"))
+ private void skyblocker$onBlockUpdate(BlockUpdateS2CPacket packet, CallbackInfo ci) {
+ BeaconHighlighter.positions.remove(packet.getPos());
+ if(packet.getState().toString().contains("minecraft:beacon")) {
+ BeaconHighlighter.positions.add(packet.getPos());
+ }
+ }
}
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 0da5cc97..98929e7c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
@@ -1,52 +1,24 @@
package de.hysky.skyblocker.skyblock.end;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.RenderHelper;
-import de.hysky.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
-import net.minecraft.client.MinecraftClient;
import net.minecraft.util.math.BlockPos;
import java.util.ArrayList;
import java.util.List;
public class BeaconHighlighter {
- static List<BlockPos> pos = new ArrayList<>();
+ public static List<BlockPos> positions = new ArrayList<>();
/**
* Initializes the beacon highlighting system.
* `BeaconHighlighter::render` is called after translucent rendering.
- * `BeaconHighlighter::update` should be called every 5 ticks.
*/
public static void init() {
WorldRenderEvents.AFTER_TRANSLUCENT.register(BeaconHighlighter::render);
- Scheduler.INSTANCE.scheduleCyclic(BeaconHighlighter::update, 5);
- }
-
- /**
- * Updates the position of the beacon.
- * It checks in a 15 block radius on the X/Z axis, and a ~5 block radius on the Y axis.
- * If a beacon is found, `pos` is updated to the beacon's position.
- */
-
- public static void update() {
- var player = MinecraftClient.getInstance().player;
- var world = MinecraftClient.getInstance().world;
- pos.clear();
- if(player != null && world != null &&
- SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) {
- for(int x = (player.getBlockPos().getX()-15); x<player.getBlockPos().getX()+15; x++) {
- for(int z = (player.getBlockPos().getZ()-15); z<player.getBlockPos().getZ()+15; z++) {
- for(int y = (player.getBlockPos().getY()-3); y<player.getBlockPos().getY()+7; y++) {
- var state = world.getBlockState(new BlockPos(x, y, z));
- if(state.toString().contains("minecraft:beacon")) {
- pos.add(new BlockPos(x, y, z));
- }
- }
- }
- }
- }
}
/**
@@ -55,14 +27,13 @@ public class BeaconHighlighter {
* @param context An instance of WorldRenderContext for the RenderHelper to use
*/
public static void render(WorldRenderContext context) {
- pos.forEach((it) -> {
- RenderHelper.renderFilled(
- context,
- it,
- new float[]{1.0f, 0.0f, 0.0f},
- 0.5f,
- false
- );
- });
+ if(Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons)
+ positions.forEach((it) -> RenderHelper.renderFilled(
+ context,
+ it,
+ new float[]{1.0f, 0.0f, 0.0f},
+ 0.5f,
+ false
+ ));
}
}