diff options
Diffstat (limited to 'src/main')
5 files changed, 123 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 9477fbed..b8606b87 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -918,6 +918,17 @@ public class SkyblockerConfig { public static class Slayer { @SerialEntry public VampireSlayer vampireSlayer = new VampireSlayer(); + + @SerialEntry + public EndermanSlayer endermanSlayer = new EndermanSlayer(); + } + + public static class EndermanSlayer { + @SerialEntry + public boolean highlightNukekubiHeads = true; + + @SerialEntry + public boolean highlightBeacons = 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 7df95172..15e6f4a6 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java @@ -16,6 +16,24 @@ public class SlayersCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.slayer")) + .group(OptionGroup.createBuilder() + .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) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightBeacons")) + .binding(defaults.slayer.endermanSlayer.highlightBeacons, + () -> config.slayer.endermanSlayer.highlightBeacons, + newValue -> config.slayer.endermanSlayer.highlightBeacons = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) //Vampire Slayer .group(OptionGroup.createBuilder() diff --git a/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java new file mode 100644 index 00000000..2dc64aff --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java @@ -0,0 +1,51 @@ +package de.hysky.skyblocker.skyblock.endermanslayer; + +import de.hysky.skyblocker.utils.Tickable; +import de.hysky.skyblocker.utils.render.RenderHelper; +import de.hysky.skyblocker.utils.render.Renderable; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.Block; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtString; +import net.minecraft.util.math.BlockPos; + +public class BeaconHighlighter implements Tickable, Renderable { + BlockPos pos = null; + @Override + public void tick(MinecraftClient client) { + var player = MinecraftClient.getInstance().player; + var world = MinecraftClient.getInstance().world; + pos = null; + if(player != null && world != null) { + for(int x = (int) (player.getX()-20); x<player.getX()+20; x++) { + for(int z = (int) (player.getX()-20); z<player.getX()+20; z++) { + for(int y = (int) (player.getY()-10); y<player.getY()+10; y++) { + var state = world.getBlockState(new BlockPos(x, y, z)); + var item = ItemStack.fromNbt((NbtCompound) new NbtCompound() + .put("id", NbtString.of("minecraft:beacon"))); + if(state.isOf(Block.getBlockFromItem(item.getItem()))) { + pos = new BlockPos(x, y, z); + + } + } + } + } + } + + } + + @Override + public void render(WorldRenderContext context) { + if(pos != null) { + RenderHelper.renderFilled( + context, + pos, + new float[]{1.0f, 0.0f, 0.0f}, + 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 fa9f6e4f..fdaa0d6c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -2,18 +2,25 @@ package de.hysky.skyblocker.skyblock.entity; import java.util.List; +import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dungeon.LividColor; +import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; +import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; import net.minecraft.entity.Entity; import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.entity.passive.BatEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtElement; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.util.Formatting; import net.minecraft.util.math.Box; import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class MobGlow { public static boolean shouldMobGlow(Entity entity) { @@ -54,6 +61,39 @@ public class MobGlow { } } } + + + + } + + // Enderman Slayer + // Nukekubi Heads + Logger logger = LoggerFactory.getLogger(MobGlow.class); + if(entity instanceof ArmorStandEntity) { + for (net.minecraft.item.ItemStack it : entity.getArmorItems()) { + if(!it.toString().startsWith("1 player_head")) + continue; + + + if (it.hasNbt()) { + assert it.getNbt() != null; + // eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3 is texture id + // for the nukekubi head, compare against it to exclusively find + // armorstands that are nukekubi heads + if (it.getNbt().contains("SkullOwner")) { + var texture = it + .getNbt() + .getCompound("SkullOwner") + .getCompound("Properties") + .getList("textures", NbtElement.COMPOUND_TYPE) + .getCompound(0) + .getString("Value"); + return SkyblockerConfigManager.get().slayer.endermanSlayer.highlightNukekubiHeads + && texture.contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0="); + + } + } + } } return false; diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 1360f5f1..b59a7835 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -308,6 +308,9 @@ "text.autoconfig.skyblocker.option.messages.hideDeath": "Hide Player Death Messages", "text.autoconfig.skyblocker.option.messages.hideDeath.@Tooltip": "Filters the player death messages from chat.", "text.autoconfig.skyblocker.category.slayer": "Slayers", + "text.autoconfig.skyblocker.option.slayer.endermanSlayer": "Enderman Slayer", + "text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightNukekubiHeads": "Nukekubi Head Highlighting", + "text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightBeacons": "Beacon Highlighting", "text.autoconfig.skyblocker.option.slayer.vampireSlayer": "Vampire Slayer", "text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableEffigyWaypoints": "Enable Effigy Waypoints", "text.autoconfig.skyblocker.option.slayer.vampireSlayer.compactEffigyWaypoints": "Compact Effigy Waypoints", |