package net.knarcraft.dynmapcitizens.trait; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.trait.Trait; import net.knarcraft.blacksmith.BlacksmithPlugin; import net.knarcraft.blacksmith.config.NPCSettings; import net.knarcraft.blacksmith.trait.BlacksmithTrait; import net.knarcraft.dynmapcitizens.DynmapCitizens; import net.knarcraft.dynmapcitizens.Icon; import org.bukkit.Bukkit; import org.bukkit.Material; import org.dynmap.DynmapAPI; import org.dynmap.markers.GenericMarker; import org.dynmap.markers.MarkerSet; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; /** * A handler class for the blacksmith trait */ public class BlacksmithHandler extends AbstractTraitHandler { private MarkerSet blacksmithSet; @Override public void initialize() { BlacksmithPlugin blacksmithPlugin = (BlacksmithPlugin) Bukkit.getServer().getPluginManager().getPlugin("Blacksmith"); DynmapAPI dynmapAPI = DynmapCitizens.getInstance().getDynmapAPI(); if (blacksmithPlugin != null) { blacksmithSet = getMarkerSet(dynmapAPI, "blacksmiths", "Blacksmiths"); if (blacksmithSet != null) { blacksmithSet.setHideByDefault(false); isEnabled = true; return; } } isEnabled = false; } @Override public void updateMarkers() { //Remove existing markers blacksmithSet.getMarkers().forEach(GenericMarker::deleteMarker); Class blacksmithTrait = CitizensAPI.getTraitFactory().getTraitClass("blacksmith"); for (NPC npc : CitizensAPI.getNPCRegistry()) { if (npc.hasTrait(blacksmithTrait)) { BlacksmithTrait trait = CitizensAPI.getTraitFactory().getTrait("blacksmith"); String description = null; if (trait == null) { DynmapCitizens.getInstance().getLogger().log(Level.WARNING, "Unable to get blacksmith trait"); } else { NPCSettings npcSettings = trait.getSettings(); //TODO: Make a setting which allows disabling extra information (except title and reforge-able items?) description = "Blacksmith name: " + npc.getName() + "
Blacksmith title: " + npcSettings.getBlacksmithTitle() + "
Fail chance: " + npcSettings.getFailChance() + "
Enchantment chance: " + npcSettings.getExtraEnchantmentChance() + "
Reforge-able items: " + getReforgeAbleItemsString(npcSettings.getReforgeAbleItems()); } addNPCMarker(npc.getUniqueId(), "Blacksmith NPC: ", description, DynmapCitizens.getInstance().getMarkerIcons().get(Icon.BLACKSMITH), blacksmithSet); } } } /** * Gets reforge-able items as a string * * @param materials

The materials specified as reforge-able items

* @return

The reforge-able items

*/ private static String getReforgeAbleItemsString(List materials) { List materialNames = new ArrayList<>(); for (Material material : materials) { materialNames.add(material.name()); } return String.join(", ", materialNames); } }