diff --git a/src/main/java/dev/xkmc/l2hostility/content/capability/mob/MasterData.java b/src/main/java/dev/xkmc/l2hostility/content/capability/mob/MasterData.java index 8e6b36d..ab82487 100644 --- a/src/main/java/dev/xkmc/l2hostility/content/capability/mob/MasterData.java +++ b/src/main/java/dev/xkmc/l2hostility/content/capability/mob/MasterData.java @@ -47,20 +47,22 @@ public static BlockPos getRandomPos(ServerLevel sl, EntityType type, LivingEn @SerialClass.SerialField(toClient = true) public ArrayList data = new ArrayList<>(); + private record MinionKey(EntityType type, double masterMaxHealthPercentage) {} + @SerialClass.SerialField - private LinkedHashMap, Data> map = new LinkedHashMap<>(); + private LinkedHashMap map = new LinkedHashMap<>(); public boolean tick(MobTraitCap cap, Mob mob) { var config = MasterTrait.getConfig(mob.getType()); if (config == null) return false; for (var e : config.minions()) - map.computeIfAbsent(e.type(), k -> new Data()).setup(e); + map.computeIfAbsent(new MinionKey(e.type(), e.maxHealthPercentage()), k -> new Data()).setup(e); boolean updated = data.removeIf(e -> { e.tick(mob); if (e.minion == null) { return !mob.level().isClientSide(); } else { - var ent = map.get(e.minion.getType()); + var ent = map.get(new MinionKey(e.minion.getType(), e.masterMaxHealthPercentage)); if (ent != null) ent.count++; return false; } @@ -112,6 +114,9 @@ public static class Minion { @SerialClass.SerialField(toClient = true) public int id; + @SerialClass.SerialField + public double masterMaxHealthPercentage; + public Mob minion; public void tick(Mob mob) { @@ -187,6 +192,7 @@ public Minion spawn(MobTraitCap parent, ServerLevel sl, Mob mob) { ans.minion = m; ans.uuid = m.getUUID(); ans.id = m.getId(); + ans.masterMaxHealthPercentage = config.maxHealthPercentage(); return ans; }