77 lines
3.2 KiB
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;
|
|
}
|
|
}
|