Как я могу создать NPC с Citizens API? - PullRequest
0 голосов
/ 15 марта 2019

Я делаю плагин для жилья (Bukkit 1.6.4) в Java для мод-компании, в которой я работаю.Мне нужно использовать NPCS для этого.Я пытался использовать Cizizens API, но при попытке создать его всегда выдает ошибку:

java.lang.NullPointerException
        at com.packagenamehere.npc.HouseShopNPC.<init>(HouseShopNPC.java:23)
        at com.packagenamehere.houses.House.createNPCS(House.java:88)
        at com.packagenamehere.data.HouseDataLoader.loadData(HouseDataLoader.java:80)
        at com.packagenamehere.data.HouseDataLoader.<init>(HouseDataLoader.java:20)
        at com.packagenamehere.data.DataSetUp.checkFirstRun(DataSetUp.java:24)
        at com.packagenamehere.data.DataSetUp.<init>(DataSetUp.java:16)
        at com.packagenamehere.main.Main.onEnable(Main.java:205)
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:284)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:266)
        at net.minecraft.server.v1_6_R3.MinecraftServer.l(MinecraftServer.java:315)
        at net.minecraft.server.v1_6_R3.MinecraftServer.f(MinecraftServer.java:292)
        at net.minecraft.server.v1_6_R3.MinecraftServer.a(MinecraftServer.java:252)
        at net.minecraft.server.v1_6_R3.DedicatedServer.init(DedicatedServer.java:152)
        at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:393)
        at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)

Plugins.yml:

depend: [Multiverse-Core]
name: Housing
description: This is a plugin for housing.
version: 1.0
main: com.packagenamehere.main.Main
Authors: MaxR

commands:
  h:
    usage: /<command>
    description: type /house help for a list of cmds

HouseShopNPC:

package com.packagenamehere.npc;

import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.event.NPCClickEvent;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.npc.NPCRegistry;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class HouseShopNPC implements Listener{

    public HouseShopNPC(Location loc){

        World hWorld = Bukkit.getWorld("HouseWorld");

        NPCRegistry registry = CitizensAPI.getNPCRegistry();

        NPC hNpc = registry.createNPC(EntityType.PLAYER, "Shop");
        hNpc.spawn(Bukkit.getWorlds().get(0).getSpawnLocation());

    }

    @EventHandler
    public void onClickEvent(NPCClickEvent e){

        Player plr = e.getClicker();

        plr.sendMessage("sdfsdf");

    }

}

Я также включил CitizensAPI.setImplementation(new CitizensPlugin()) {...} в свой файл main.java, потому что это дало бы мне незаконное исключение argumentexception, если бы я не включил эту строку.

Кто-нибудь знает, как я могу это исправить?

Спасибо

1 Ответ

1 голос
/ 15 марта 2019

Не совсем уверен во всех деталях Citizens API, но из ошибки java я бы пришел к выводу, что переменная реестра (объект NPCRegistry) равна нулю.

Кроме того, я помню, как я работал с Mincraft, и вам нужно добавить API, от которого вы хотите зависеть, в свой plugin.yml. Это означает, что в вашем случае вы должны изменить первую строку вашего plugin.yml следующим образом:

depend: [Citizens, Multiverse-Core]

Если вы сделаете это, вы, как правило, сможете выполнять свой код таким, какой он есть. Вы можете найти дополнительную информацию здесь (в разделе «Привязка к гражданам»): https://wiki.citizensnpcs.co/API

Кобра_8

...