Changes
This commit is contained in:
parent
dcbabe9ee1
commit
ed6a05e7c4
|
@ -166,45 +166,28 @@ public class Citizens extends JavaPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
public static Storage getNPCStorage() {
|
||||
return saves;
|
||||
}
|
||||
|
||||
private void saveNPCs() {
|
||||
for (NPC npc : npcManager)
|
||||
npc.save(getNPCStorage().getKey("npc." + npc.getId()));
|
||||
getNPCStorage().save();
|
||||
npc.save(saves.getKey("npc." + npc.getId()));
|
||||
saves.save();
|
||||
}
|
||||
|
||||
private void setupNPCs() throws NPCLoadException {
|
||||
traitManager.register("location", SpawnLocation.class);
|
||||
traitManager.register("owner", Owner.class);
|
||||
|
||||
for (DataKey key : getNPCStorage().getKey("npc").getIntegerSubKeys()) {
|
||||
int created = 0, spawned = 0;
|
||||
for (DataKey key : saves.getKey("npc").getIntegerSubKeys()) {
|
||||
int id = Integer.parseInt(key.name());
|
||||
if (!key.keyExists("name"))
|
||||
throw new NPCLoadException("Could not find a name for the NPC with ID '" + id + "'.");
|
||||
Character character = characterManager.getInstance(key.getString("character"), null);
|
||||
NPC npc = npcManager.createNPC(id, key.getString("name"), character);
|
||||
|
||||
// Load the character if it exists, otherwise remove the character
|
||||
if (character != null)
|
||||
character.load(key.getRelative("characters." + character.getName()));
|
||||
|
||||
// Load traits
|
||||
for (DataKey traitKey : key.getSubKeys()) {
|
||||
Trait trait = traitManager.getInstance(traitKey.name(), npc);
|
||||
if (trait == null)
|
||||
continue;
|
||||
trait.load(traitKey);
|
||||
npc.addTrait(trait);
|
||||
}
|
||||
|
||||
// Spawn the NPC
|
||||
if (key.getBoolean("spawned"))
|
||||
npc.spawn(npc.getTrait(SpawnLocation.class).getLocation());
|
||||
NPC npc = npcManager.createNPC(id, key.getString("name"), null);
|
||||
npc.load(key);
|
||||
++created;
|
||||
if (npc.isSpawned())
|
||||
++spawned;
|
||||
}
|
||||
Messaging.log("Loaded " + npcManager.size() + " NPCs");
|
||||
Messaging.log("Loaded " + created + " NPCs (" + spawned + " spawned)");
|
||||
}
|
||||
|
||||
private void registerPermissions() {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package net.citizensnpcs.npc;
|
||||
|
||||
import net.citizensnpcs.api.DataKey;
|
||||
import net.citizensnpcs.api.event.NPCDespawnEvent;
|
||||
import net.citizensnpcs.api.event.NPCSpawnEvent;
|
||||
import net.citizensnpcs.api.npc.AbstractNPC;
|
||||
|
@ -12,7 +11,7 @@ import net.citizensnpcs.util.Messaging;
|
|||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class CitizensNPC extends AbstractNPC {
|
||||
private CraftNPC mcEntity;
|
||||
|
@ -40,8 +39,8 @@ public class CitizensNPC extends AbstractNPC {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Entity getBukkitEntity() {
|
||||
return getHandle().getBukkitEntity();
|
||||
public Player getBukkitEntity() {
|
||||
return getHandle().getPlayer();
|
||||
}
|
||||
|
||||
public CraftNPC getHandle() {
|
||||
|
@ -85,8 +84,4 @@ public class CitizensNPC extends AbstractNPC {
|
|||
spawned = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(DataKey root) {
|
||||
}
|
||||
}
|
|
@ -2,14 +2,9 @@ package net.citizensnpcs.npc;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.npc.NPCManager;
|
||||
import net.citizensnpcs.api.npc.trait.Character;
|
||||
|
@ -32,10 +27,14 @@ import org.bukkit.craftbukkit.entity.CraftPlayer;
|
|||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.SetMultimap;
|
||||
|
||||
public class CitizensNPCManager implements NPCManager {
|
||||
// TODO: merge spawned and byID
|
||||
private final ByIdArray<NPC> spawned = new ByIdArray<NPC>();
|
||||
private final ByIdArray<NPC> byID = new ByIdArray<NPC>();
|
||||
private final Map<Integer, Set<String>> selected = new ConcurrentHashMap<Integer, Set<String>>();
|
||||
private final SetMultimap<Integer, String> selected = HashMultimap.create();
|
||||
private final Storage saves;
|
||||
|
||||
public CitizensNPCManager(Storage saves) {
|
||||
|
@ -53,6 +52,8 @@ public class CitizensNPCManager implements NPCManager {
|
|||
}
|
||||
|
||||
public NPC createNPC(int id, String name, Character character) {
|
||||
if (byID.contains(id))
|
||||
throw new IllegalArgumentException("id already taken");
|
||||
CitizensNPC npc = new CitizensNPC(this, id, name);
|
||||
npc.setCharacter(character);
|
||||
byID.put(npc.getId(), npc);
|
||||
|
@ -64,12 +65,10 @@ public class CitizensNPCManager implements NPCManager {
|
|||
Location loc = npc.getBukkitEntity().getLocation();
|
||||
npc.getTrait(SpawnLocation.class).setLocation(loc);
|
||||
|
||||
if (selected.get(npc.getId()) != null)
|
||||
selected.get(npc.getId()).clear();
|
||||
selected.removeAll(npc.getId());
|
||||
spawned.remove(mcEntity.getPlayer().getEntityId());
|
||||
for (Player player : Bukkit.getOnlinePlayers())
|
||||
((CraftPlayer) player).getHandle().netServerHandler.sendPacket(new Packet29DestroyEntity(mcEntity.id));
|
||||
getWorldServer(loc.getWorld()).removeEntity(mcEntity);
|
||||
mcEntity.die();
|
||||
}
|
||||
|
||||
|
@ -96,9 +95,9 @@ public class CitizensNPCManager implements NPCManager {
|
|||
public Collection<NPC> getNPCs(Class<? extends Character> character) {
|
||||
List<NPC> npcs = new ArrayList<NPC>();
|
||||
for (NPC npc : this) {
|
||||
if (npc.getCharacter() != null
|
||||
&& CitizensAPI.getCharacterManager().getInstance(npc.getCharacter().getName(), npc) != null)
|
||||
if (npc.getCharacter() != null && npc.getCharacter().getClass().equals(character)) {
|
||||
npcs.add(npc);
|
||||
}
|
||||
}
|
||||
return npcs;
|
||||
}
|
||||
|
@ -120,11 +119,11 @@ public class CitizensNPCManager implements NPCManager {
|
|||
}
|
||||
|
||||
public void remove(NPC npc) {
|
||||
if (spawned.contains(((CitizensNPC) npc).getHandle().getPlayer().getEntityId()))
|
||||
if (spawned.contains(npc.getBukkitEntity().getEntityId()))
|
||||
despawn(npc);
|
||||
byID.remove(npc.getId());
|
||||
saves.getKey("npc").removeKey("" + npc.getId());
|
||||
selected.remove(npc.getId());
|
||||
selected.removeAll(npc.getId());
|
||||
}
|
||||
|
||||
public CraftNPC spawn(NPC npc, Location loc) {
|
||||
|
@ -145,12 +144,7 @@ public class CitizensNPCManager implements NPCManager {
|
|||
NPC select = getSelectedNPC(player);
|
||||
if (select != null)
|
||||
selected.get(select.getId()).remove(player.getName());
|
||||
|
||||
Set<String> selectors = selected.get(npc.getId());
|
||||
if (selectors == null)
|
||||
selectors = new HashSet<String>();
|
||||
selectors.add(player.getName());
|
||||
selected.put(npc.getId(), selectors);
|
||||
selected.put(npc.getId(), player.getName());
|
||||
}
|
||||
|
||||
public boolean npcIsSelectedByPlayer(Player player, NPC npc) {
|
||||
|
@ -166,8 +160,4 @@ public class CitizensNPCManager implements NPCManager {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return byID.size();
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@ import org.bukkit.Location;
|
|||
import org.bukkit.entity.Entity;
|
||||
|
||||
public class CitizensNavigator implements Navigator {
|
||||
private CitizensNPC npc;
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public CitizensNavigator(CitizensNPC npc) {
|
||||
this.npc = npc;
|
||||
|
|
|
@ -18,7 +18,6 @@ import org.bukkit.entity.Entity;
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class CraftNPC extends EntityPlayer {
|
||||
|
||||
public CraftNPC(MinecraftServer minecraftServer, World world, String string, ItemInWorldManager itemInWorldManager) {
|
||||
super(minecraftServer, world, string, itemInWorldManager);
|
||||
itemInWorldManager.setGameMode(0);
|
||||
|
|
Loading…
Reference in New Issue