aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/BatEntityMixin.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/StarredMobGlow.java41
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java10
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() {