diff options
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker')
6 files changed, 83 insertions, 22 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 577c87e4..127bc601 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -435,7 +435,7 @@ public class SkyblockerConfig implements ConfigData { public int mapX = 2; public int mapY = 2; @ConfigEntry.Gui.Tooltip - public boolean starredMobGlow = false; + public boolean starredMobGlow = true; public boolean solveThreeWeirdos = true; @ConfigEntry.Gui.Tooltip public boolean blazesolver = true; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/BatEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/BatEntityMixin.java new file mode 100644 index 00000000..86c4e672 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/BatEntityMixin.java @@ -0,0 +1,22 @@ +package me.xmrvizzy.skyblocker.mixin; + +import me.xmrvizzy.skyblocker.skyblock.dungeon.secrets.DungeonSecrets; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.mob.AmbientEntity; +import net.minecraft.entity.passive.BatEntity; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(BatEntity.class) +public abstract class BatEntityMixin extends AmbientEntity { + protected BatEntityMixin(EntityType<? extends AmbientEntity> entityType, World world) { + super(entityType, world); + } + + @Override + public void onRemoved() { + super.onRemoved(); + DungeonSecrets.onBatRemoved(this); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/StarredMobGlow.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/StarredMobGlow.java index 64a28712..f614662b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/StarredMobGlow.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/StarredMobGlow.java @@ -1,51 +1,56 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import java.util.List; - import me.xmrvizzy.skyblocker.utils.Utils; import me.xmrvizzy.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.predicate.entity.EntityPredicates; import net.minecraft.util.math.Box; +import java.util.List; + public class StarredMobGlow { public static boolean shouldMobGlow(Entity entity) { Box box = entity.getBoundingBox(); - + if (Utils.isInDungeons() && !entity.isInvisible() && OcclusionCulling.isVisible(box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ)) { - //Minibosses + // Minibosses if (entity instanceof PlayerEntity) { switch (entity.getName().getString()) { - case "Lost Adventurer": return true; - case "Shadow Assassin": return true; - case "Diamond Guy": return true; + case "Lost Adventurer", "Shadow Assassin", "Diamond Guy" -> { + return true; + } } } - - //Regular Mobs + + // Regular Mobs if (!(entity instanceof ArmorStandEntity)) { Box searchBox = box.expand(0, 2, 0); List<ArmorStandEntity> armorStands = entity.getWorld().getEntitiesByClass(ArmorStandEntity.class, searchBox, EntityPredicates.NOT_MOUNTED); - + if (!armorStands.isEmpty() && armorStands.get(0).getName().getString().contains("✯")) return true; } + + // Bats + return entity instanceof BatEntity; } - + return false; } - + public static int getGlowColor(Entity entity) { if (entity instanceof PlayerEntity) { - switch (entity.getName().getString()) { - case "Lost Adventurer": return 0xfee15c; - case "Shadow Assassin": return 0x5b2cb2; - case "Diamond Guy": return 0x57c2f7; - } + return switch (entity.getName().getString()) { + case "Lost Adventurer" -> 0xfee15c; + case "Shadow Assassin" -> 0x5b2cb2; + case "Diamond Guy" -> 0x57c2f7; + default -> 0xf57738; + }; } - + return 0xf57738; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java index c916a5e4..a7420bf5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java @@ -24,6 +24,8 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.AmbientEntity; +import net.minecraft.entity.passive.BatEntity; import net.minecraft.item.FilledMapItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -348,7 +350,7 @@ public class DungeonSecrets { /** * Calls {@link Room#onItemPickup(ItemEntity, LivingEntity)} on the room the {@code collector} is in if that room {@link #isRoomMatched(Room)}. - * Used to detect finding {@link SecretWaypoint.Category.ITEM} and {@link SecretWaypoint.Category.BAT} secrets. + * Used to detect finding {@link SecretWaypoint.Category.ITEM} secrets. * If the collector is the player, {@link #currentRoom} is used as an optimization. */ @SuppressWarnings("JavadocReference") @@ -365,6 +367,18 @@ public class DungeonSecrets { } } + /** + * Calls {@link Room#onBatRemoved(BatEntity)} on the room the {@code bat} is in if that room {@link #isRoomMatched(Room)}. + * Used to detect finding {@link SecretWaypoint.Category.BAT} secrets. + */ + @SuppressWarnings("JavadocReference") + public static void onBatRemoved(AmbientEntity bat) { + Room room = getRoomAtPhysical(bat.getPos()); + if (isRoomMatched(room)) { + room.onBatRemoved(bat); + } + } + public static boolean markSecrets(int secretIndex, boolean found) { if (isCurrentRoomMatched()) { return currentRoom.markSecrets(secretIndex, found); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java index fc62150c..6825d779 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java @@ -19,6 +19,7 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.AmbientEntity; import net.minecraft.registry.Registries; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -374,7 +375,7 @@ public class Room { } /** - * Marks the closest secret no greater than 6 blocks away as found when the player picks up a secret item. + * Marks the closest secret that requires item pickup no greater than 6 blocks away as found when the player picks up a secret item. * * @param itemEntity the item entity being picked up * @param collector the collector of the item @@ -389,6 +390,17 @@ public class Room { } /** + * Marks the closest bat secret as found when a bat is killed. + * + * @param bat the bat being killed + * @see #onSecretFound(SecretWaypoint, String, Object...) + */ + protected void onBatRemoved(AmbientEntity bat) { + secretWaypoints.values().stream().filter(SecretWaypoint::isBat).min(Comparator.comparingDouble(SecretWaypoint.getSquaredDistanceToFunction(bat))) + .ifPresent(secretWaypoint -> onSecretFound(secretWaypoint, "[Skyblocker] Detected {} killed for a {} secret, setting secret #{} as found", bat.getName().getString(), secretWaypoint.category, secretWaypoint.secretIndex)); + } + + /** * Marks all secret waypoints with the same index as the given {@link SecretWaypoint} as found. * * @param secretWaypoint the secret waypoint to read the index from. diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java index edf18f85..3fdd683c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java @@ -57,6 +57,10 @@ public class SecretWaypoint { return category.needsItemPickup(); } + boolean isBat() { + return category.isBat(); + } + void setFound() { this.missing = false; } @@ -122,7 +126,11 @@ public class SecretWaypoint { } boolean needsItemPickup() { - return this == ITEM || this == BAT; + return this == ITEM; + } + + boolean isBat() { + return this == BAT; } boolean isEnabled() { |