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/config/SkyblockerConfig.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java15
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java47
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/EndermanEntityAccessor.java17
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java8
6 files changed, 78 insertions, 16 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
index e006886c..a3e710c1 100644
--- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
@@ -1117,10 +1117,13 @@ public class SkyblockerConfig {
public static class EndermanSlayer {
@SerialEntry
- public boolean highlightNukekubiHeads = true;
+ public boolean enableYangGlyphsNotification = true;
@SerialEntry
public boolean highlightBeacons = true;
+
+ @SerialEntry
+ public boolean highlightNukekubiHeads = true;
}
public static class VampireSlayer {
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java
index 19b30937..005bebab 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java
@@ -22,10 +22,10 @@ public class SlayersCategory {
.name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer"))
.collapsed(true)
.option(Option.<Boolean>createBuilder()
- .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightNukekubiHeads"))
- .binding(defaults.slayer.endermanSlayer.highlightNukekubiHeads,
- () -> config.slayer.endermanSlayer.highlightNukekubiHeads,
- newValue -> config.slayer.endermanSlayer.highlightNukekubiHeads = newValue)
+ .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.enableYangGlyphsNotification"))
+ .binding(defaults.slayer.endermanSlayer.enableYangGlyphsNotification,
+ () -> config.slayer.endermanSlayer.enableYangGlyphsNotification,
+ newValue -> config.slayer.endermanSlayer.enableYangGlyphsNotification = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
@@ -35,6 +35,13 @@ public class SlayersCategory {
newValue -> config.slayer.endermanSlayer.highlightBeacons = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightNukekubiHeads"))
+ .binding(defaults.slayer.endermanSlayer.highlightNukekubiHeads,
+ () -> config.slayer.endermanSlayer.highlightNukekubiHeads,
+ newValue -> config.slayer.endermanSlayer.highlightNukekubiHeads = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
.build())
//Vampire Slayer
diff --git a/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java
index 03786876..d9db5dae 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java
@@ -1,19 +1,50 @@
package de.hysky.skyblocker.mixin;
+import com.llamalad7.mixinextras.sugar.Local;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.mixin.accessor.EndermanEntityAccessor;
+import de.hysky.skyblocker.skyblock.entity.MobGlow;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.data.DataTracker;
+import net.minecraft.sound.SoundEvents;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import de.hysky.skyblocker.utils.Utils;
-import net.minecraft.entity.data.DataTracker;
+import java.util.Optional;
@Mixin(DataTracker.class)
-public class DataTrackerMixin {
+public abstract class DataTrackerMixin {
+ @Shadow
+ @Final
+ private Entity trackedEntity;
+
+ @SuppressWarnings("ConstantValue")
+ @Inject(method = "writeUpdatedEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/data/DataTracker;copyToFrom(Lnet/minecraft/entity/data/DataTracker$Entry;Lnet/minecraft/entity/data/DataTracker$SerializedEntry;)V"))
+ private <T> void skyblocker$onWriteUpdatedEntries(CallbackInfo ci, @Local DataTracker.Entry<T> entry, @Local DataTracker.SerializedEntry<T> serializedEntry) {
+ if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.enableYangGlyphsNotification && entry.getData() == EndermanEntityAccessor.getCARRIED_BLOCK() && entry.get() instanceof Optional<?> value && value.isPresent() && value.get() instanceof BlockState state && state.isOf(Blocks.BEACON) && ((Optional<?>) serializedEntry.value()).isEmpty()) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (MobGlow.getArmorStands(trackedEntity).stream().anyMatch(armorStand -> armorStand.getName().getString().contains(client.getSession().getUsername()))) {
+ client.inGameHud.setTitleTicks(5, 20, 10);
+ client.inGameHud.setTitle(Text.literal("Yang Glyph!").formatted(Formatting.RED));
+ client.player.playSound(SoundEvents.BLOCK_NOTE_BLOCK_PLING.value(), 100f, 0.1f);
+ }
+ }
+ }
- @Inject(method = "copyToFrom", at = @At(value = "NEW", target = "Ljava/lang/IllegalStateException;", shift = At.Shift.BEFORE), cancellable = true)
- public void skyblocker$ignoreInvalidDataExceptions(CallbackInfo ci) {
- //These exceptions cause annoying small lag spikes for some reason
- if (Utils.isOnHypixel()) ci.cancel();
- }
+ @SuppressWarnings({"MixinAnnotationTarget", "UnresolvedMixinReference"})
+ @Inject(method = "copyToFrom", at = @At(value = "NEW", target = "Ljava/lang/IllegalStateException;"), cancellable = true)
+ public void skyblocker$ignoreInvalidDataExceptions(CallbackInfo ci) {
+ //These exceptions cause annoying small lag spikes for some reason
+ if (Utils.isOnHypixel()) ci.cancel();
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/EndermanEntityAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/EndermanEntityAccessor.java
new file mode 100644
index 00000000..b7bcd95c
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/EndermanEntityAccessor.java
@@ -0,0 +1,17 @@
+package de.hysky.skyblocker.mixin.accessor;
+
+import net.minecraft.block.BlockState;
+import net.minecraft.entity.data.TrackedData;
+import net.minecraft.entity.mob.EndermanEntity;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+import java.util.Optional;
+
+@Mixin(EndermanEntity.class)
+public interface EndermanEntityAccessor {
+ @Accessor
+ static TrackedData<Optional<BlockState>> getCARRIED_BLOCK() {
+ 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 6c89a07c..a2298ecf 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java
@@ -48,7 +48,7 @@ public class BeaconHighlighter {
private static void render(WorldRenderContext context) {
if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) {
for (BlockPos pos : beaconPositions) {
- RenderHelper.renderFilled(context, pos, RED_COLOR_COMPONENTS, 0.5f, false);
+ RenderHelper.renderFilled(context, pos, RED_COLOR_COMPONENTS, 0.5f, true);
}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
index 90513a4b..85b41bd2 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
@@ -44,7 +44,7 @@ public class MobGlow {
// Regular Mobs
if (!(entity instanceof ArmorStandEntity)) {
- List<ArmorStandEntity> armorStands = getArmorStands(entity.getWorld(), box);
+ List<ArmorStandEntity> armorStands = getArmorStands(entity);
if (!armorStands.isEmpty() && armorStands.get(0).getName().getString().contains("✯"))
return SkyblockerConfigManager.get().locations.dungeons.starredMobGlow;
@@ -79,7 +79,11 @@ public class MobGlow {
return false;
}
- private static List<ArmorStandEntity> getArmorStands(World world, Box box) {
+ public static List<ArmorStandEntity> getArmorStands(Entity entity) {
+ return getArmorStands(entity.getWorld(), entity.getBoundingBox());
+ }
+
+ public static List<ArmorStandEntity> getArmorStands(World world, Box box) {
return world.getEntitiesByClass(ArmorStandEntity.class, box.expand(0, 2, 0), EntityPredicates.NOT_MOUNTED);
}