private static void loadNoteBlock() { Map<String, Note> noteMap = new HashMap<>(); for (int octave : new int[]{0, 1}) for (Note.Tone tone : Note.Tone.values()) for (int deviation : new int[]{-1, 0, 1}) { if (deviation == 1 && (tone == Note.Tone.B || tone == Note.Tone.E)) { continue; } if (deviation == -1 && (tone == Note.Tone.C || tone == Note.Tone.F)) { continue; } Note note = Note.natural(octave, tone); if (deviation == 1) { note = note.sharped(); } else if (deviation == -1) { note = note.flattened(); } String noteName = tone.name() + (deviation == 1 ? "+" : deviation == -1 ? "-" : "") + octave; noteMap.put("N" + noteName, note); if (octave == 0) { noteMap.put("N" + noteName.substring(0, noteName.length() - 1), note); } } Note fSharp2 = Note.sharp(2, Note.Tone.F); noteMap.put("NF+2", fSharp2); noteMap.put("NG-2", fSharp2); EnumClassInfo<Note> noteEnumClassInfo = Registration.registerEnum(Note.class, "note", noteMap); if (!MundoUtil.serverHasPlugin("RandomSK")) { noteMap.forEach((noteName, note) -> noteEnumClassInfo.pair(noteName.substring(1), note)); } Registration.registerEnum(Instrument.class, "instrument", Instrument.values()) .document("Instrument", "1.6", "An instrument to which a note can be played using a noteblock."); Registration.registerEffect(EffPlayNoteBlock.class, "play [[%-note% with] %-instrument% on] noteblock %block%") .document("Play Note on Noteblock", "1.6", "Plays the specified noteblock, optionally with a specified instrument and a specified note."); Registration.registerEvent("Note Play", SimpleEvent.class, NotePlayEvent.class, "note play") .document("Note Play", "1.6", "Called when a noteblock is played.") .eventValue(Note.class, "1.6", "The note that was played.") .eventValue(Instrument.class, "1.6", "The instrument using which the note was played.") .eventValue(Block.class, "1.6", "The noteblock that was played."); Registration.registerEventValue(NotePlayEvent.class, Note.class, NotePlayEvent::getNote); Registration.registerEventValue(NotePlayEvent.class, Instrument.class, NotePlayEvent::getInstrument); Registration.registerEventValue(NotePlayEvent.class, Block.class, NotePlayEvent::getBlock); Registration.registerPropertyExpression(ExprNoteOfBlock.class, Note.class, "block", "note") .document("Note of Noteblock", "1.6", "The current note of the specified noteblock."); }