fishing_event/src/main/java/com/alttd/fishingevent/npc/LibNPC.java

77 lines
3.2 KiB
Java

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<dev.sergiferry.playernpc.api.NPC.Global> spawn(FishingEvent fishingEvent, String simpleId, org.bukkit.Location location, Skin skin, dev.sergiferry.playernpc.api.NPC.NameTag nameTag, BiConsumer<dev.sergiferry.playernpc.api.NPC, Player> rightClick, BiConsumer<dev.sergiferry.playernpc.api.NPC, Player> 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<dev.sergiferry.playernpc.api.NPC.Global> 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;
}
}