Implement proper melody drops in Monolith

This commit is contained in:
Melledy
2025-12-15 07:40:03 -08:00
parent 26019d639b
commit 72d9cd530d
5 changed files with 51 additions and 23 deletions
@@ -4,6 +4,7 @@ import java.util.Arrays;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import lombok.Getter;
@Getter
@@ -12,6 +13,7 @@ public class StarTowerDef extends BaseDef {
private int Id;
private int GroupId;
private int Difficulty;
private int SubNoteSkillDropGroupId;
private int[] FloorNum;
private transient int maxFloors;
@@ -0,0 +1,45 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import emu.nebula.util.Utils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import lombok.Getter;
@Getter
@ResourceType(name = "SubNoteSkillDropGroup.json")
public class SubNoteSkillDropGroupDef extends BaseDef {
private int Id;
private int GroupId;
private int SubNoteSkillId;
private static Int2ObjectMap<IntList> GROUPS = new Int2ObjectOpenHashMap<>();
@Override
public int getId() {
return Id;
}
@Override
public void onLoad() {
var packageList = GROUPS.computeIfAbsent(this.GroupId, i -> new IntArrayList());
packageList.add(this.SubNoteSkillId);
}
public static int getRandomDrop(int groupId) {
var dropList = GROUPS.get(groupId);
if (dropList == null) {
return 0;
}
return Utils.randomElement(dropList);
}
public static IntList getGroup(int groupId) {
return GROUPS.get(groupId);
}
}