EpicKnarvik97 431b35c95d
All checks were successful
KnarCraft/DynmapCitizens/pipeline/head This commit looks good
Adds nullability annotations
2024-01-02 21:53:35 +01:00

83 lines
3.0 KiB
Java

package net.knarcraft.dynmapcitizens.handler.trait;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.trait.Trait;
import net.knarcraft.dynmapcitizens.DynmapCitizens;
import net.knarcraft.dynmapcitizens.property.Icon;
import net.knarcraft.dynmapcitizens.settings.MinstrelSettings;
import net.knarcraft.dynmapcitizens.settings.TraitSettings;
import net.knarcraft.minstrel.MinstrelPlugin;
import net.knarcraft.minstrel.music.Song;
import net.knarcraft.minstrel.trait.MinstrelTrait;
import org.bukkit.Bukkit;
import org.dynmap.markers.GenericMarker;
import org.jetbrains.annotations.NotNull;
import java.util.logging.Level;
/**
* A handler class for the minstrel trait
*/
public class MinstrelHandler extends AbstractTraitHandler {
private final MinstrelSettings settings = new MinstrelSettings();
@Override
public void initialize() {
MinstrelPlugin minstrelPlugin = (MinstrelPlugin) Bukkit.getServer().getPluginManager().getPlugin("Minstrel");
if (minstrelPlugin != null) {
super.initializeMarkerSet();
} else {
super.isEnabled = false;
}
}
@Override
public @NotNull TraitSettings getSettings() {
return this.settings;
}
@Override
public void updateMarkers() {
//Remove existing markers
super.markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
Class<? extends Trait> minstrelTrait = CitizensAPI.getTraitFactory().getTraitClass("minstrel");
for (NPC npc : CitizensAPI.getNPCRegistry()) {
if (npc.hasTrait(minstrelTrait)) {
MinstrelTrait trait = npc.getTraitNullable(MinstrelTrait.class);
String description = "";
if (trait == null) {
DynmapCitizens.getInstance().getLogger().log(Level.WARNING, "Unable to get minstrel trait");
} else {
description = getDetailedMinstrelInfo(npc, trait);
}
addNPCMarker(npc.getUniqueId(), "Minstrel NPC: ", description,
DynmapCitizens.getInstance().getGlobalSettings().getMarkerIcons().get(Icon.MINSTREL), super.markerSet);
}
}
}
/**
* Gets detailed information about a minstrel NPC
*
* @param npc <p>The NPC the settings belong to</p>
* @param trait <p>The minstrel trait to get information from</p>
* @return <p>A string describing the minstrel</p>
*/
private String getDetailedMinstrelInfo(NPC npc, MinstrelTrait trait) {
StringBuilder info = new StringBuilder("<h2>" + npc.getName() + "</h2>");
if (this.settings.displayMinstrelSongs()) {
info.append("<b>Songs:</b><ul>");
for (Song song : trait.getPlaylist().getSongs()) {
info.append("<li>Category: ").append(song.getCategory()).append("<br>Sound: ").append(song.getSound());
info.append("</li>");
}
info.append("</ul>");
}
return info.toString();
}
}