From 5cb46b643303c3c8f1d143c1c07873435689550e Mon Sep 17 00:00:00 2001 From: aPunch Date: Sat, 11 Feb 2012 10:33:36 -0600 Subject: [PATCH] move storage to API for convenience --- lib/CitizensAPI.jar | Bin 27215 -> 34053 bytes src/net/citizensnpcs/Citizens.java | 12 +- src/net/citizensnpcs/Settings.java | 12 +- src/net/citizensnpcs/Template.java | 2 +- .../command/command/NPCCommands.java | 4 +- .../citizensnpcs/npc/CitizensNPCManager.java | 2 +- .../npc/entity/CitizensHumanNPC.java | 7 - .../citizensnpcs/storage/DatabaseStorage.java | 143 ---------- src/net/citizensnpcs/storage/Storage.java | 12 - src/net/citizensnpcs/storage/YamlStorage.java | 261 ------------------ src/net/citizensnpcs/trait/LookClose.java | 2 +- src/net/citizensnpcs/trait/Sneak.java | 2 +- src/net/citizensnpcs/util/NPCBuilder.java | 4 +- 13 files changed, 20 insertions(+), 443 deletions(-) delete mode 100644 src/net/citizensnpcs/storage/DatabaseStorage.java delete mode 100644 src/net/citizensnpcs/storage/Storage.java delete mode 100644 src/net/citizensnpcs/storage/YamlStorage.java diff --git a/lib/CitizensAPI.jar b/lib/CitizensAPI.jar index f8f0fbf51f8711267d5d2795bd165180fdc0894c..3b1f27452864c29a669fe57675b3af4fb49dc74a 100644 GIT binary patch delta 20332 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 Gef1x^>Kl0g delta 13725 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 selected !"), - QUICK_SELECT("npc.selection.quick-select", false); + DEBUG_MODE("general.debug-mode", false), USE_DATABASE("use-database", false), SELECTION_ITEM( + "npc.selection.item", 280), SELECTION_MESSAGE("npc.selection.message", "You selected !"), QUICK_SELECT( + "npc.selection.quick-select", false); private String path; private Object value; diff --git a/src/net/citizensnpcs/Template.java b/src/net/citizensnpcs/Template.java index 1137c1eb7..25ace8bf2 100644 --- a/src/net/citizensnpcs/Template.java +++ b/src/net/citizensnpcs/Template.java @@ -1,6 +1,6 @@ package net.citizensnpcs; -import net.citizensnpcs.api.DataKey; +import net.citizensnpcs.api.util.DataKey; public class Template { private final DataKey template; diff --git a/src/net/citizensnpcs/command/command/NPCCommands.java b/src/net/citizensnpcs/command/command/NPCCommands.java index 2681e4765..497fd44b3 100644 --- a/src/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/net/citizensnpcs/command/command/NPCCommands.java @@ -51,7 +51,7 @@ public class NPCCommands { Messaging.sendError(player, "NPC names cannot be longer than 16 characters. The name has been shortened."); name = name.substring(0, 15); } - CreatureType type = CreatureType.MONSTER; // Default NPC type + CreatureType type = null; if (args.hasValueFlag("type")) try { type = CreatureType.valueOf(args.getFlag("type").toUpperCase().replace('-', '_')); @@ -89,7 +89,7 @@ public class NPCCommands { create.addTrait(new Owner(player.getName())); // Set the mob type - create.addTrait(new MobType(type == CreatureType.MONSTER ? "DEFAULT" : type.toString())); + create.addTrait(new MobType(type == null ? "DEFAULT" : type.toString())); create.spawn(player.getLocation()); npcManager.selectNPC(player, create); diff --git a/src/net/citizensnpcs/npc/CitizensNPCManager.java b/src/net/citizensnpcs/npc/CitizensNPCManager.java index ce7a04017..546031681 100644 --- a/src/net/citizensnpcs/npc/CitizensNPCManager.java +++ b/src/net/citizensnpcs/npc/CitizensNPCManager.java @@ -9,7 +9,7 @@ import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCManager; import net.citizensnpcs.api.npc.trait.Character; import net.citizensnpcs.api.npc.trait.trait.SpawnLocation; -import net.citizensnpcs.storage.Storage; +import net.citizensnpcs.api.util.Storage; import net.citizensnpcs.util.ByIdArray; import net.citizensnpcs.util.NPCBuilder; diff --git a/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java b/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java index c548cb159..1d1e9d14b 100644 --- a/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java +++ b/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java @@ -1,7 +1,5 @@ package net.citizensnpcs.npc.entity; -import net.citizensnpcs.api.DataKey; -import net.citizensnpcs.api.exception.NPCLoadException; import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.resource.lib.EntityHumanNPC; @@ -55,9 +53,4 @@ public class CitizensHumanNPC extends CitizensNPC { handle.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); return handle; } - - @Override - public void load(DataKey key) throws NPCLoadException { - super.load(key); - } } \ No newline at end of file diff --git a/src/net/citizensnpcs/storage/DatabaseStorage.java b/src/net/citizensnpcs/storage/DatabaseStorage.java deleted file mode 100644 index ff8b801d3..000000000 --- a/src/net/citizensnpcs/storage/DatabaseStorage.java +++ /dev/null @@ -1,143 +0,0 @@ -package net.citizensnpcs.storage; - -import java.util.List; - -import net.citizensnpcs.api.DataKey; - -public class DatabaseStorage implements Storage { - - @Override - public DataKey getKey(String root) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void load() { - // TODO Auto-generated method stub - - } - - @Override - public void save() { - // TODO Auto-generated method stub - - } - - public class DatabaseKey extends DataKey { - - @Override - public void copy(String to) { - // TODO Auto-generated method stub - - } - - @Override - public boolean getBoolean(String key) { - // TODO Auto-generated method stub - return false; - } - - @Override - public double getDouble(String key) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public int getInt(String key) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public List getIntegerSubKeys() { - // TODO Auto-generated method stub - return null; - } - - @Override - public long getLong(String key) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public Object getRaw(String key) { - // TODO Auto-generated method stub - return null; - } - - @Override - public DataKey getRelative(String relative) { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getString(String key) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Iterable getSubKeys() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean keyExists(String key) { - // TODO Auto-generated method stub - return false; - } - - @Override - public String name() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void removeKey(String key) { - // TODO Auto-generated method stub - - } - - @Override - public void setBoolean(String key, boolean value) { - // TODO Auto-generated method stub - - } - - @Override - public void setDouble(String key, double value) { - // TODO Auto-generated method stub - - } - - @Override - public void setInt(String key, int value) { - // TODO Auto-generated method stub - - } - - @Override - public void setLong(String key, long value) { - // TODO Auto-generated method stub - - } - - @Override - public void setRaw(String path, Object value) { - // TODO Auto-generated method stub - - } - - @Override - public void setString(String key, String value) { - // TODO Auto-generated method stub - - } - } -} \ No newline at end of file diff --git a/src/net/citizensnpcs/storage/Storage.java b/src/net/citizensnpcs/storage/Storage.java deleted file mode 100644 index 769017081..000000000 --- a/src/net/citizensnpcs/storage/Storage.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.citizensnpcs.storage; - -import net.citizensnpcs.api.DataKey; - -public interface Storage { - - public DataKey getKey(String root); - - public void load(); - - public void save(); -} \ No newline at end of file diff --git a/src/net/citizensnpcs/storage/YamlStorage.java b/src/net/citizensnpcs/storage/YamlStorage.java deleted file mode 100644 index c97cb8da9..000000000 --- a/src/net/citizensnpcs/storage/YamlStorage.java +++ /dev/null @@ -1,261 +0,0 @@ -package net.citizensnpcs.storage; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.logging.Level; - -import net.citizensnpcs.api.DataKey; -import net.citizensnpcs.util.Messaging; - -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -public class YamlStorage implements Storage { - private final FileConfiguration config; - private final File file; - - public YamlStorage(String fileName, String header) { - config = new YamlConfiguration(); - file = new File(fileName); - if (!file.exists()) { - create(); - config.options().header(header); - save(); - } else - load(); - } - - private void create() { - try { - Messaging.log("Creating file: " + file.getName()); - file.getParentFile().mkdirs(); - file.createNewFile(); - } catch (IOException ex) { - Messaging.log(Level.SEVERE, "Could not create file: " + file.getName()); - } - } - - @Override - public DataKey getKey(String root) { - return new YamlKey(root); - } - - @Override - public void load() { - try { - config.load(file); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - private boolean pathExists(String key) { - return config.get(key) != null; - } - - @Override - public void save() { - try { - config.save(file); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - public class YamlKey extends DataKey { - private final String current; - - public YamlKey(String root) { - current = root; - } - - @Override - public void copy(String to) { - ConfigurationSection root = config.getConfigurationSection(current); - if (root == null) - return; - config.createSection(to, root.getValues(true)); - } - - @Override - public boolean getBoolean(String key) { - String path = getKeyExt(key); - if (pathExists(path)) { - if (config.getString(path) == null) - return config.getBoolean(path); - return Boolean.parseBoolean(config.getString(path)); - } - return false; - } - - @Override - public boolean getBoolean(String key, boolean def) { - return config.getBoolean(getKeyExt(key), def); - } - - @Override - public double getDouble(String key) { - String path = getKeyExt(key); - if (pathExists(path)) { - if (config.getString(path) == null) { - if (config.get(path) instanceof Integer) - return config.getInt(path); - return config.getDouble(path); - } - return Double.parseDouble(config.getString(path)); - } - return 0; - } - - @Override - public double getDouble(String key, double def) { - return config.getDouble(getKeyExt(key), def); - } - - @Override - public int getInt(String key) { - String path = getKeyExt(key); - if (pathExists(path)) { - if (config.getString(path) == null) - return config.getInt(path); - return Integer.parseInt(config.getString(path)); - } - return 0; - } - - @Override - public int getInt(String key, int def) { - return config.getInt(getKeyExt(key), def); - } - - @Override - public List getIntegerSubKeys() { - List res = new ArrayList(); - ConfigurationSection section = config.getConfigurationSection(current); - if (section == null) - return res; - List keys = new ArrayList(); - for (String key : section.getKeys(false)) { - try { - keys.add(Integer.parseInt(key)); - } catch (NumberFormatException ex) { - } - } - Collections.sort(keys); - for (int key : keys) - res.add(getRelative(Integer.toString(key))); - return res; - } - - private String getKeyExt(String from) { - if (from.isEmpty()) - return current; - if (from.charAt(0) == '.') - return current.isEmpty() ? from.substring(1, from.length()) : current + from; - return current.isEmpty() ? from : current + "." + from; - } - - @Override - public long getLong(String key) { - String path = getKeyExt(key); - if (pathExists(path)) { - if (config.getString(path) == null) { - if (config.get(path) instanceof Integer) - return config.getInt(path); - return config.getLong(path); - } - return Long.parseLong(config.getString(path)); - } - return 0; - } - - @Override - public long getLong(String key, long def) { - return config.getLong(getKeyExt(key), def); - } - - @Override - public Object getRaw(String key) { - return config.get(getKeyExt(key)); - } - - @Override - public DataKey getRelative(String relative) { - if (relative == null || relative.isEmpty()) - return this; - return new YamlKey(getKeyExt(relative)); - } - - @Override - public String getString(String key) { - String path = getKeyExt(key); - if (pathExists(path)) { - return config.get(path).toString(); - } - return ""; - } - - @Override - public Iterable getSubKeys() { - List res = new ArrayList(); - ConfigurationSection section = config.getConfigurationSection(current); - if (section == null) - return res; - for (String key : section.getKeys(false)) { - res.add(getRelative(key)); - } - return res; - } - - @Override - public boolean keyExists(String key) { - return config.get(getKeyExt(key)) != null; - } - - @Override - public String name() { - int last = current.lastIndexOf('.'); - return current.substring(last == 0 ? 0 : last + 1); - } - - @Override - public void removeKey(String key) { - config.set(getKeyExt(key), null); - save(); - } - - @Override - public void setBoolean(String key, boolean value) { - config.set(getKeyExt(key), value); - } - - @Override - public void setDouble(String key, double value) { - config.set(getKeyExt(key), String.valueOf(value)); - } - - @Override - public void setInt(String key, int value) { - config.set(getKeyExt(key), value); - } - - @Override - public void setLong(String key, long value) { - config.set(getKeyExt(key), value); - } - - @Override - public void setRaw(String key, Object value) { - config.set(getKeyExt(key), value); - } - - @Override - public void setString(String key, String value) { - config.set(getKeyExt(key), value); - } - } -} \ No newline at end of file diff --git a/src/net/citizensnpcs/trait/LookClose.java b/src/net/citizensnpcs/trait/LookClose.java index 1eaaae964..b44ba5108 100644 --- a/src/net/citizensnpcs/trait/LookClose.java +++ b/src/net/citizensnpcs/trait/LookClose.java @@ -3,11 +3,11 @@ package net.citizensnpcs.trait; import org.bukkit.Location; import org.bukkit.entity.Entity; -import net.citizensnpcs.api.DataKey; import net.citizensnpcs.api.exception.NPCLoadException; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.trait.SaveId; import net.citizensnpcs.api.npc.trait.Trait; +import net.citizensnpcs.api.util.DataKey; import net.citizensnpcs.npc.CitizensNPC; import net.minecraft.server.EntityLiving; diff --git a/src/net/citizensnpcs/trait/Sneak.java b/src/net/citizensnpcs/trait/Sneak.java index b394e2951..2c6735e7b 100644 --- a/src/net/citizensnpcs/trait/Sneak.java +++ b/src/net/citizensnpcs/trait/Sneak.java @@ -1,10 +1,10 @@ package net.citizensnpcs.trait; -import net.citizensnpcs.api.DataKey; import net.citizensnpcs.api.exception.NPCLoadException; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.trait.SaveId; import net.citizensnpcs.api.npc.trait.Trait; +import net.citizensnpcs.api.util.DataKey; import net.citizensnpcs.npc.entity.CitizensHumanNPC; import net.minecraft.server.EntityPlayer; diff --git a/src/net/citizensnpcs/util/NPCBuilder.java b/src/net/citizensnpcs/util/NPCBuilder.java index dc5deff9e..d0100a98a 100644 --- a/src/net/citizensnpcs/util/NPCBuilder.java +++ b/src/net/citizensnpcs/util/NPCBuilder.java @@ -46,7 +46,6 @@ public class NPCBuilder { types.put(CreatureType.GHAST, CitizensGhastNPC.class); types.put(CreatureType.GIANT, CitizensGiantNPC.class); types.put(CreatureType.MAGMA_CUBE, CitizensMagmaCubeNPC.class); - types.put(CreatureType.MONSTER, CitizensHumanNPC.class); types.put(CreatureType.MUSHROOM_COW, CitizensMushroomCowNPC.class); types.put(CreatureType.PIG, CitizensPigNPC.class); types.put(CreatureType.PIG_ZOMBIE, CitizensPigZombieNPC.class); @@ -64,6 +63,9 @@ public class NPCBuilder { public CitizensNPC getByType(CreatureType type, CitizensNPCManager npcManager, int id, String name) { Class npcClass = types.get(type); + if (npcClass == null) + npcClass = CitizensHumanNPC.class; + try { return npcClass.getConstructor(CitizensNPCManager.class, int.class, String.class).newInstance(npcManager, id, name);