Citizens2/src/net/citizensnpcs/Citizens.java

120 lines
4.4 KiB
Java
Raw Normal View History

2012-01-15 00:51:37 +01:00
package net.citizensnpcs;
2012-01-19 11:52:58 +01:00
import java.io.File;
2012-01-15 00:51:37 +01:00
import net.citizensnpcs.api.CitizensAPI;
2012-01-19 11:52:58 +01:00
import net.citizensnpcs.api.DataKey;
import net.citizensnpcs.api.exception.NPCLoadException;
2012-01-18 05:04:08 +01:00
import net.citizensnpcs.api.npc.NPC;
2012-01-19 11:52:58 +01:00
import net.citizensnpcs.api.npc.trait.Character;
import net.citizensnpcs.api.npc.trait.Trait;
2012-01-18 05:04:08 +01:00
import net.citizensnpcs.api.npc.trait.trait.LocationTrait;
2012-01-15 00:51:37 +01:00
import net.citizensnpcs.npc.CitizensNPCManager;
2012-01-19 11:52:58 +01:00
import net.citizensnpcs.npc.trait.CitizensCharacterManager;
2012-01-20 08:27:14 +01:00
import net.citizensnpcs.npc.trait.CitizensTraitManager;
2012-01-19 11:52:58 +01:00
import net.citizensnpcs.storage.Storage;
import net.citizensnpcs.storage.flatfile.YamlStorage;
import net.citizensnpcs.util.Messaging;
2012-01-15 00:51:37 +01:00
2012-01-18 05:04:08 +01:00
import org.bukkit.Bukkit;
2012-01-19 11:52:58 +01:00
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
2012-01-15 00:51:37 +01:00
import org.bukkit.plugin.java.JavaPlugin;
public class Citizens extends JavaPlugin {
2012-01-19 12:43:21 +01:00
private CitizensNPCManager npcManager;
private CitizensCharacterManager characterManager;
2012-01-20 08:27:14 +01:00
private CitizensTraitManager traitManager;
2012-01-19 12:43:21 +01:00
private Storage saves;
2012-01-15 00:51:37 +01:00
2012-01-19 12:43:21 +01:00
@Override
public void onDisable() {
Messaging.log("v" + getDescription().getVersion() + " disabled.");
}
2012-01-15 00:51:37 +01:00
2012-01-19 12:43:21 +01:00
@Override
public void onEnable() {
2012-01-20 08:27:14 +01:00
// Register API managers
2012-01-19 12:43:21 +01:00
npcManager = new CitizensNPCManager();
characterManager = new CitizensCharacterManager();
2012-01-20 08:27:14 +01:00
traitManager = new CitizensTraitManager();
2012-01-19 12:43:21 +01:00
CitizensAPI.setNPCManager(npcManager);
CitizensAPI.setCharacterManager(characterManager);
2012-01-20 08:27:14 +01:00
CitizensAPI.setTraitManager(traitManager);
2012-01-19 11:52:58 +01:00
2012-01-19 12:43:21 +01:00
// TODO database support
saves = new YamlStorage(getDataFolder() + File.separator + "saves.yml");
2012-01-18 05:04:08 +01:00
2012-01-19 12:43:21 +01:00
// Register events
new EventListen(this);
2012-01-19 12:43:21 +01:00
Messaging.log("v" + getDescription().getVersion() + " enabled.");
2012-01-18 05:04:08 +01:00
2012-01-19 12:43:21 +01:00
// Setup NPCs after all plugins have been enabled (allows for multiworld
// support and for NPCs to properly register external settings)
if (Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
try {
setupNPCs();
} catch (NPCLoadException ex) {
2012-01-20 08:27:14 +01:00
Messaging.log("Failed to create NPC: " + ex.getMessage());
2012-01-19 12:43:21 +01:00
}
}
2012-01-20 08:27:14 +01:00
}) == -1) {
2012-01-19 12:43:21 +01:00
Messaging.log("Issue enabling plugin. Disabling.");
getServer().getPluginManager().disablePlugin(this);
}
}
2012-01-18 05:04:08 +01:00
2012-01-19 12:43:21 +01:00
@Override
public boolean onCommand(CommandSender sender, Command cmd, String cmdName, String[] args) {
2012-01-20 08:48:55 +01:00
if (args[0].equals("spawn")) {
2012-01-19 12:43:21 +01:00
NPC npc = npcManager.createNPC("aPunch");
npc.spawn(((Player) sender).getLocation());
2012-01-20 08:48:55 +01:00
} else if (args[0].equals("despawn")) {
for (NPC npc : npcManager.getNPCs()) {
2012-01-20 08:27:14 +01:00
npc.despawn();
}
2012-01-19 12:43:21 +01:00
}
return true;
}
2012-01-19 11:52:58 +01:00
2012-01-19 12:43:21 +01:00
private void setupNPCs() throws NPCLoadException {
2012-01-20 08:27:14 +01:00
traitManager.registerTrait(LocationTrait.class);
2012-01-20 16:15:32 +01:00
int spawned = 0;
2012-01-19 12:43:21 +01:00
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.getCharacter(key.getString("character"));
NPC npc = npcManager.createNPC(key.getString("name"), character);
2012-01-20 08:27:14 +01:00
// Load the character if it exists
2012-01-19 12:43:21 +01:00
if (character != null) {
character.load(key);
}
2012-01-20 08:27:14 +01:00
// Load traits
for (DataKey traitKey : key.getSubKeys()) {
for (Trait trait : traitManager.getRegisteredTraits()) {
if (trait.getName().equals(traitKey.name())) {
Messaging.debug("Found trait '" + trait.getName() + "' in the NPC with ID '" + id + "'.");
npc.addTrait(trait.getClass());
}
}
}
2012-01-19 13:21:04 +01:00
for (Trait trait : npc.getTraits()) {
trait.load(key);
2012-01-19 12:43:21 +01:00
}
2012-01-20 16:15:32 +01:00
2012-01-20 08:27:14 +01:00
// Spawn the NPC
2012-01-20 16:15:32 +01:00
if (key.getBoolean("spawned")) {
npc.spawn(npc.getTrait(LocationTrait.class).getLocation());
spawned++;
}
2012-01-19 12:43:21 +01:00
}
2012-01-20 16:15:32 +01:00
Messaging.log("Loaded " + npcManager.getNPCs().size() + " NPCs (" + spawned + " spawned).");
2012-01-19 12:43:21 +01:00
}
2012-01-15 00:51:37 +01:00
}