package com.alttd.fishingevent.npc; import com.alttd.fishingevent.FishingEvent; import com.alttd.fishingevent.util.Logger; import com.alttd.fishingevent.util.NPCCreateData; import com.alttd.fishingevent.util.Skin; import dev.sergiferry.playernpc.api.NPCLib; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.Optional; import java.util.function.BiConsumer; public abstract class LibNPC { public abstract String getName(); private dev.sergiferry.playernpc.api.NPC.Global globalNPC = null; private Optional spawn(FishingEvent fishingEvent, String simpleId, org.bukkit.Location location, Skin skin, dev.sergiferry.playernpc.api.NPC.NameTag nameTag, BiConsumer rightClick, BiConsumer leftClick, dev.sergiferry.playernpc.api.NPC.Global.Visibility visibility) { dev.sergiferry.playernpc.api.NPC.Global globalNPC = NPCLib.getInstance().generateGlobalNPC(fishingEvent, simpleId, location); globalNPC.setVisibility(visibility); globalNPC.addCustomClickAction(dev.sergiferry.playernpc.api.NPC.Interact.ClickType.RIGHT_CLICK, rightClick); globalNPC.addCustomClickAction(dev.sergiferry.playernpc.api.NPC.Interact.ClickType.LEFT_CLICK, leftClick); globalNPC.setGazeTrackingType(dev.sergiferry.playernpc.api.NPC.GazeTrackingType.PLAYER); globalNPC.setSkin(skin.texture(), skin.signature()) .update(); globalNPC.setNameTag(nameTag, true) .update(); return Optional.of(globalNPC); } public void defaultSpawnNPC(FishingEvent fishingEvent, Location location, String id, NPCCreateData npcCreateData, Logger logger, NPC npc) { dev.sergiferry.playernpc.api.NPC.NameTag nameTag = new dev.sergiferry.playernpc.api.NPC.NameTag("&6[Quest NPC] ", "&2" + npcCreateData.name(), ""); logger.info(nameTag.getName()); Optional tmp = spawn( fishingEvent, id, location, npcCreateData.skin(), nameTag, (a, player) -> npc.rightClick(player), (a, player) -> npc.leftClick(player), dev.sergiferry.playernpc.api.NPC.Global.Visibility.EVERYONE); if (tmp.isEmpty()) { return; } this.globalNPC = tmp.get(); globalNPC.show(); if (npcCreateData.mainHand() != null) globalNPC.setItemInMainHand(new ItemStack(npcCreateData.mainHand(), 1)); if (npcCreateData.offHand() != null) globalNPC.setItemInMainHand(new ItemStack(npcCreateData.offHand(), 1)); } protected boolean showToPlayer(Player player) { globalNPC.show(player); return true; } protected boolean hideFromPlayer(Player player) { globalNPC.hide(player); return true; } protected void hide() { globalNPC.hide(); } protected void show() { globalNPC.show(); } protected void updateSkin(Player player) { globalNPC.update(player); } protected dev.sergiferry.playernpc.api.NPC.Global getGlobalNPC() { return globalNPC; } }