Merge branch 'master' of git://github.com/drtshock/PlotSquared into drtshock-master

Conflicts:
	PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unclaim.java
	PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java
This commit is contained in:
Sauilitired 2014-12-18 12:35:08 +01:00
commit a04e207724
167 changed files with 3712 additions and 5532 deletions

View File

@ -10,8 +10,7 @@ public final class ByteArrayTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public ByteArrayTag(final byte[] value) { public ByteArrayTag(final byte[] value) {
super(); super();
@ -21,10 +20,8 @@ public final class ByteArrayTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public ByteArrayTag(final String name, final byte[] value) { public ByteArrayTag(final String name, final byte[] value) {
super(name); super(name);

View File

@ -10,8 +10,7 @@ public final class ByteTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public ByteTag(final byte value) { public ByteTag(final byte value) {
super(); super();
@ -21,10 +20,8 @@ public final class ByteTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public ByteTag(final String name, final byte value) { public ByteTag(final String name, final byte value) {
super(name); super(name);

View File

@ -15,8 +15,7 @@ public final class CompoundTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public CompoundTag(final Map<String, Tag> value) { public CompoundTag(final Map<String, Tag> value) {
super(); super();
@ -26,10 +25,8 @@ public final class CompoundTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public CompoundTag(final String name, final Map<String, Tag> value) { public CompoundTag(final String name, final Map<String, Tag> value) {
super(name); super(name);
@ -39,8 +36,8 @@ public final class CompoundTag extends Tag {
/** /**
* Returns whether this compound tag contains the given key. * Returns whether this compound tag contains the given key.
* *
* @param key * @param key the given key
* the given key *
* @return true if the tag contains the given key * @return true if the tag contains the given key
*/ */
public boolean containsKey(final String key) { public boolean containsKey(final String key) {
@ -55,8 +52,8 @@ public final class CompoundTag extends Tag {
/** /**
* Return a new compound tag with the given values. * Return a new compound tag with the given values.
* *
* @param value * @param value the value
* the value *
* @return the new compound tag * @return the new compound tag
*/ */
public CompoundTag setValue(final Map<String, Tag> value) { public CompoundTag setValue(final Map<String, Tag> value) {
@ -73,82 +70,62 @@ public final class CompoundTag extends Tag {
} }
/** /**
* Get a byte array named with the given key. * Get a byte array named with the given key. <p/> <p> If the key does not exist or its value is not a byte array
* <p/> * tag, then an empty byte array will be returned. </p>
* <p> *
* If the key does not exist or its value is not a byte array tag, then an * @param key the key
* empty byte array will be returned.
* </p>
* *
* @param key
* the key
* @return a byte array * @return a byte array
*/ */
public byte[] getByteArray(final String key) { public byte[] getByteArray(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof ByteArrayTag) { if (tag instanceof ByteArrayTag) {
return ((ByteArrayTag) tag).getValue(); return ((ByteArrayTag) tag).getValue();
} } else {
else {
return new byte[0]; return new byte[0];
} }
} }
/** /**
* Get a byte named with the given key. * Get a byte named with the given key. <p/> <p> If the key does not exist or its value is not a byte tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the key does not exist or its value is not a byte tag, then {@code 0} * @param key the key
* will be returned.
* </p>
* *
* @param key
* the key
* @return a byte * @return a byte
*/ */
public byte getByte(final String key) { public byte getByte(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else {
else {
return (byte) 0; return (byte) 0;
} }
} }
/** /**
* Get a double named with the given key. * Get a double named with the given key. <p/> <p> If the key does not exist or its value is not a double tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the key does not exist or its value is not a double tag, then * @param key the key
* {@code 0} will be returned.
* </p>
* *
* @param key
* the key
* @return a double * @return a double
*/ */
public double getDouble(final String key) { public double getDouble(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof DoubleTag) { if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue(); return ((DoubleTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a double named with the given key, even if it's another * Get a double named with the given key, even if it's another type of number. <p/> <p> If the key does not exist or
* type of number. * its value is not a number, then {@code 0} will be returned. </p>
* <p/> *
* <p> * @param key the key
* If the key does not exist or its value is not a number, then {@code 0}
* will be returned.
* </p>
* *
* @param key
* the key
* @return a double * @return a double
*/ */
public double asDouble(final String key) { public double asDouble(final String key) {
@ -156,109 +133,83 @@ public final class CompoundTag extends Tag {
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else if (tag instanceof ShortTag) {
else if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else if (tag instanceof IntTag) {
else if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else if (tag instanceof LongTag) {
else if (tag instanceof LongTag) {
return ((LongTag) tag).getValue(); return ((LongTag) tag).getValue();
} } else if (tag instanceof FloatTag) {
else if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue(); return ((FloatTag) tag).getValue();
} } else if (tag instanceof DoubleTag) {
else if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue(); return ((DoubleTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a float named with the given key. * Get a float named with the given key. <p/> <p> If the key does not exist or its value is not a float tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the key does not exist or its value is not a float tag, then {@code 0} * @param key the key
* will be returned.
* </p>
* *
* @param key
* the key
* @return a float * @return a float
*/ */
public float getFloat(final String key) { public float getFloat(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof FloatTag) { if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue(); return ((FloatTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a {@code int[]} named with the given key. * Get a {@code int[]} named with the given key. <p/> <p> If the key does not exist or its value is not an int array
* <p/> * tag, then an empty array will be returned. </p>
* <p> *
* If the key does not exist or its value is not an int array tag, then an * @param key the key
* empty array will be returned.
* </p>
* *
* @param key
* the key
* @return an int array * @return an int array
*/ */
public int[] getIntArray(final String key) { public int[] getIntArray(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof IntArrayTag) { if (tag instanceof IntArrayTag) {
return ((IntArrayTag) tag).getValue(); return ((IntArrayTag) tag).getValue();
} } else {
else {
return new int[0]; return new int[0];
} }
} }
/** /**
* Get an int named with the given key. * Get an int named with the given key. <p/> <p> If the key does not exist or its value is not an int tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the key does not exist or its value is not an int tag, then {@code 0} * @param key the key
* will be returned.
* </p>
* *
* @param key
* the key
* @return an int * @return an int
*/ */
public int getInt(final String key) { public int getInt(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof IntTag) { if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get an int named with the given key, even if it's another * Get an int named with the given key, even if it's another type of number. <p/> <p> If the key does not exist or
* type of number. * its value is not a number, then {@code 0} will be returned. </p>
* <p/> *
* <p> * @param key the key
* If the key does not exist or its value is not a number, then {@code 0}
* will be returned.
* </p>
* *
* @param key
* the key
* @return an int * @return an int
*/ */
public int asInt(final String key) { public int asInt(final String key) {
@ -266,91 +217,69 @@ public final class CompoundTag extends Tag {
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else if (tag instanceof ShortTag) {
else if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else if (tag instanceof IntTag) {
else if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else if (tag instanceof LongTag) {
else if (tag instanceof LongTag) {
return ((LongTag) tag).getValue().intValue(); return ((LongTag) tag).getValue().intValue();
} } else if (tag instanceof FloatTag) {
else if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue().intValue(); return ((FloatTag) tag).getValue().intValue();
} } else if (tag instanceof DoubleTag) {
else if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue().intValue(); return ((DoubleTag) tag).getValue().intValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a list of tags named with the given key. * Get a list of tags named with the given key. <p/> <p> If the key does not exist or its value is not a list tag,
* <p/> * then an empty list will be returned. </p>
* <p> *
* If the key does not exist or its value is not a list tag, then an empty * @param key the key
* list will be returned.
* </p>
* *
* @param key
* the key
* @return a list of tags * @return a list of tags
*/ */
public List<Tag> getList(final String key) { public List<Tag> getList(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof ListTag) { if (tag instanceof ListTag) {
return ((ListTag) tag).getValue(); return ((ListTag) tag).getValue();
} } else {
else {
return Collections.emptyList(); return Collections.emptyList();
} }
} }
/** /**
* Get a {@code TagList} named with the given key. * Get a {@code TagList} named with the given key. <p/> <p> If the key does not exist or its value is not a list
* <p/> * tag, then an empty tag list will be returned. </p>
* <p> *
* If the key does not exist or its value is not a list tag, then an empty * @param key the key
* tag list will be returned.
* </p>
* *
* @param key
* the key
* @return a tag list instance * @return a tag list instance
*/ */
public ListTag getListTag(final String key) { public ListTag getListTag(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof ListTag) { if (tag instanceof ListTag) {
return (ListTag) tag; return (ListTag) tag;
} } else {
else { return new ListTag(key, StringTag.class, Collections.<Tag>emptyList());
return new ListTag(key, StringTag.class, Collections.<Tag> emptyList());
} }
} }
/** /**
* Get a list of tags named with the given key. * Get a list of tags named with the given key. <p/> <p> If the key does not exist or its value is not a list tag,
* <p/> * then an empty list will be returned. If the given key references a list but the list of of a different type, then
* <p> * an empty list will also be returned. </p>
* If the key does not exist or its value is not a list tag, then an empty *
* list will be returned. If the given key references a list but the list of * @param key the key
* of a different type, then an empty list will also be returned. * @param listType the class of the contained type
* </p> * @param <T> the type of list
* *
* @param key
* the key
* @param listType
* the class of the contained type
* @param <T>
* the type of list
* @return a list of tags * @return a list of tags
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -360,49 +289,37 @@ public final class CompoundTag extends Tag {
final ListTag listTag = (ListTag) tag; final ListTag listTag = (ListTag) tag;
if (listTag.getType().equals(listType)) { if (listTag.getType().equals(listType)) {
return (List<T>) listTag.getValue(); return (List<T>) listTag.getValue();
} } else {
else {
return Collections.emptyList(); return Collections.emptyList();
} }
} } else {
else {
return Collections.emptyList(); return Collections.emptyList();
} }
} }
/** /**
* Get a long named with the given key. * Get a long named with the given key. <p/> <p> If the key does not exist or its value is not a long tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the key does not exist or its value is not a long tag, then {@code 0} * @param key the key
* will be returned.
* </p>
* *
* @param key
* the key
* @return a long * @return a long
*/ */
public long getLong(final String key) { public long getLong(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof LongTag) { if (tag instanceof LongTag) {
return ((LongTag) tag).getValue(); return ((LongTag) tag).getValue();
} } else {
else {
return 0L; return 0L;
} }
} }
/** /**
* Get a long named with the given key, even if it's another * Get a long named with the given key, even if it's another type of number. <p/> <p> If the key does not exist or
* type of number. * its value is not a number, then {@code 0} will be returned. </p>
* <p/> *
* <p> * @param key the key
* If the key does not exist or its value is not a number, then {@code 0}
* will be returned.
* </p>
* *
* @param key
* the key
* @return a long * @return a long
*/ */
public long asLong(final String key) { public long asLong(final String key) {
@ -410,72 +327,56 @@ public final class CompoundTag extends Tag {
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else if (tag instanceof ShortTag) {
else if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else if (tag instanceof IntTag) {
else if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else if (tag instanceof LongTag) {
else if (tag instanceof LongTag) {
return ((LongTag) tag).getValue(); return ((LongTag) tag).getValue();
} } else if (tag instanceof FloatTag) {
else if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue().longValue(); return ((FloatTag) tag).getValue().longValue();
} } else if (tag instanceof DoubleTag) {
else if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue().longValue(); return ((DoubleTag) tag).getValue().longValue();
} } else {
else {
return 0L; return 0L;
} }
} }
/** /**
* Get a short named with the given key. * Get a short named with the given key. <p/> <p> If the key does not exist or its value is not a short tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the key does not exist or its value is not a short tag, then {@code 0} * @param key the key
* will be returned.
* </p>
* *
* @param key
* the key
* @return a short * @return a short
*/ */
public short getShort(final String key) { public short getShort(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof ShortTag) { if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a string named with the given key. * Get a string named with the given key. <p/> <p> If the key does not exist or its value is not a string tag, then
* <p/> * {@code ""} will be returned. </p>
* <p> *
* If the key does not exist or its value is not a string tag, then * @param key the key
* {@code ""} will be returned.
* </p>
* *
* @param key
* the key
* @return a string * @return a string
*/ */
public String getString(final String key) { public String getString(final String key) {
final Tag tag = this.value.get(key); final Tag tag = this.value.get(key);
if (tag instanceof StringTag) { if (tag instanceof StringTag) {
return ((StringTag) tag).getValue(); return ((StringTag) tag).getValue();
} } else {
else {
return ""; return "";
} }
} }

View File

@ -1,10 +1,10 @@
package com.intellectualcrafters.jnbt; package com.intellectualcrafters.jnbt;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static com.google.common.base.Preconditions.checkNotNull;
/** /**
* Helps create compound tags. * Helps create compound tags.
*/ */
@ -22,8 +22,7 @@ public class CompoundTagBuilder {
/** /**
* Create a new instance and use the given map (which will be modified). * Create a new instance and use the given map (which will be modified).
* *
* @param value * @param value the value
* the value
*/ */
CompoundTagBuilder(final Map<String, Tag> value) { CompoundTagBuilder(final Map<String, Tag> value) {
checkNotNull(value); checkNotNull(value);
@ -42,10 +41,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and tag into the compound tag. * Put the given key and tag into the compound tag.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder put(final String key, final Tag value) { public CompoundTagBuilder put(final String key, final Tag value) {
@ -56,13 +54,11 @@ public class CompoundTagBuilder {
} }
/** /**
* Put the given key and value into the compound tag as a * Put the given key and value into the compound tag as a {@code ByteArrayTag}.
* {@code ByteArrayTag}. *
* @param key they key
* @param value the value
* *
* @param key
* they key
* @param value
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putByteArray(final String key, final byte[] value) { public CompoundTagBuilder putByteArray(final String key, final byte[] value) {
@ -72,10 +68,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as a {@code ByteTag}. * Put the given key and value into the compound tag as a {@code ByteTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putByte(final String key, final byte value) { public CompoundTagBuilder putByte(final String key, final byte value) {
@ -85,10 +80,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as a {@code DoubleTag}. * Put the given key and value into the compound tag as a {@code DoubleTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putDouble(final String key, final double value) { public CompoundTagBuilder putDouble(final String key, final double value) {
@ -98,10 +92,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as a {@code FloatTag}. * Put the given key and value into the compound tag as a {@code FloatTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putFloat(final String key, final float value) { public CompoundTagBuilder putFloat(final String key, final float value) {
@ -109,13 +102,11 @@ public class CompoundTagBuilder {
} }
/** /**
* Put the given key and value into the compound tag as a * Put the given key and value into the compound tag as a {@code IntArrayTag}.
* {@code IntArrayTag}. *
* @param key they key
* @param value the value
* *
* @param key
* they key
* @param value
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putIntArray(final String key, final int[] value) { public CompoundTagBuilder putIntArray(final String key, final int[] value) {
@ -125,10 +116,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as an {@code IntTag}. * Put the given key and value into the compound tag as an {@code IntTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putInt(final String key, final int value) { public CompoundTagBuilder putInt(final String key, final int value) {
@ -138,10 +128,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as a {@code LongTag}. * Put the given key and value into the compound tag as a {@code LongTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putLong(final String key, final long value) { public CompoundTagBuilder putLong(final String key, final long value) {
@ -151,10 +140,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as a {@code ShortTag}. * Put the given key and value into the compound tag as a {@code ShortTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putShort(final String key, final short value) { public CompoundTagBuilder putShort(final String key, final short value) {
@ -164,10 +152,9 @@ public class CompoundTagBuilder {
/** /**
* Put the given key and value into the compound tag as a {@code StringTag}. * Put the given key and value into the compound tag as a {@code StringTag}.
* *
* @param key * @param key they key
* they key * @param value the value
* @param value *
* the value
* @return this object * @return this object
*/ */
public CompoundTagBuilder putString(final String key, final String value) { public CompoundTagBuilder putString(final String key, final String value) {
@ -177,8 +164,8 @@ public class CompoundTagBuilder {
/** /**
* Put all the entries from the given map into this map. * Put all the entries from the given map into this map.
* *
* @param value * @param value the map of tags
* the map of tags *
* @return this object * @return this object
*/ */
public CompoundTagBuilder putAll(final Map<String, ? extends Tag> value) { public CompoundTagBuilder putAll(final Map<String, ? extends Tag> value) {
@ -201,8 +188,8 @@ public class CompoundTagBuilder {
/** /**
* Build a new compound tag with this builder's entries. * Build a new compound tag with this builder's entries.
* *
* @param name * @param name the name of the tag
* the name of the tag *
* @return the created compound tag * @return the created compound tag
*/ */
public CompoundTag build(final String name) { public CompoundTag build(final String name) {

View File

@ -10,8 +10,7 @@ public final class DoubleTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public DoubleTag(final double value) { public DoubleTag(final double value) {
super(); super();
@ -21,10 +20,8 @@ public final class DoubleTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public DoubleTag(final String name, final double value) { public DoubleTag(final String name, final double value) {
super(name); super(name);

View File

@ -10,8 +10,7 @@ public final class FloatTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public FloatTag(final float value) { public FloatTag(final float value) {
super(); super();
@ -21,10 +20,8 @@ public final class FloatTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public FloatTag(final String name, final float value) { public FloatTag(final String name, final float value) {
super(name); super(name);

View File

@ -12,8 +12,7 @@ public final class IntArrayTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public IntArrayTag(final int[] value) { public IntArrayTag(final int[] value) {
super(); super();
@ -24,10 +23,8 @@ public final class IntArrayTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public IntArrayTag(final String name, final int[] value) { public IntArrayTag(final String name, final int[] value) {
super(name); super(name);

View File

@ -10,8 +10,7 @@ public final class IntTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public IntTag(final int value) { public IntTag(final int value) {
super(); super();
@ -21,10 +20,8 @@ public final class IntTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public IntTag(final String name, final int value) { public IntTag(final String name, final int value) {
super(name); super(name);

View File

@ -1,12 +1,11 @@
package com.intellectualcrafters.jnbt; package com.intellectualcrafters.jnbt;
import static com.google.common.base.Preconditions.checkNotNull; import javax.annotation.Nullable;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import javax.annotation.Nullable; import static com.google.common.base.Preconditions.checkNotNull;
/** /**
* The {@code TAG_List} tag. * The {@code TAG_List} tag.
@ -14,15 +13,13 @@ import javax.annotation.Nullable;
public final class ListTag extends Tag { public final class ListTag extends Tag {
private final Class<? extends Tag> type; private final Class<? extends Tag> type;
private final List<Tag> value; private final List<Tag> value;
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param type * @param type the type of tag
* the type of tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public ListTag(final Class<? extends Tag> type, final List<? extends Tag> value) { public ListTag(final Class<? extends Tag> type, final List<? extends Tag> value) {
super(); super();
@ -34,12 +31,9 @@ public final class ListTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param type the type of tag
* @param type * @param value the value of the tag
* the type of tag
* @param value
* the value of the tag
*/ */
public ListTag(final String name, final Class<? extends Tag> type, final List<? extends Tag> value) { public ListTag(final String name, final Class<? extends Tag> type, final List<? extends Tag> value) {
super(name); super(name);
@ -65,8 +59,8 @@ public final class ListTag extends Tag {
/** /**
* Create a new list tag with this tag's name and type. * Create a new list tag with this tag's name and type.
* *
* @param list * @param list the new list
* the new list *
* @return a new list tag * @return a new list tag
*/ */
public ListTag setValue(final List<Tag> list) { public ListTag setValue(final List<Tag> list) {
@ -76,97 +70,76 @@ public final class ListTag extends Tag {
/** /**
* Get the tag if it exists at the given index. * Get the tag if it exists at the given index.
* *
* @param index * @param index the index
* the index *
* @return the tag or null * @return the tag or null
*/ */
@Nullable @Nullable
public Tag getIfExists(final int index) { public Tag getIfExists(final int index) {
try { try {
return this.value.get(index); return this.value.get(index);
} } catch (final NoSuchElementException e) {
catch (final NoSuchElementException e) {
return null; return null;
} }
} }
/** /**
* Get a byte array named with the given index. * Get a byte array named with the given index. <p/> <p> If the index does not exist or its value is not a byte
* <p/> * array tag, then an empty byte array will be returned. </p>
* <p> *
* If the index does not exist or its value is not a byte array tag, then an * @param index the index
* empty byte array will be returned.
* </p>
* *
* @param index
* the index
* @return a byte array * @return a byte array
*/ */
public byte[] getByteArray(final int index) { public byte[] getByteArray(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof ByteArrayTag) { if (tag instanceof ByteArrayTag) {
return ((ByteArrayTag) tag).getValue(); return ((ByteArrayTag) tag).getValue();
} } else {
else {
return new byte[0]; return new byte[0];
} }
} }
/** /**
* Get a byte named with the given index. * Get a byte named with the given index. <p/> <p> If the index does not exist or its value is not a byte tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the index does not exist or its value is not a byte tag, then * @param index the index
* {@code 0} will be returned.
* </p>
* *
* @param index
* the index
* @return a byte * @return a byte
*/ */
public byte getByte(final int index) { public byte getByte(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else {
else {
return (byte) 0; return (byte) 0;
} }
} }
/** /**
* Get a double named with the given index. * Get a double named with the given index. <p/> <p> If the index does not exist or its value is not a double tag,
* <p/> * then {@code 0} will be returned. </p>
* <p> *
* If the index does not exist or its value is not a double tag, then * @param index the index
* {@code 0} will be returned.
* </p>
* *
* @param index
* the index
* @return a double * @return a double
*/ */
public double getDouble(final int index) { public double getDouble(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof DoubleTag) { if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue(); return ((DoubleTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a double named with the given index, even if it's another * Get a double named with the given index, even if it's another type of number. <p/> <p> If the index does not
* type of number. * exist or its value is not a number, then {@code 0} will be returned. </p>
* <p/> *
* <p> * @param index the index
* If the index does not exist or its value is not a number, then {@code 0}
* will be returned.
* </p>
* *
* @param index
* the index
* @return a double * @return a double
*/ */
public double asDouble(final int index) { public double asDouble(final int index) {
@ -174,109 +147,83 @@ public final class ListTag extends Tag {
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else if (tag instanceof ShortTag) {
else if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else if (tag instanceof IntTag) {
else if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else if (tag instanceof LongTag) {
else if (tag instanceof LongTag) {
return ((LongTag) tag).getValue(); return ((LongTag) tag).getValue();
} } else if (tag instanceof FloatTag) {
else if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue(); return ((FloatTag) tag).getValue();
} } else if (tag instanceof DoubleTag) {
else if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue(); return ((DoubleTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a float named with the given index. * Get a float named with the given index. <p/> <p> If the index does not exist or its value is not a float tag,
* <p/> * then {@code 0} will be returned. </p>
* <p> *
* If the index does not exist or its value is not a float tag, then * @param index the index
* {@code 0} will be returned.
* </p>
* *
* @param index
* the index
* @return a float * @return a float
*/ */
public float getFloat(final int index) { public float getFloat(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof FloatTag) { if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue(); return ((FloatTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a {@code int[]} named with the given index. * Get a {@code int[]} named with the given index. <p/> <p> If the index does not exist or its value is not an int
* <p/> * array tag, then an empty array will be returned. </p>
* <p> *
* If the index does not exist or its value is not an int array tag, then an * @param index the index
* empty array will be returned.
* </p>
* *
* @param index
* the index
* @return an int array * @return an int array
*/ */
public int[] getIntArray(final int index) { public int[] getIntArray(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof IntArrayTag) { if (tag instanceof IntArrayTag) {
return ((IntArrayTag) tag).getValue(); return ((IntArrayTag) tag).getValue();
} } else {
else {
return new int[0]; return new int[0];
} }
} }
/** /**
* Get an int named with the given index. * Get an int named with the given index. <p/> <p> If the index does not exist or its value is not an int tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the index does not exist or its value is not an int tag, then * @param index the index
* {@code 0} will be returned.
* </p>
* *
* @param index
* the index
* @return an int * @return an int
*/ */
public int getInt(final int index) { public int getInt(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof IntTag) { if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get an int named with the given index, even if it's another * Get an int named with the given index, even if it's another type of number. <p/> <p> If the index does not exist
* type of number. * or its value is not a number, then {@code 0} will be returned. </p>
* <p/> *
* <p> * @param index the index
* If the index does not exist or its value is not a number, then {@code 0}
* will be returned.
* </p>
* *
* @param index
* the index
* @return an int * @return an int
*/ */
public int asInt(final int index) { public int asInt(final int index) {
@ -284,91 +231,69 @@ public final class ListTag extends Tag {
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else if (tag instanceof ShortTag) {
else if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else if (tag instanceof IntTag) {
else if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else if (tag instanceof LongTag) {
else if (tag instanceof LongTag) {
return ((LongTag) tag).getValue().intValue(); return ((LongTag) tag).getValue().intValue();
} } else if (tag instanceof FloatTag) {
else if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue().intValue(); return ((FloatTag) tag).getValue().intValue();
} } else if (tag instanceof DoubleTag) {
else if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue().intValue(); return ((DoubleTag) tag).getValue().intValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a list of tags named with the given index. * Get a list of tags named with the given index. <p/> <p> If the index does not exist or its value is not a list
* <p/> * tag, then an empty list will be returned. </p>
* <p> *
* If the index does not exist or its value is not a list tag, then an empty * @param index the index
* list will be returned.
* </p>
* *
* @param index
* the index
* @return a list of tags * @return a list of tags
*/ */
public List<Tag> getList(final int index) { public List<Tag> getList(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof ListTag) { if (tag instanceof ListTag) {
return ((ListTag) tag).getValue(); return ((ListTag) tag).getValue();
} } else {
else {
return Collections.emptyList(); return Collections.emptyList();
} }
} }
/** /**
* Get a {@code TagList} named with the given index. * Get a {@code TagList} named with the given index. <p/> <p> If the index does not exist or its value is not a list
* <p/> * tag, then an empty tag list will be returned. </p>
* <p> *
* If the index does not exist or its value is not a list tag, then an empty * @param index the index
* tag list will be returned.
* </p>
* *
* @param index
* the index
* @return a tag list instance * @return a tag list instance
*/ */
public ListTag getListTag(final int index) { public ListTag getListTag(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof ListTag) { if (tag instanceof ListTag) {
return (ListTag) tag; return (ListTag) tag;
} } else {
else { return new ListTag(StringTag.class, Collections.<Tag>emptyList());
return new ListTag(StringTag.class, Collections.<Tag> emptyList());
} }
} }
/** /**
* Get a list of tags named with the given index. * Get a list of tags named with the given index. <p/> <p> If the index does not exist or its value is not a list
* <p/> * tag, then an empty list will be returned. If the given index references a list but the list of of a different
* <p> * type, then an empty list will also be returned. </p>
* If the index does not exist or its value is not a list tag, then an empty *
* list will be returned. If the given index references a list but the list * @param index the index
* of of a different type, then an empty list will also be returned. * @param listType the class of the contained type
* </p> * @param <T> the NBT type
* *
* @param index
* the index
* @param listType
* the class of the contained type
* @param <T>
* the NBT type
* @return a list of tags * @return a list of tags
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -378,49 +303,37 @@ public final class ListTag extends Tag {
final ListTag listTag = (ListTag) tag; final ListTag listTag = (ListTag) tag;
if (listTag.getType().equals(listType)) { if (listTag.getType().equals(listType)) {
return (List<T>) listTag.getValue(); return (List<T>) listTag.getValue();
} } else {
else {
return Collections.emptyList(); return Collections.emptyList();
} }
} } else {
else {
return Collections.emptyList(); return Collections.emptyList();
} }
} }
/** /**
* Get a long named with the given index. * Get a long named with the given index. <p/> <p> If the index does not exist or its value is not a long tag, then
* <p/> * {@code 0} will be returned. </p>
* <p> *
* If the index does not exist or its value is not a long tag, then * @param index the index
* {@code 0} will be returned.
* </p>
* *
* @param index
* the index
* @return a long * @return a long
*/ */
public long getLong(final int index) { public long getLong(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof LongTag) { if (tag instanceof LongTag) {
return ((LongTag) tag).getValue(); return ((LongTag) tag).getValue();
} } else {
else {
return 0L; return 0L;
} }
} }
/** /**
* Get a long named with the given index, even if it's another * Get a long named with the given index, even if it's another type of number. <p/> <p> If the index does not exist
* type of number. * or its value is not a number, then {@code 0} will be returned. </p>
* <p/> *
* <p> * @param index the index
* If the index does not exist or its value is not a number, then {@code 0}
* will be returned.
* </p>
* *
* @param index
* the index
* @return a long * @return a long
*/ */
public long asLong(final int index) { public long asLong(final int index) {
@ -428,72 +341,56 @@ public final class ListTag extends Tag {
if (tag instanceof ByteTag) { if (tag instanceof ByteTag) {
return ((ByteTag) tag).getValue(); return ((ByteTag) tag).getValue();
} } else if (tag instanceof ShortTag) {
else if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else if (tag instanceof IntTag) {
else if (tag instanceof IntTag) {
return ((IntTag) tag).getValue(); return ((IntTag) tag).getValue();
} } else if (tag instanceof LongTag) {
else if (tag instanceof LongTag) {
return ((LongTag) tag).getValue(); return ((LongTag) tag).getValue();
} } else if (tag instanceof FloatTag) {
else if (tag instanceof FloatTag) {
return ((FloatTag) tag).getValue().longValue(); return ((FloatTag) tag).getValue().longValue();
} } else if (tag instanceof DoubleTag) {
else if (tag instanceof DoubleTag) {
return ((DoubleTag) tag).getValue().longValue(); return ((DoubleTag) tag).getValue().longValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a short named with the given index. * Get a short named with the given index. <p/> <p> If the index does not exist or its value is not a short tag,
* <p/> * then {@code 0} will be returned. </p>
* <p> *
* If the index does not exist or its value is not a short tag, then * @param index the index
* {@code 0} will be returned.
* </p>
* *
* @param index
* the index
* @return a short * @return a short
*/ */
public short getShort(final int index) { public short getShort(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof ShortTag) { if (tag instanceof ShortTag) {
return ((ShortTag) tag).getValue(); return ((ShortTag) tag).getValue();
} } else {
else {
return 0; return 0;
} }
} }
/** /**
* Get a string named with the given index. * Get a string named with the given index. <p/> <p> If the index does not exist or its value is not a string tag,
* <p/> * then {@code ""} will be returned. </p>
* <p> *
* If the index does not exist or its value is not a string tag, then * @param index the index
* {@code ""} will be returned.
* </p>
* *
* @param index
* the index
* @return a string * @return a string
*/ */
public String getString(final int index) { public String getString(final int index) {
final Tag tag = getIfExists(index); final Tag tag = getIfExists(index);
if (tag instanceof StringTag) { if (tag instanceof StringTag) {
return ((StringTag) tag).getValue(); return ((StringTag) tag).getValue();
} } else {
else {
return ""; return "";
} }
} }

View File

@ -1,25 +1,24 @@
package com.intellectualcrafters.jnbt; package com.intellectualcrafters.jnbt;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
/** /**
* Helps create list tags. * Helps create list tags.
*/ */
public class ListTagBuilder { public class ListTagBuilder {
private final Class<? extends Tag> type; private final Class<? extends Tag> type;
private final List<Tag> entries; private final List<Tag> entries;
/** /**
* Create a new instance. * Create a new instance.
* *
* @param type * @param type of tag contained in this list
* of tag contained in this list
*/ */
ListTagBuilder(final Class<? extends Tag> type) { ListTagBuilder(final Class<? extends Tag> type) {
checkNotNull(type); checkNotNull(type);
@ -64,8 +63,8 @@ public class ListTagBuilder {
/** /**
* Add the given tag. * Add the given tag.
* *
* @param value * @param value the tag
* the tag *
* @return this object * @return this object
*/ */
public ListTagBuilder add(final Tag value) { public ListTagBuilder add(final Tag value) {
@ -80,8 +79,8 @@ public class ListTagBuilder {
/** /**
* Add all the tags in the given list. * Add all the tags in the given list.
* *
* @param value * @param value a list of tags
* a list of tags *
* @return this object * @return this object
*/ */
public ListTagBuilder addAll(final Collection<? extends Tag> value) { public ListTagBuilder addAll(final Collection<? extends Tag> value) {
@ -104,8 +103,8 @@ public class ListTagBuilder {
/** /**
* Build a new list tag with this builder's entries. * Build a new list tag with this builder's entries.
* *
* @param name * @param name the name of the tag
* the name of the tag *
* @return the created list tag * @return the created list tag
*/ */
public ListTag build(final String name) { public ListTag build(final String name) {

View File

@ -10,8 +10,7 @@ public final class LongTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public LongTag(final long value) { public LongTag(final long value) {
super(); super();
@ -21,10 +20,8 @@ public final class LongTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public LongTag(final String name, final long value) { public LongTag(final String name, final long value) {
super(name); super(name);

View File

@ -30,7 +30,7 @@ public final class NBTConstants {
public static final Charset CHARSET = Charset.forName("UTF-8"); public static final Charset CHARSET = Charset.forName("UTF-8");
public static final int TYPE_END = 0, TYPE_BYTE = 1, TYPE_SHORT = 2, TYPE_INT = 3, TYPE_LONG = 4, TYPE_FLOAT = 5, TYPE_DOUBLE = 6, TYPE_BYTE_ARRAY = 7, TYPE_STRING = 8, TYPE_LIST = 9, TYPE_COMPOUND = 10, TYPE_INT_ARRAY = 11; public static final int TYPE_END = 0, TYPE_BYTE = 1, TYPE_SHORT = 2, TYPE_INT = 3, TYPE_LONG = 4, TYPE_FLOAT = 5, TYPE_DOUBLE = 6, TYPE_BYTE_ARRAY = 7, TYPE_STRING = 8, TYPE_LIST = 9, TYPE_COMPOUND = 10, TYPE_INT_ARRAY = 11;
/** /**
* Default private constructor. * Default private constructor.
@ -42,11 +42,11 @@ public final class NBTConstants {
/** /**
* Convert a type ID to its corresponding {@link Tag} class. * Convert a type ID to its corresponding {@link Tag} class.
* *
* @param id * @param id type ID
* type ID *
* @return tag class * @return tag class
* @throws IllegalArgumentException *
* thrown if the tag ID is not valid * @throws IllegalArgumentException thrown if the tag ID is not valid
*/ */
public static Class<? extends Tag> getClassFromType(final int id) { public static Class<? extends Tag> getClassFromType(final int id) {
switch (id) { switch (id) {

View File

@ -10,28 +10,20 @@ import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* This class reads <strong>NBT</strong>, or <strong>Named Binary Tag</strong> * This class reads <strong>NBT</strong>, or <strong>Named Binary Tag</strong> streams, and produces an object graph of
* streams, and produces an object graph of subclasses of the {@code Tag} * subclasses of the {@code Tag} object. <p/> <p> The NBT format was created by Markus Persson, and the specification
* object. * may be found at <a href="http://www.minecraft.net/docs/NBT.txt"> http://www.minecraft.net/docs/NBT.txt</a>. </p>
* <p/>
* <p>
* The NBT format was created by Markus Persson, and the specification may be
* found at <a href="http://www.minecraft.net/docs/NBT.txt">
* http://www.minecraft.net/docs/NBT.txt</a>.
* </p>
*/ */
public final class NBTInputStream implements Closeable { public final class NBTInputStream implements Closeable {
private final DataInputStream is; private final DataInputStream is;
/** /**
* Creates a new {@code NBTInputStream}, which will source its data * Creates a new {@code NBTInputStream}, which will source its data from the specified input stream.
* from the specified input stream.
* *
* @param is * @param is the input stream
* the input stream *
* @throws IOException * @throws IOException if an I/O error occurs
* if an I/O error occurs
*/ */
public NBTInputStream(final InputStream is) throws IOException { public NBTInputStream(final InputStream is) throws IOException {
this.is = new DataInputStream(is); this.is = new DataInputStream(is);
@ -41,8 +33,8 @@ public final class NBTInputStream implements Closeable {
* Reads an NBT tag from the stream. * Reads an NBT tag from the stream.
* *
* @return The tag that was read. * @return The tag that was read.
* @throws IOException *
* if an I/O error occurs. * @throws IOException if an I/O error occurs.
*/ */
public Tag readTag() throws IOException { public Tag readTag() throws IOException {
return readTag(0); return readTag(0);
@ -51,11 +43,11 @@ public final class NBTInputStream implements Closeable {
/** /**
* Reads an NBT from the stream. * Reads an NBT from the stream.
* *
* @param depth * @param depth the depth of this tag
* the depth of this tag *
* @return The tag that was read. * @return The tag that was read.
* @throws IOException *
* if an I/O error occurs. * @throws IOException if an I/O error occurs.
*/ */
private Tag readTag(final int depth) throws IOException { private Tag readTag(final int depth) throws IOException {
final int type = this.is.readByte() & 0xFF; final int type = this.is.readByte() & 0xFF;
@ -66,8 +58,7 @@ public final class NBTInputStream implements Closeable {
final byte[] nameBytes = new byte[nameLength]; final byte[] nameBytes = new byte[nameLength];
this.is.readFully(nameBytes); this.is.readFully(nameBytes);
name = new String(nameBytes, NBTConstants.CHARSET); name = new String(nameBytes, NBTConstants.CHARSET);
} } else {
else {
name = ""; name = "";
} }
@ -77,23 +68,20 @@ public final class NBTInputStream implements Closeable {
/** /**
* Reads the payload of a tag, given the name and type. * Reads the payload of a tag, given the name and type.
* *
* @param type * @param type the type
* the type * @param name the name
* @param name * @param depth the depth
* the name *
* @param depth
* the depth
* @return the tag * @return the tag
* @throws IOException *
* if an I/O error occurs. * @throws IOException if an I/O error occurs.
*/ */
private Tag readTagPayload(final int type, final String name, final int depth) throws IOException { private Tag readTagPayload(final int type, final String name, final int depth) throws IOException {
switch (type) { switch (type) {
case NBTConstants.TYPE_END: case NBTConstants.TYPE_END:
if (depth == 0) { if (depth == 0) {
throw new IOException("TAG_End found without a TAG_Compound/TAG_List tag preceding it."); throw new IOException("TAG_End found without a TAG_Compound/TAG_List tag preceding it.");
} } else {
else {
return new EndTag(); return new EndTag();
} }
case NBTConstants.TYPE_BYTE: case NBTConstants.TYPE_BYTE:
@ -138,8 +126,7 @@ public final class NBTInputStream implements Closeable {
final Tag tag = readTag(depth + 1); final Tag tag = readTag(depth + 1);
if (tag instanceof EndTag) { if (tag instanceof EndTag) {
break; break;
} } else {
else {
tagMap.put(tag.getName(), tag); tagMap.put(tag.getName(), tag);
} }
} }

View File

@ -28,15 +28,9 @@ import java.io.OutputStream;
import java.util.List; import java.util.List;
/** /**
* <p> * <p> This class writes <strong>NBT</strong>, or <strong>Named Binary Tag</strong> <code>Tag</code> objects to an
* This class writes <strong>NBT</strong>, or <strong>Named Binary Tag</strong> * underlying <code>OutputStream</code>. </p> <p/> <p> The NBT format was created by Markus Persson, and the
* <code>Tag</code> objects to an underlying <code>OutputStream</code>. * specification may be found at <a href="http://www.minecraft.net/docs/NBT.txt"> http://www.minecraft.net/docs/NBT.txt</a>.
* </p>
* <p/>
* <p>
* The NBT format was created by Markus Persson, and the specification may be
* found at <a href="http://www.minecraft.net/docs/NBT.txt">
* http://www.minecraft.net/docs/NBT.txt</a>.
* </p> * </p>
* *
* @author Graham Edgecombe * @author Graham Edgecombe
@ -49,13 +43,11 @@ public final class NBTOutputStream implements Closeable {
private final DataOutputStream os; private final DataOutputStream os;
/** /**
* Creates a new <code>NBTOutputStream</code>, which will write data to the * Creates a new <code>NBTOutputStream</code>, which will write data to the specified underlying output stream.
* specified underlying output stream.
* *
* @param os * @param os The output stream.
* The output stream. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
public NBTOutputStream(final OutputStream os) throws IOException { public NBTOutputStream(final OutputStream os) throws IOException {
this.os = new DataOutputStream(os); this.os = new DataOutputStream(os);
@ -64,10 +56,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a tag. * Writes a tag.
* *
* @param tag * @param tag The tag to write.
* The tag to write. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
public void writeTag(final Tag tag) throws IOException { public void writeTag(final Tag tag) throws IOException {
final int type = NBTUtils.getTypeCode(tag.getClass()); final int type = NBTUtils.getTypeCode(tag.getClass());
@ -88,10 +79,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes tag payload. * Writes tag payload.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeTagPayload(final Tag tag) throws IOException { private void writeTagPayload(final Tag tag) throws IOException {
final int type = NBTUtils.getTypeCode(tag.getClass()); final int type = NBTUtils.getTypeCode(tag.getClass());
@ -140,10 +130,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Byte</code> tag. * Writes a <code>TAG_Byte</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeByteTagPayload(final ByteTag tag) throws IOException { private void writeByteTagPayload(final ByteTag tag) throws IOException {
this.os.writeByte(tag.getValue()); this.os.writeByte(tag.getValue());
@ -152,10 +141,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Byte_Array</code> tag. * Writes a <code>TAG_Byte_Array</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeByteArrayTagPayload(final ByteArrayTag tag) throws IOException { private void writeByteArrayTagPayload(final ByteArrayTag tag) throws IOException {
final byte[] bytes = tag.getValue(); final byte[] bytes = tag.getValue();
@ -166,10 +154,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Compound</code> tag. * Writes a <code>TAG_Compound</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeCompoundTagPayload(final CompoundTag tag) throws IOException { private void writeCompoundTagPayload(final CompoundTag tag) throws IOException {
for (final Tag childTag : tag.getValue().values()) { for (final Tag childTag : tag.getValue().values()) {
@ -181,10 +168,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_List</code> tag. * Writes a <code>TAG_List</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeListTagPayload(final ListTag tag) throws IOException { private void writeListTagPayload(final ListTag tag) throws IOException {
final Class<? extends Tag> clazz = tag.getType(); final Class<? extends Tag> clazz = tag.getType();
@ -201,10 +187,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_String</code> tag. * Writes a <code>TAG_String</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeStringTagPayload(final StringTag tag) throws IOException { private void writeStringTagPayload(final StringTag tag) throws IOException {
final byte[] bytes = tag.getValue().getBytes(NBTConstants.CHARSET); final byte[] bytes = tag.getValue().getBytes(NBTConstants.CHARSET);
@ -215,10 +200,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Double</code> tag. * Writes a <code>TAG_Double</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeDoubleTagPayload(final DoubleTag tag) throws IOException { private void writeDoubleTagPayload(final DoubleTag tag) throws IOException {
this.os.writeDouble(tag.getValue()); this.os.writeDouble(tag.getValue());
@ -227,10 +211,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Float</code> tag. * Writes a <code>TAG_Float</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeFloatTagPayload(final FloatTag tag) throws IOException { private void writeFloatTagPayload(final FloatTag tag) throws IOException {
this.os.writeFloat(tag.getValue()); this.os.writeFloat(tag.getValue());
@ -239,10 +222,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Long</code> tag. * Writes a <code>TAG_Long</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeLongTagPayload(final LongTag tag) throws IOException { private void writeLongTagPayload(final LongTag tag) throws IOException {
this.os.writeLong(tag.getValue()); this.os.writeLong(tag.getValue());
@ -251,10 +233,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Int</code> tag. * Writes a <code>TAG_Int</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeIntTagPayload(final IntTag tag) throws IOException { private void writeIntTagPayload(final IntTag tag) throws IOException {
this.os.writeInt(tag.getValue()); this.os.writeInt(tag.getValue());
@ -263,10 +244,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Short</code> tag. * Writes a <code>TAG_Short</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeShortTagPayload(final ShortTag tag) throws IOException { private void writeShortTagPayload(final ShortTag tag) throws IOException {
this.os.writeShort(tag.getValue()); this.os.writeShort(tag.getValue());
@ -275,10 +255,9 @@ public final class NBTOutputStream implements Closeable {
/** /**
* Writes a <code>TAG_Empty</code> tag. * Writes a <code>TAG_Empty</code> tag.
* *
* @param tag * @param tag The tag.
* The tag. *
* @throws IOException * @throws IOException if an I/O error occurs.
* if an I/O error occurs.
*/ */
private void writeEndTagPayload(final EndTag tag) { private void writeEndTagPayload(final EndTag tag) {
/* empty */ /* empty */

View File

@ -16,48 +16,36 @@ public final class NBTUtils {
/** /**
* Gets the type name of a tag. * Gets the type name of a tag.
* *
* @param clazz * @param clazz the tag class
* the tag class *
* @return The type name. * @return The type name.
*/ */
public static String getTypeName(final Class<? extends Tag> clazz) { public static String getTypeName(final Class<? extends Tag> clazz) {
if (clazz.equals(ByteArrayTag.class)) { if (clazz.equals(ByteArrayTag.class)) {
return "TAG_Byte_Array"; return "TAG_Byte_Array";
} } else if (clazz.equals(ByteTag.class)) {
else if (clazz.equals(ByteTag.class)) {
return "TAG_Byte"; return "TAG_Byte";
} } else if (clazz.equals(CompoundTag.class)) {
else if (clazz.equals(CompoundTag.class)) {
return "TAG_Compound"; return "TAG_Compound";
} } else if (clazz.equals(DoubleTag.class)) {
else if (clazz.equals(DoubleTag.class)) {
return "TAG_Double"; return "TAG_Double";
} } else if (clazz.equals(EndTag.class)) {
else if (clazz.equals(EndTag.class)) {
return "TAG_End"; return "TAG_End";
} } else if (clazz.equals(FloatTag.class)) {
else if (clazz.equals(FloatTag.class)) {
return "TAG_Float"; return "TAG_Float";
} } else if (clazz.equals(IntTag.class)) {
else if (clazz.equals(IntTag.class)) {
return "TAG_Int"; return "TAG_Int";
} } else if (clazz.equals(ListTag.class)) {
else if (clazz.equals(ListTag.class)) {
return "TAG_List"; return "TAG_List";
} } else if (clazz.equals(LongTag.class)) {
else if (clazz.equals(LongTag.class)) {
return "TAG_Long"; return "TAG_Long";
} } else if (clazz.equals(ShortTag.class)) {
else if (clazz.equals(ShortTag.class)) {
return "TAG_Short"; return "TAG_Short";
} } else if (clazz.equals(StringTag.class)) {
else if (clazz.equals(StringTag.class)) {
return "TAG_String"; return "TAG_String";
} } else if (clazz.equals(IntArrayTag.class)) {
else if (clazz.equals(IntArrayTag.class)) {
return "TAG_Int_Array"; return "TAG_Int_Array";
} } else {
else {
throw new IllegalArgumentException("Invalid tag classs (" + clazz.getName() + ")."); throw new IllegalArgumentException("Invalid tag classs (" + clazz.getName() + ").");
} }
} }
@ -65,50 +53,38 @@ public final class NBTUtils {
/** /**
* Gets the type code of a tag class. * Gets the type code of a tag class.
* *
* @param clazz * @param clazz the tag class
* the tag class *
* @return The type code. * @return The type code.
* @throws IllegalArgumentException *
* if the tag class is invalid. * @throws IllegalArgumentException if the tag class is invalid.
*/ */
public static int getTypeCode(final Class<? extends Tag> clazz) { public static int getTypeCode(final Class<? extends Tag> clazz) {
if (clazz.equals(ByteArrayTag.class)) { if (clazz.equals(ByteArrayTag.class)) {
return NBTConstants.TYPE_BYTE_ARRAY; return NBTConstants.TYPE_BYTE_ARRAY;
} } else if (clazz.equals(ByteTag.class)) {
else if (clazz.equals(ByteTag.class)) {
return NBTConstants.TYPE_BYTE; return NBTConstants.TYPE_BYTE;
} } else if (clazz.equals(CompoundTag.class)) {
else if (clazz.equals(CompoundTag.class)) {
return NBTConstants.TYPE_COMPOUND; return NBTConstants.TYPE_COMPOUND;
} } else if (clazz.equals(DoubleTag.class)) {
else if (clazz.equals(DoubleTag.class)) {
return NBTConstants.TYPE_DOUBLE; return NBTConstants.TYPE_DOUBLE;
} } else if (clazz.equals(EndTag.class)) {
else if (clazz.equals(EndTag.class)) {
return NBTConstants.TYPE_END; return NBTConstants.TYPE_END;
} } else if (clazz.equals(FloatTag.class)) {
else if (clazz.equals(FloatTag.class)) {
return NBTConstants.TYPE_FLOAT; return NBTConstants.TYPE_FLOAT;
} } else if (clazz.equals(IntTag.class)) {
else if (clazz.equals(IntTag.class)) {
return NBTConstants.TYPE_INT; return NBTConstants.TYPE_INT;
} } else if (clazz.equals(ListTag.class)) {
else if (clazz.equals(ListTag.class)) {
return NBTConstants.TYPE_LIST; return NBTConstants.TYPE_LIST;
} } else if (clazz.equals(LongTag.class)) {
else if (clazz.equals(LongTag.class)) {
return NBTConstants.TYPE_LONG; return NBTConstants.TYPE_LONG;
} } else if (clazz.equals(ShortTag.class)) {
else if (clazz.equals(ShortTag.class)) {
return NBTConstants.TYPE_SHORT; return NBTConstants.TYPE_SHORT;
} } else if (clazz.equals(StringTag.class)) {
else if (clazz.equals(StringTag.class)) {
return NBTConstants.TYPE_STRING; return NBTConstants.TYPE_STRING;
} } else if (clazz.equals(IntArrayTag.class)) {
else if (clazz.equals(IntArrayTag.class)) {
return NBTConstants.TYPE_INT_ARRAY; return NBTConstants.TYPE_INT_ARRAY;
} } else {
else {
throw new IllegalArgumentException("Invalid tag classs (" + clazz.getName() + ")."); throw new IllegalArgumentException("Invalid tag classs (" + clazz.getName() + ").");
} }
} }
@ -116,11 +92,11 @@ public final class NBTUtils {
/** /**
* Gets the class of a type of tag. * Gets the class of a type of tag.
* *
* @param type * @param type the type
* the type *
* @return The class. * @return The class.
* @throws IllegalArgumentException *
* if the tag type is invalid. * @throws IllegalArgumentException if the tag type is invalid.
*/ */
public static Class<? extends Tag> getTypeClass(final int type) { public static Class<? extends Tag> getTypeClass(final int type) {
switch (type) { switch (type) {
@ -156,12 +132,10 @@ public final class NBTUtils {
/** /**
* Get child tag of a NBT structure. * Get child tag of a NBT structure.
* *
* @param items * @param items the map to read from
* the map to read from * @param key the key to look for
* @param key * @param expected the expected NBT class type
* the key to look for *
* @param expected
* the expected NBT class type
* @return child tag * @return child tag
*/ */
public static <T extends Tag> T getChildTag(final Map<String, Tag> items, final String key, final Class<T> expected) throws IllegalArgumentException { public static <T extends Tag> T getChildTag(final Map<String, Tag> items, final String key, final Class<T> expected) throws IllegalArgumentException {

View File

@ -31,8 +31,7 @@ public final class ShortTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public ShortTag(final short value) { public ShortTag(final short value) {
super(); super();
@ -42,10 +41,8 @@ public final class ShortTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public ShortTag(final String name, final short value) { public ShortTag(final String name, final short value) {
super(name); super(name);

View File

@ -12,8 +12,7 @@ public final class StringTag extends Tag {
/** /**
* Creates the tag with an empty name. * Creates the tag with an empty name.
* *
* @param value * @param value the value of the tag
* the value of the tag
*/ */
public StringTag(final String value) { public StringTag(final String value) {
super(); super();
@ -24,10 +23,8 @@ public final class StringTag extends Tag {
/** /**
* Creates the tag. * Creates the tag.
* *
* @param name * @param name the name of the tag
* the name of the tag * @param value the value of the tag
* @param value
* the value of the tag
*/ */
public StringTag(final String name, final String value) { public StringTag(final String name, final String value) {
super(name); super(name);

View File

@ -38,8 +38,7 @@ public abstract class Tag {
/** /**
* Creates the tag with the specified name. * Creates the tag with the specified name.
* *
* @param name * @param name the name
* the name
*/ */
Tag(String name) { Tag(String name) {
if (name == null) { if (name == null) {

View File

@ -1,21 +1,18 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
/** /**
* This provides static methods to convert comma delimited text into a * This provides static methods to convert comma delimited text into a JSONArray, and to covert a JSONArray into comma
* JSONArray, and to covert a JSONArray into comma delimited text. Comma * delimited text. Comma delimited text is a very popular format for data interchange. It is understood by most
* delimited text is a very popular format for data interchange. It is * database, spreadsheet, and organizer programs.
* understood by most database, spreadsheet, and organizer programs.
* <p/> * <p/>
* Each row of text represents a row in a table or a data record. Each row ends * Each row of text represents a row in a table or a data record. Each row ends with a NEWLINE character. Each row
* with a NEWLINE character. Each row contains one or more values. Values are * contains one or more values. Values are separated by commas. A value can contain any character except for comma,
* separated by commas. A value can contain any character except for comma,
* unless is is wrapped in single quotes or double quotes. * unless is is wrapped in single quotes or double quotes.
* <p/> * <p/>
* The first row usually contains the names of the columns. * The first row usually contains the names of the columns.
* <p/> * <p/>
* A comma delimited list can be converted into a JSONArray of JSONObjects. The * A comma delimited list can be converted into a JSONArray of JSONObjects. The names for the elements in the
* names for the elements in the JSONObjects can be taken from the names in the * JSONObjects can be taken from the names in the first row.
* first row.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -23,14 +20,13 @@ package com.intellectualcrafters.json;
public class CDL { public class CDL {
/** /**
* Get the next value. The value can be wrapped in quotes. The value can * Get the next value. The value can be wrapped in quotes. The value can be empty.
* be empty. *
* @param x A JSONTokener of the source text.
* *
* @param x
* A JSONTokener of the source text.
* @return The value string, or null if empty. * @return The value string, or null if empty.
* @throws JSONException *
* if the quoted string is badly formed. * @throws JSONException if the quoted string is badly formed.
*/ */
private static String getValue(final JSONTokener x) throws JSONException { private static String getValue(final JSONTokener x) throws JSONException {
char c; char c;
@ -38,8 +34,7 @@ public class CDL {
StringBuffer sb; StringBuffer sb;
do { do {
c = x.next(); c = x.next();
} } while ((c == ' ') || (c == '\t'));
while ((c == ' ') || (c == '\t'));
switch (c) { switch (c) {
case 0: case 0:
return null; return null;
@ -47,7 +42,7 @@ public class CDL {
case '\'': case '\'':
q = c; q = c;
sb = new StringBuffer(); sb = new StringBuffer();
for (;;) { for (; ; ) {
c = x.next(); c = x.next();
if (c == q) { if (c == q) {
break; break;
@ -70,21 +65,22 @@ public class CDL {
/** /**
* Produce a JSONArray of strings from a row of comma delimited values. * Produce a JSONArray of strings from a row of comma delimited values.
* *
* @param x * @param x A JSONTokener of the source text.
* A JSONTokener of the source text. *
* @return A JSONArray of strings. * @return A JSONArray of strings.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray rowToJSONArray(final JSONTokener x) throws JSONException { public static JSONArray rowToJSONArray(final JSONTokener x) throws JSONException {
final JSONArray ja = new JSONArray(); final JSONArray ja = new JSONArray();
for (;;) { for (; ; ) {
final String value = getValue(x); final String value = getValue(x);
char c = x.next(); char c = x.next();
if ((value == null) || ((ja.length() == 0) && (value.length() == 0) && (c != ','))) { if ((value == null) || ((ja.length() == 0) && (value.length() == 0) && (c != ','))) {
return null; return null;
} }
ja.put(value); ja.put(value);
for (;;) { for (; ; ) {
if (c == ',') { if (c == ',') {
break; break;
} }
@ -100,17 +96,15 @@ public class CDL {
} }
/** /**
* Produce a JSONObject from a row of comma delimited text, using a * Produce a JSONObject from a row of comma delimited text, using a parallel JSONArray of strings to provides the
* parallel JSONArray of strings to provides the names of the elements. * names of the elements.
*
* @param names A JSONArray of names. This is commonly obtained from the first row of a comma delimited text file
* using the rowToJSONArray method.
* @param x A JSONTokener of the source text.
* *
* @param names
* A JSONArray of names. This is commonly obtained from the
* first row of a comma delimited text file using the
* rowToJSONArray
* method.
* @param x
* A JSONTokener of the source text.
* @return A JSONObject combining the names and values. * @return A JSONObject combining the names and values.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject rowToJSONObject(final JSONArray names, final JSONTokener x) throws JSONException { public static JSONObject rowToJSONObject(final JSONArray names, final JSONTokener x) throws JSONException {
@ -119,12 +113,11 @@ public class CDL {
} }
/** /**
* Produce a comma delimited text row from a JSONArray. Values containing * Produce a comma delimited text row from a JSONArray. Values containing the comma character will be quoted.
* the comma character will be quoted. Troublesome characters may be * Troublesome characters may be removed.
* removed. *
* @param ja A JSONArray of strings.
* *
* @param ja
* A JSONArray of strings.
* @return A string ending in NEWLINE. * @return A string ending in NEWLINE.
*/ */
public static String rowToString(final JSONArray ja) { public static String rowToString(final JSONArray ja) {
@ -146,8 +139,7 @@ public class CDL {
} }
} }
sb.append('"'); sb.append('"');
} } else {
else {
sb.append(string); sb.append(string);
} }
} }
@ -157,12 +149,12 @@ public class CDL {
} }
/** /**
* Produce a JSONArray of JSONObjects from a comma delimited text string, * Produce a JSONArray of JSONObjects from a comma delimited text string, using the first row as a source of names.
* using the first row as a source of names. *
* @param string The comma delimited text.
* *
* @param string
* The comma delimited text.
* @return A JSONArray of JSONObjects. * @return A JSONArray of JSONObjects.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray toJSONArray(final String string) throws JSONException { public static JSONArray toJSONArray(final String string) throws JSONException {
@ -170,12 +162,12 @@ public class CDL {
} }
/** /**
* Produce a JSONArray of JSONObjects from a comma delimited text string, * Produce a JSONArray of JSONObjects from a comma delimited text string, using the first row as a source of names.
* using the first row as a source of names. *
* @param x The JSONTokener containing the comma delimited text.
* *
* @param x
* The JSONTokener containing the comma delimited text.
* @return A JSONArray of JSONObjects. * @return A JSONArray of JSONObjects.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray toJSONArray(final JSONTokener x) throws JSONException { public static JSONArray toJSONArray(final JSONTokener x) throws JSONException {
@ -183,14 +175,14 @@ public class CDL {
} }
/** /**
* Produce a JSONArray of JSONObjects from a comma delimited text string * Produce a JSONArray of JSONObjects from a comma delimited text string using a supplied JSONArray as the source of
* using a supplied JSONArray as the source of element names. * element names.
*
* @param names A JSONArray of strings.
* @param string The comma delimited text.
* *
* @param names
* A JSONArray of strings.
* @param string
* The comma delimited text.
* @return A JSONArray of JSONObjects. * @return A JSONArray of JSONObjects.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray toJSONArray(final JSONArray names, final String string) throws JSONException { public static JSONArray toJSONArray(final JSONArray names, final String string) throws JSONException {
@ -198,14 +190,14 @@ public class CDL {
} }
/** /**
* Produce a JSONArray of JSONObjects from a comma delimited text string * Produce a JSONArray of JSONObjects from a comma delimited text string using a supplied JSONArray as the source of
* using a supplied JSONArray as the source of element names. * element names.
*
* @param names A JSONArray of strings.
* @param x A JSONTokener of the source text.
* *
* @param names
* A JSONArray of strings.
* @param x
* A JSONTokener of the source text.
* @return A JSONArray of JSONObjects. * @return A JSONArray of JSONObjects.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray toJSONArray(final JSONArray names, final JSONTokener x) throws JSONException { public static JSONArray toJSONArray(final JSONArray names, final JSONTokener x) throws JSONException {
@ -213,7 +205,7 @@ public class CDL {
return null; return null;
} }
final JSONArray ja = new JSONArray(); final JSONArray ja = new JSONArray();
for (;;) { for (; ; ) {
final JSONObject jo = rowToJSONObject(names, x); final JSONObject jo = rowToJSONObject(names, x);
if (jo == null) { if (jo == null) {
break; break;
@ -227,13 +219,13 @@ public class CDL {
} }
/** /**
* Produce a comma delimited text from a JSONArray of JSONObjects. The * Produce a comma delimited text from a JSONArray of JSONObjects. The first row will be a list of names obtained by
* first row will be a list of names obtained by inspecting the first * inspecting the first JSONObject.
* JSONObject. *
* @param ja A JSONArray of JSONObjects.
* *
* @param ja
* A JSONArray of JSONObjects.
* @return A comma delimited text. * @return A comma delimited text.
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final JSONArray ja) throws JSONException { public static String toString(final JSONArray ja) throws JSONException {
@ -248,15 +240,14 @@ public class CDL {
} }
/** /**
* Produce a comma delimited text from a JSONArray of JSONObjects using * Produce a comma delimited text from a JSONArray of JSONObjects using a provided list of names. The list of names
* a provided list of names. The list of names is not included in the * is not included in the output.
* output. *
* @param names A JSONArray of strings.
* @param ja A JSONArray of JSONObjects.
* *
* @param names
* A JSONArray of strings.
* @param ja
* A JSONArray of JSONObjects.
* @return A comma delimited text. * @return A comma delimited text.
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final JSONArray names, final JSONArray ja) throws JSONException { public static String toString(final JSONArray names, final JSONArray ja) throws JSONException {

View File

@ -22,8 +22,8 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
/** /**
* Convert a web browser cookie specification to a JSONObject and back. * Convert a web browser cookie specification to a JSONObject and back. JSON and Cookies are both notations for
* JSON and Cookies are both notations for name/value pairs. * name/value pairs.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -31,17 +31,14 @@ package com.intellectualcrafters.json;
public class Cookie { public class Cookie {
/** /**
* Produce a copy of a string in which the characters '+', '%', '=', ';' * Produce a copy of a string in which the characters '+', '%', '=', ';' and control characters are replaced with
* and control characters are replaced with "%hh". This is a gentle form * "%hh". This is a gentle form of URL encoding, attempting to cause as little distortion to the string as possible.
* of URL encoding, attempting to cause as little distortion to the * The characters '=' and ';' are meta characters in cookies. By convention, they are escaped using the
* string as possible. The characters '=' and ';' are meta characters in * URL-encoding. This is only a convention, not a standard. Often, cookies are expected to have encoded values. We
* cookies. By convention, they are escaped using the URL-encoding. This is * encode '=' and ';' because we must. We encode '%' and '+' because they are meta characters in URL encoding.
* only a convention, not a standard. Often, cookies are expected to have *
* encoded values. We encode '=' and ';' because we must. We encode '%' and * @param string The source string.
* '+' because they are meta characters in URL encoding.
* *
* @param string
* The source string.
* @return The escaped result. * @return The escaped result.
*/ */
public static String escape(final String string) { public static String escape(final String string) {
@ -55,8 +52,7 @@ public class Cookie {
sb.append('%'); sb.append('%');
sb.append(Character.forDigit((char) ((c >>> 4) & 0x0f), 16)); sb.append(Character.forDigit((char) ((c >>> 4) & 0x0f), 16));
sb.append(Character.forDigit((char) (c & 0x0f), 16)); sb.append(Character.forDigit((char) (c & 0x0f), 16));
} } else {
else {
sb.append(c); sb.append(c);
} }
} }
@ -64,20 +60,17 @@ public class Cookie {
} }
/** /**
* Convert a cookie specification string into a JSONObject. The string * Convert a cookie specification string into a JSONObject. The string will contain a name value pair separated by
* will contain a name value pair separated by '='. The name and the value * '='. The name and the value will be unescaped, possibly converting '+' and '%' sequences. The cookie properties
* will be unescaped, possibly converting '+' and '%' sequences. The * may follow, separated by ';', also represented as name=value (except the secure property, which does not have a
* cookie properties may follow, separated by ';', also represented as * value). The name will be stored under the key "name", and the value will be stored under the key "value". This
* name=value (except the secure property, which does not have a value). * method does not do checking or validation of the parameters. It only converts the cookie string into a
* The name will be stored under the key "name", and the value will be * JSONObject.
* stored under the key "value". This method does not do checking or *
* validation of the parameters. It only converts the cookie string into * @param string The cookie specification string.
* a JSONObject. *
* @return A JSONObject containing "name", "value", and possibly other members.
* *
* @param string
* The cookie specification string.
* @return A JSONObject containing "name", "value", and possibly other
* members.
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final String string) throws JSONException { public static JSONObject toJSONObject(final String string) throws JSONException {
@ -94,12 +87,10 @@ public class Cookie {
if (x.next() != '=') { if (x.next() != '=') {
if (name.equals("secure")) { if (name.equals("secure")) {
value = Boolean.TRUE; value = Boolean.TRUE;
} } else {
else {
throw x.syntaxError("Missing '=' in cookie parameter."); throw x.syntaxError("Missing '=' in cookie parameter.");
} }
} } else {
else {
value = unescape(x.nextTo(';')); value = unescape(x.nextTo(';'));
x.next(); x.next();
} }
@ -109,15 +100,14 @@ public class Cookie {
} }
/** /**
* Convert a JSONObject into a cookie specification string. The JSONObject * Convert a JSONObject into a cookie specification string. The JSONObject must contain "name" and "value" members.
* must contain "name" and "value" members. * If the JSONObject contains "expires", "domain", "path", or "secure" members, they will be appended to the cookie
* If the JSONObject contains "expires", "domain", "path", or "secure" * specification string. All other members are ignored.
* members, they will be appended to the cookie specification string. *
* All other members are ignored. * @param jo A JSONObject
* *
* @param jo
* A JSONObject
* @return A cookie specification string * @return A cookie specification string
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final JSONObject jo) throws JSONException { public static String toString(final JSONObject jo) throws JSONException {
@ -145,13 +135,11 @@ public class Cookie {
} }
/** /**
* Convert <code>%</code><i>hh</i> sequences to single characters, and * Convert <code>%</code><i>hh</i> sequences to single characters, and convert plus to space.
* convert plus to space. *
* @param string A string that may contain <code>+</code> &nbsp;<small>(plus)</small> and <code>%</code><i>hh</i>
* sequences.
* *
* @param string
* A string that may contain <code>+</code>
* &nbsp;<small>(plus)</small> and <code>%</code><i>hh</i>
* sequences.
* @return The unescaped string. * @return The unescaped string.
*/ */
public static String unescape(final String string) { public static String unescape(final String string) {
@ -161,8 +149,7 @@ public class Cookie {
char c = string.charAt(i); char c = string.charAt(i);
if (c == '+') { if (c == '+') {
c = ' '; c = ' ';
} } else if ((c == '%') && ((i + 2) < length)) {
else if ((c == '%') && ((i + 2) < length)) {
final int d = JSONTokener.dehexchar(string.charAt(i + 1)); final int d = JSONTokener.dehexchar(string.charAt(i + 1));
final int e = JSONTokener.dehexchar(string.charAt(i + 2)); final int e = JSONTokener.dehexchar(string.charAt(i + 2));
if ((d >= 0) && (e >= 0)) { if ((d >= 0) && (e >= 0)) {

View File

@ -11,18 +11,17 @@ import java.util.Iterator;
public class CookieList { public class CookieList {
/** /**
* Convert a cookie list into a JSONObject. A cookie list is a sequence * Convert a cookie list into a JSONObject. A cookie list is a sequence of name/value pairs. The names are separated
* of name/value pairs. The names are separated from the values by '='. * from the values by '='. The pairs are separated by ';'. The names and the values will be unescaped, possibly
* The pairs are separated by ';'. The names and the values * converting '+' and '%' sequences.
* will be unescaped, possibly converting '+' and '%' sequences.
* <p/> * <p/>
* To add a cookie to a cooklist, * To add a cookie to a cooklist, cookielistJSONObject.put(cookieJSONObject.getString("name"),
* cookielistJSONObject.put(cookieJSONObject.getString("name"),
* cookieJSONObject.getString("value")); * cookieJSONObject.getString("value"));
* *
* @param string * @param string A cookie list string
* A cookie list string *
* @return A JSONObject * @return A JSONObject
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final String string) throws JSONException { public static JSONObject toJSONObject(final String string) throws JSONException {
@ -38,14 +37,14 @@ public class CookieList {
} }
/** /**
* Convert a JSONObject into a cookie list. A cookie list is a sequence * Convert a JSONObject into a cookie list. A cookie list is a sequence of name/value pairs. The names are separated
* of name/value pairs. The names are separated from the values by '='. * from the values by '='. The pairs are separated by ';'. The characters '%', '+', '=', and ';' in the names and
* The pairs are separated by ';'. The characters '%', '+', '=', and ';' * values are replaced by "%hh".
* in the names and values are replaced by "%hh". *
* @param jo A JSONObject
* *
* @param jo
* A JSONObject
* @return A cookie list string * @return A cookie list string
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final JSONObject jo) throws JSONException { public static String toString(final JSONObject jo) throws JSONException {

View File

@ -37,10 +37,10 @@ public class HTTP {
public static final String CRLF = "\r\n"; public static final String CRLF = "\r\n";
/** /**
* Convert an HTTP header string into a JSONObject. It can be a request * Convert an HTTP header string into a JSONObject. It can be a request header or a response header. A request
* header or a response header. A request header will contain * header will contain
* <p/>
* <p/> * <p/>
*
* <pre> * <pre>
* { * {
* Method: "POST" (for example), * Method: "POST" (for example),
@ -51,7 +51,7 @@ public class HTTP {
* <p/> * <p/>
* A response header will contain * A response header will contain
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* { * {
* "HTTP-Version": "HTTP/1.1" (for example), * "HTTP-Version": "HTTP/1.1" (for example),
@ -60,10 +60,10 @@ public class HTTP {
* } * }
* </pre> * </pre>
* <p/> * <p/>
* In addition, the other parameters in the header will be captured, using * In addition, the other parameters in the header will be captured, using the HTTP field names as JSON names, so
* the HTTP field names as JSON names, so that * that
* <p/>
* <p/> * <p/>
*
* <pre> * <pre>
* Date: Sun, 26 May 2002 18:06:04 GMT * Date: Sun, 26 May 2002 18:06:04 GMT
* Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s * Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
@ -72,7 +72,7 @@ public class HTTP {
* <p/> * <p/>
* become * become
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* {... * {...
* Date: "Sun, 26 May 2002 18:06:04 GMT", * Date: "Sun, 26 May 2002 18:06:04 GMT",
@ -81,13 +81,12 @@ public class HTTP {
* ...} * ...}
* </pre> * </pre>
* <p/> * <p/>
* It does no further checking or conversion. It does not parse dates. It * It does no further checking or conversion. It does not parse dates. It does not do '%' transforms on URLs.
* does not do '%' transforms on URLs. *
* @param string An HTTP header string.
*
* @return A JSONObject containing the elements and attributes of the XML string.
* *
* @param string
* An HTTP header string.
* @return A JSONObject containing the elements and attributes
* of the XML string.
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final String string) throws JSONException { public static JSONObject toJSONObject(final String string) throws JSONException {
@ -105,8 +104,7 @@ public class HTTP {
jo.put("Reason-Phrase", x.nextTo('\0')); jo.put("Reason-Phrase", x.nextTo('\0'));
x.next(); x.next();
} } else {
else {
// Request // Request
@ -129,7 +127,7 @@ public class HTTP {
/** /**
* Convert a JSONObject into an HTTP header. A request header must contain * Convert a JSONObject into an HTTP header. A request header must contain
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* { * {
* Method: "POST" (for example), * Method: "POST" (for example),
@ -140,7 +138,7 @@ public class HTTP {
* <p/> * <p/>
* A response header must contain * A response header must contain
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* { * {
* "HTTP-Version": "HTTP/1.1" (for example), * "HTTP-Version": "HTTP/1.1" (for example),
@ -149,15 +147,13 @@ public class HTTP {
* } * }
* </pre> * </pre>
* <p/> * <p/>
* Any other members of the JSONObject will be output as HTTP fields. The * Any other members of the JSONObject will be output as HTTP fields. The result will end with two CRLF pairs.
* result will end with two CRLF pairs. *
* @param jo A JSONObject
* *
* @param jo
* A JSONObject
* @return An HTTP header string. * @return An HTTP header string.
* @throws JSONException *
* if the object does not contain enough * @throws JSONException if the object does not contain enough information.
* information.
*/ */
public static String toString(final JSONObject jo) throws JSONException { public static String toString(final JSONObject jo) throws JSONException {
final Iterator<String> keys = jo.keys(); final Iterator<String> keys = jo.keys();
@ -169,8 +165,7 @@ public class HTTP {
sb.append(jo.getString("Status-Code")); sb.append(jo.getString("Status-Code"));
sb.append(' '); sb.append(' ');
sb.append(jo.getString("Reason-Phrase")); sb.append(jo.getString("Reason-Phrase"));
} } else if (jo.has("Method") && jo.has("Request-URI")) {
else if (jo.has("Method") && jo.has("Request-URI")) {
sb.append(jo.getString("Method")); sb.append(jo.getString("Method"));
sb.append(' '); sb.append(' ');
sb.append('"'); sb.append('"');
@ -178,8 +173,7 @@ public class HTTP {
sb.append('"'); sb.append('"');
sb.append(' '); sb.append(' ');
sb.append(jo.getString("HTTP-Version")); sb.append(jo.getString("HTTP-Version"));
} } else {
else {
throw new JSONException("Not enough material for an HTTP header."); throw new JSONException("Not enough material for an HTTP header.");
} }
sb.append(CRLF); sb.append(CRLF);

View File

@ -1,8 +1,7 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
/** /**
* The HTTPTokener extends the JSONTokener to provide additional methods * The HTTPTokener extends the JSONTokener to provide additional methods for the parsing of HTTP headers.
* for the parsing of HTTP headers.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -12,8 +11,7 @@ public class HTTPTokener extends JSONTokener {
/** /**
* Construct an HTTPTokener from a string. * Construct an HTTPTokener from a string.
* *
* @param string * @param string A source string.
* A source string.
*/ */
public HTTPTokener(final String string) { public HTTPTokener(final String string) {
super(string); super(string);
@ -23,6 +21,7 @@ public class HTTPTokener extends JSONTokener {
* Get the next token or string. This is used in parsing HTTP headers. * Get the next token or string. This is used in parsing HTTP headers.
* *
* @return A String. * @return A String.
*
* @throws JSONException * @throws JSONException
*/ */
public String nextToken() throws JSONException { public String nextToken() throws JSONException {
@ -31,11 +30,10 @@ public class HTTPTokener extends JSONTokener {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
do { do {
c = next(); c = next();
} } while (Character.isWhitespace(c));
while (Character.isWhitespace(c));
if ((c == '"') || (c == '\'')) { if ((c == '"') || (c == '\'')) {
q = c; q = c;
for (;;) { for (; ; ) {
c = next(); c = next();
if (c < ' ') { if (c < ' ') {
throw syntaxError("Unterminated string."); throw syntaxError("Unterminated string.");
@ -46,7 +44,7 @@ public class HTTPTokener extends JSONTokener {
sb.append(c); sb.append(c);
} }
} }
for (;;) { for (; ; ) {
if ((c == 0) || Character.isWhitespace(c)) { if ((c == 0) || Character.isWhitespace(c)) {
return sb.toString(); return sb.toString();
} }

View File

@ -30,45 +30,29 @@ import java.util.Collection;
import java.util.Map; import java.util.Map;
/** /**
* A JSONArray is an ordered sequence of values. Its external text form is a * A JSONArray is an ordered sequence of values. Its external text form is a string wrapped in square brackets with
* string wrapped in square brackets with commas separating the values. The * commas separating the values. The internal form is an object having <code>get</code> and <code>opt</code> methods for
* internal form is an object having <code>get</code> and <code>opt</code> * accessing the values by index, and <code>put</code> methods for adding or replacing values. The values can be any of
* methods for accessing the values by index, and <code>put</code> methods for * these types: <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>, <code>Number</code>,
* adding or replacing values. The values can be any of these types: * <code>String</code>, or the <code>JSONObject.NULL object</code>.
* <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
* <code>Number</code>, <code>String</code>, or the
* <code>JSONObject.NULL object</code>.
* <p/> * <p/>
* The constructor can convert a JSON text into a Java object. The * The constructor can convert a JSON text into a Java object. The <code>toString</code> method converts to JSON text.
* <code>toString</code> method converts to JSON text.
* <p/> * <p/>
* A <code>get</code> method returns a value if one can be found, and throws an * A <code>get</code> method returns a value if one can be found, and throws an exception if one cannot be found. An
* exception if one cannot be found. An <code>opt</code> method returns a * <code>opt</code> method returns a default value instead of throwing an exception, and so is useful for obtaining
* default value instead of throwing an exception, and so is useful for * optional values.
* obtaining optional values.
* <p/> * <p/>
* The generic <code>get()</code> and <code>opt()</code> methods return an * The generic <code>get()</code> and <code>opt()</code> methods return an object which you can cast or query for type.
* object which you can cast or query for type. There are also typed * There are also typed <code>get</code> and <code>opt</code> methods that do type checking and type coercion for you.
* <code>get</code> and <code>opt</code> methods that do type checking and type
* coercion for you.
* <p/> * <p/>
* The texts produced by the <code>toString</code> methods strictly conform to * The texts produced by the <code>toString</code> methods strictly conform to JSON syntax rules. The constructors are
* JSON syntax rules. The constructors are more forgiving in the texts they will * more forgiving in the texts they will accept: <ul> <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear
* accept: * just before the closing bracket.</li> <li>The <code>null</code> value will be inserted when there is <code>,</code>
* <ul> * &nbsp;<small>(comma)</small> elision.</li> <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single
* <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just * quote)</small>.</li> <li>Strings do not need to be quoted at all if they do not begin with a quote or single quote,
* before the closing bracket.</li> * and if they do not contain leading or trailing spaces, and if they do not contain any of these characters: <code>{ }
* <li>The <code>null</code> value will be inserted when there is <code>,</code> * [ ] / \ : , #</code> and if they do not look like numbers and if they are not the reserved words <code>true</code>,
* &nbsp;<small>(comma)</small> elision.</li> * <code>false</code>, or <code>null</code>.</li> </ul>
* <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single
* quote)</small>.</li>
* <li>Strings do not need to be quoted at all if they do not begin with a quote
* or single quote, and if they do not contain leading or trailing spaces, and
* if they do not contain any of these characters:
* <code>{ } [ ] / \ : , #</code> and if they do not look like numbers and if
* they are not the reserved words <code>true</code>, <code>false</code>, or
* <code>null</code>.</li>
* </ul>
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -90,10 +74,9 @@ public class JSONArray {
/** /**
* Construct a JSONArray from a JSONTokener. * Construct a JSONArray from a JSONTokener.
* *
* @param x * @param x A JSONTokener
* A JSONTokener *
* @throws JSONException * @throws JSONException If there is a syntax error.
* If there is a syntax error.
*/ */
public JSONArray(final JSONTokener x) throws JSONException { public JSONArray(final JSONTokener x) throws JSONException {
this(); this();
@ -102,12 +85,11 @@ public class JSONArray {
} }
if (x.nextClean() != ']') { if (x.nextClean() != ']') {
x.back(); x.back();
for (;;) { for (; ; ) {
if (x.nextClean() == ',') { if (x.nextClean() == ',') {
x.back(); x.back();
this.myArrayList.add(JSONObject.NULL); this.myArrayList.add(JSONObject.NULL);
} } else {
else {
x.back(); x.back();
this.myArrayList.add(x.nextValue()); this.myArrayList.add(x.nextValue());
} }
@ -130,12 +112,10 @@ public class JSONArray {
/** /**
* Construct a JSONArray from a source JSON text. * Construct a JSONArray from a source JSON text.
* *
* @param source * @param source A string that begins with <code>[</code>&nbsp;<small>(left bracket)</small> and ends with
* A string that begins with <code>[</code>&nbsp;<small>(left * <code>]</code> &nbsp;<small>(right bracket)</small>.
* bracket)</small> and ends with <code>]</code> *
* &nbsp;<small>(right bracket)</small>. * @throws JSONException If there is a syntax error.
* @throws JSONException
* If there is a syntax error.
*/ */
public JSONArray(final String source) throws JSONException { public JSONArray(final String source) throws JSONException {
this(new JSONTokener(source)); this(new JSONTokener(source));
@ -144,8 +124,7 @@ public class JSONArray {
/** /**
* Construct a JSONArray from a Collection. * Construct a JSONArray from a Collection.
* *
* @param collection * @param collection A Collection.
* A Collection.
*/ */
public JSONArray(final Collection<Object> collection) { public JSONArray(final Collection<Object> collection) {
this.myArrayList = new ArrayList<Object>(); this.myArrayList = new ArrayList<Object>();
@ -159,8 +138,7 @@ public class JSONArray {
/** /**
* Construct a JSONArray from an array * Construct a JSONArray from an array
* *
* @throws JSONException * @throws JSONException If not an array.
* If not an array.
*/ */
public JSONArray(final Object array) throws JSONException { public JSONArray(final Object array) throws JSONException {
this(); this();
@ -169,8 +147,7 @@ public class JSONArray {
for (int i = 0; i < length; i += 1) { for (int i = 0; i < length; i += 1) {
this.put(JSONObject.wrap(Array.get(array, i))); this.put(JSONObject.wrap(Array.get(array, i)));
} }
} } else {
else {
throw new JSONException("JSONArray initial value should be a string or collection or array."); throw new JSONException("JSONArray initial value should be a string or collection or array.");
} }
} }
@ -178,11 +155,11 @@ public class JSONArray {
/** /**
* Get the object value associated with an index. * Get the object value associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return An object value. * @return An object value.
* @throws JSONException *
* If there is no value for the index. * @throws JSONException If there is no value for the index.
*/ */
public Object get(final int index) throws JSONException { public Object get(final int index) throws JSONException {
final Object object = this.opt(index); final Object object = this.opt(index);
@ -193,22 +170,19 @@ public class JSONArray {
} }
/** /**
* Get the boolean value associated with an index. The string values "true" * Get the boolean value associated with an index. The string values "true" and "false" are converted to boolean.
* and "false" are converted to boolean. *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return The truth. * @return The truth.
* @throws JSONException *
* If there is no value for the index or if the value is not * @throws JSONException If there is no value for the index or if the value is not convertible to boolean.
* convertible to boolean.
*/ */
public boolean getBoolean(final int index) throws JSONException { public boolean getBoolean(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
if (object.equals(Boolean.FALSE) || ((object instanceof String) && ((String) object).equalsIgnoreCase("false"))) { if (object.equals(Boolean.FALSE) || ((object instanceof String) && ((String) object).equalsIgnoreCase("false"))) {
return false; return false;
} } else if (object.equals(Boolean.TRUE) || ((object instanceof String) && ((String) object).equalsIgnoreCase("true"))) {
else if (object.equals(Boolean.TRUE) || ((object instanceof String) && ((String) object).equalsIgnoreCase("true"))) {
return true; return true;
} }
throw new JSONException("JSONArray[" + index + "] is not a boolean."); throw new JSONException("JSONArray[" + index + "] is not a boolean.");
@ -217,19 +191,17 @@ public class JSONArray {
/** /**
* Get the double value associated with an index. * Get the double value associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return The value. * @return The value.
* @throws JSONException *
* If the key is not found or if the value cannot be converted * @throws JSONException If the key is not found or if the value cannot be converted to a number.
* to a number.
*/ */
public double getDouble(final int index) throws JSONException { public double getDouble(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
try { try {
return object instanceof Number ? ((Number) object).doubleValue() : Double.parseDouble((String) object); return object instanceof Number ? ((Number) object).doubleValue() : Double.parseDouble((String) object);
} } catch (final Exception e) {
catch (final Exception e) {
throw new JSONException("JSONArray[" + index + "] is not a number."); throw new JSONException("JSONArray[" + index + "] is not a number.");
} }
} }
@ -237,18 +209,17 @@ public class JSONArray {
/** /**
* Get the int value associated with an index. * Get the int value associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return The value. * @return The value.
* @throws JSONException *
* If the key is not found or if the value is not a number. * @throws JSONException If the key is not found or if the value is not a number.
*/ */
public int getInt(final int index) throws JSONException { public int getInt(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
try { try {
return object instanceof Number ? ((Number) object).intValue() : Integer.parseInt((String) object); return object instanceof Number ? ((Number) object).intValue() : Integer.parseInt((String) object);
} } catch (final Exception e) {
catch (final Exception e) {
throw new JSONException("JSONArray[" + index + "] is not a number."); throw new JSONException("JSONArray[" + index + "] is not a number.");
} }
} }
@ -256,12 +227,11 @@ public class JSONArray {
/** /**
* Get the JSONArray associated with an index. * Get the JSONArray associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return A JSONArray value. * @return A JSONArray value.
* @throws JSONException *
* If there is no value for the index. or if the value is not a * @throws JSONException If there is no value for the index. or if the value is not a JSONArray
* JSONArray
*/ */
public JSONArray getJSONArray(final int index) throws JSONException { public JSONArray getJSONArray(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
@ -274,12 +244,11 @@ public class JSONArray {
/** /**
* Get the JSONObject associated with an index. * Get the JSONObject associated with an index.
* *
* @param index * @param index subscript
* subscript *
* @return A JSONObject value. * @return A JSONObject value.
* @throws JSONException *
* If there is no value for the index or if the value is not a * @throws JSONException If there is no value for the index or if the value is not a JSONObject
* JSONObject
*/ */
public JSONObject getJSONObject(final int index) throws JSONException { public JSONObject getJSONObject(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
@ -292,19 +261,17 @@ public class JSONArray {
/** /**
* Get the long value associated with an index. * Get the long value associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return The value. * @return The value.
* @throws JSONException *
* If the key is not found or if the value cannot be converted * @throws JSONException If the key is not found or if the value cannot be converted to a number.
* to a number.
*/ */
public long getLong(final int index) throws JSONException { public long getLong(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
try { try {
return object instanceof Number ? ((Number) object).longValue() : Long.parseLong((String) object); return object instanceof Number ? ((Number) object).longValue() : Long.parseLong((String) object);
} } catch (final Exception e) {
catch (final Exception e) {
throw new JSONException("JSONArray[" + index + "] is not a number."); throw new JSONException("JSONArray[" + index + "] is not a number.");
} }
} }
@ -312,11 +279,11 @@ public class JSONArray {
/** /**
* Get the string associated with an index. * Get the string associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return A string value. * @return A string value.
* @throws JSONException *
* If there is no string value for the index. * @throws JSONException If there is no string value for the index.
*/ */
public String getString(final int index) throws JSONException { public String getString(final int index) throws JSONException {
final Object object = this.get(index); final Object object = this.get(index);
@ -329,8 +296,8 @@ public class JSONArray {
/** /**
* Determine if the value is null. * Determine if the value is null.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return true if the value at the index is null, or if there is no value. * @return true if the value at the index is null, or if there is no value.
*/ */
public boolean isNull(final int index) { public boolean isNull(final int index) {
@ -338,15 +305,14 @@ public class JSONArray {
} }
/** /**
* Make a string from the contents of this JSONArray. The * Make a string from the contents of this JSONArray. The <code>separator</code> string is inserted between each
* <code>separator</code> string is inserted between each element. Warning: * element. Warning: This method assumes that the data structure is acyclical.
* This method assumes that the data structure is acyclical. *
* @param separator A string that will be inserted between the elements.
* *
* @param separator
* A string that will be inserted between the elements.
* @return a string. * @return a string.
* @throws JSONException *
* If the array contains an invalid number. * @throws JSONException If the array contains an invalid number.
*/ */
public String join(final String separator) throws JSONException { public String join(final String separator) throws JSONException {
final int len = this.length(); final int len = this.length();
@ -373,8 +339,8 @@ public class JSONArray {
/** /**
* Get the optional object value associated with an index. * Get the optional object value associated with an index.
* *
* @param index * @param index The index must be between 0 and length() - 1.
* The index must be between 0 and length() - 1. *
* @return An object value, or null if there is no object at that index. * @return An object value, or null if there is no object at that index.
*/ */
public Object opt(final int index) { public Object opt(final int index) {
@ -382,12 +348,11 @@ public class JSONArray {
} }
/** /**
* Get the optional boolean value associated with an index. It returns false * Get the optional boolean value associated with an index. It returns false if there is no value at that index, or
* if there is no value at that index, or if the value is not Boolean.TRUE * if the value is not Boolean.TRUE or the String "true".
* or the String "true". *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return The truth. * @return The truth.
*/ */
public boolean optBoolean(final int index) { public boolean optBoolean(final int index) {
@ -395,32 +360,28 @@ public class JSONArray {
} }
/** /**
* Get the optional boolean value associated with an index. It returns the * Get the optional boolean value associated with an index. It returns the defaultValue if there is no value at that
* defaultValue if there is no value at that index or if it is not a Boolean * index or if it is not a Boolean or the String "true" or "false" (case insensitive).
* or the String "true" or "false" (case insensitive). *
* @param index The index must be between 0 and length() - 1.
* @param defaultValue A boolean default.
* *
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* A boolean default.
* @return The truth. * @return The truth.
*/ */
public boolean optBoolean(final int index, final boolean defaultValue) { public boolean optBoolean(final int index, final boolean defaultValue) {
try { try {
return this.getBoolean(index); return this.getBoolean(index);
} } catch (final Exception e) {
catch (final Exception e) {
return defaultValue; return defaultValue;
} }
} }
/** /**
* Get the optional double value associated with an index. NaN is returned * Get the optional double value associated with an index. NaN is returned if there is no value for the index, or if
* if there is no value for the index, or if the value is not a number and * the value is not a number and cannot be converted to a number.
* cannot be converted to a number. *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return The value. * @return The value.
*/ */
public double optDouble(final int index) { public double optDouble(final int index) {
@ -428,32 +389,28 @@ public class JSONArray {
} }
/** /**
* Get the optional double value associated with an index. The defaultValue * Get the optional double value associated with an index. The defaultValue is returned if there is no value for the
* is returned if there is no value for the index, or if the value is not a * index, or if the value is not a number and cannot be converted to a number.
* number and cannot be converted to a number. *
* @param index subscript
* @param defaultValue The default value.
* *
* @param index
* subscript
* @param defaultValue
* The default value.
* @return The value. * @return The value.
*/ */
public double optDouble(final int index, final double defaultValue) { public double optDouble(final int index, final double defaultValue) {
try { try {
return this.getDouble(index); return this.getDouble(index);
} } catch (final Exception e) {
catch (final Exception e) {
return defaultValue; return defaultValue;
} }
} }
/** /**
* Get the optional int value associated with an index. Zero is returned if * Get the optional int value associated with an index. Zero is returned if there is no value for the index, or if
* there is no value for the index, or if the value is not a number and * the value is not a number and cannot be converted to a number.
* cannot be converted to a number. *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return The value. * @return The value.
*/ */
public int optInt(final int index) { public int optInt(final int index) {
@ -461,21 +418,18 @@ public class JSONArray {
} }
/** /**
* Get the optional int value associated with an index. The defaultValue is * Get the optional int value associated with an index. The defaultValue is returned if there is no value for the
* returned if there is no value for the index, or if the value is not a * index, or if the value is not a number and cannot be converted to a number.
* number and cannot be converted to a number. *
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default value.
* *
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* The default value.
* @return The value. * @return The value.
*/ */
public int optInt(final int index, final int defaultValue) { public int optInt(final int index, final int defaultValue) {
try { try {
return this.getInt(index); return this.getInt(index);
} } catch (final Exception e) {
catch (final Exception e) {
return defaultValue; return defaultValue;
} }
} }
@ -483,10 +437,9 @@ public class JSONArray {
/** /**
* Get the optional JSONArray associated with an index. * Get the optional JSONArray associated with an index.
* *
* @param index * @param index subscript
* subscript *
* @return A JSONArray value, or null if the index has no value, or if the * @return A JSONArray value, or null if the index has no value, or if the value is not a JSONArray.
* value is not a JSONArray.
*/ */
public JSONArray optJSONArray(final int index) { public JSONArray optJSONArray(final int index) {
final Object o = this.opt(index); final Object o = this.opt(index);
@ -494,12 +447,11 @@ public class JSONArray {
} }
/** /**
* Get the optional JSONObject associated with an index. Null is returned if * Get the optional JSONObject associated with an index. Null is returned if the key is not found, or null if the
* the key is not found, or null if the index has no value, or if the value * index has no value, or if the value is not a JSONObject.
* is not a JSONObject. *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return A JSONObject value. * @return A JSONObject value.
*/ */
public JSONObject optJSONObject(final int index) { public JSONObject optJSONObject(final int index) {
@ -508,12 +460,11 @@ public class JSONArray {
} }
/** /**
* Get the optional long value associated with an index. Zero is returned if * Get the optional long value associated with an index. Zero is returned if there is no value for the index, or if
* there is no value for the index, or if the value is not a number and * the value is not a number and cannot be converted to a number.
* cannot be converted to a number. *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return The value. * @return The value.
*/ */
public long optLong(final int index) { public long optLong(final int index) {
@ -521,32 +472,28 @@ public class JSONArray {
} }
/** /**
* Get the optional long value associated with an index. The defaultValue is * Get the optional long value associated with an index. The defaultValue is returned if there is no value for the
* returned if there is no value for the index, or if the value is not a * index, or if the value is not a number and cannot be converted to a number.
* number and cannot be converted to a number. *
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default value.
* *
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* The default value.
* @return The value. * @return The value.
*/ */
public long optLong(final int index, final long defaultValue) { public long optLong(final int index, final long defaultValue) {
try { try {
return this.getLong(index); return this.getLong(index);
} } catch (final Exception e) {
catch (final Exception e) {
return defaultValue; return defaultValue;
} }
} }
/** /**
* Get the optional string value associated with an index. It returns an * Get the optional string value associated with an index. It returns an empty string if there is no value at that
* empty string if there is no value at that index. If the value is not a * index. If the value is not a string and is not null, then it is coverted to a string.
* string and is not null, then it is coverted to a string. *
* @param index The index must be between 0 and length() - 1.
* *
* @param index
* The index must be between 0 and length() - 1.
* @return A String value. * @return A String value.
*/ */
public String optString(final int index) { public String optString(final int index) {
@ -554,13 +501,11 @@ public class JSONArray {
} }
/** /**
* Get the optional string associated with an index. The defaultValue is * Get the optional string associated with an index. The defaultValue is returned if the key is not found.
* returned if the key is not found. *
* @param index The index must be between 0 and length() - 1.
* @param defaultValue The default value.
* *
* @param index
* The index must be between 0 and length() - 1.
* @param defaultValue
* The default value.
* @return A String value. * @return A String value.
*/ */
public String optString(final int index, final String defaultValue) { public String optString(final int index, final String defaultValue) {
@ -571,8 +516,8 @@ public class JSONArray {
/** /**
* Append a boolean value. This increases the array's length by one. * Append a boolean value. This increases the array's length by one.
* *
* @param value * @param value A boolean value.
* A boolean value. *
* @return this. * @return this.
*/ */
public JSONArray put(final boolean value) { public JSONArray put(final boolean value) {
@ -581,11 +526,10 @@ public class JSONArray {
} }
/** /**
* Put a value in the JSONArray, where the value will be a JSONArray which * Put a value in the JSONArray, where the value will be a JSONArray which is produced from a Collection.
* is produced from a Collection. *
* @param value A Collection value.
* *
* @param value
* A Collection value.
* @return this. * @return this.
*/ */
public JSONArray put(final Collection<Object> value) { public JSONArray put(final Collection<Object> value) {
@ -596,11 +540,11 @@ public class JSONArray {
/** /**
* Append a double value. This increases the array's length by one. * Append a double value. This increases the array's length by one.
* *
* @param value * @param value A double value.
* A double value. *
* @return this. * @return this.
* @throws JSONException *
* if the value is not finite. * @throws JSONException if the value is not finite.
*/ */
public JSONArray put(final double value) throws JSONException { public JSONArray put(final double value) throws JSONException {
final Double d = value; final Double d = value;
@ -612,8 +556,8 @@ public class JSONArray {
/** /**
* Append an int value. This increases the array's length by one. * Append an int value. This increases the array's length by one.
* *
* @param value * @param value An int value.
* An int value. *
* @return this. * @return this.
*/ */
public JSONArray put(final int value) { public JSONArray put(final int value) {
@ -624,8 +568,8 @@ public class JSONArray {
/** /**
* Append an long value. This increases the array's length by one. * Append an long value. This increases the array's length by one.
* *
* @param value * @param value A long value.
* A long value. *
* @return this. * @return this.
*/ */
public JSONArray put(final long value) { public JSONArray put(final long value) {
@ -634,11 +578,10 @@ public class JSONArray {
} }
/** /**
* Put a value in the JSONArray, where the value will be a JSONObject which * Put a value in the JSONArray, where the value will be a JSONObject which is produced from a Map.
* is produced from a Map. *
* @param value A Map value.
* *
* @param value
* A Map value.
* @return this. * @return this.
*/ */
public JSONArray put(final Map<String, Object> value) { public JSONArray put(final Map<String, Object> value) {
@ -649,10 +592,9 @@ public class JSONArray {
/** /**
* Append an object value. This increases the array's length by one. * Append an object value. This increases the array's length by one.
* *
* @param value * @param value An object value. The value should be a Boolean, Double, Integer, JSONArray, JSONObject, Long, or
* An object value. The value should be a Boolean, Double, * String, or the JSONObject.NULL object.
* Integer, JSONArray, JSONObject, Long, or String, or the *
* JSONObject.NULL object.
* @return this. * @return this.
*/ */
public JSONArray put(final Object value) { public JSONArray put(final Object value) {
@ -661,17 +603,15 @@ public class JSONArray {
} }
/** /**
* Put or replace a boolean value in the JSONArray. If the index is greater * Put or replace a boolean value in the JSONArray. If the index is greater than the length of the JSONArray, then
* than the length of the JSONArray, then null elements will be added as * null elements will be added as necessary to pad it out.
* necessary to pad it out. *
* @param index The subscript.
* @param value A boolean value.
* *
* @param index
* The subscript.
* @param value
* A boolean value.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative. * @throws JSONException If the index is negative.
*/ */
public JSONArray put(final int index, final boolean value) throws JSONException { public JSONArray put(final int index, final boolean value) throws JSONException {
this.put(index, value ? Boolean.TRUE : Boolean.FALSE); this.put(index, value ? Boolean.TRUE : Boolean.FALSE);
@ -679,16 +619,14 @@ public class JSONArray {
} }
/** /**
* Put a value in the JSONArray, where the value will be a JSONArray which * Put a value in the JSONArray, where the value will be a JSONArray which is produced from a Collection.
* is produced from a Collection. *
* @param index The subscript.
* @param value A Collection value.
* *
* @param index
* The subscript.
* @param value
* A Collection value.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative or if the value is not finite. * @throws JSONException If the index is negative or if the value is not finite.
*/ */
public JSONArray put(final int index, final Collection<Object> value) throws JSONException { public JSONArray put(final int index, final Collection<Object> value) throws JSONException {
this.put(index, new JSONArray(value)); this.put(index, new JSONArray(value));
@ -696,17 +634,15 @@ public class JSONArray {
} }
/** /**
* Put or replace a double value. If the index is greater than the length of * Put or replace a double value. If the index is greater than the length of the JSONArray, then null elements will
* the JSONArray, then null elements will be added as necessary to pad it * be added as necessary to pad it out.
* out. *
* @param index The subscript.
* @param value A double value.
* *
* @param index
* The subscript.
* @param value
* A double value.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative or if the value is not finite. * @throws JSONException If the index is negative or if the value is not finite.
*/ */
public JSONArray put(final int index, final double value) throws JSONException { public JSONArray put(final int index, final double value) throws JSONException {
this.put(index, new Double(value)); this.put(index, new Double(value));
@ -714,17 +650,15 @@ public class JSONArray {
} }
/** /**
* Put or replace an int value. If the index is greater than the length of * Put or replace an int value. If the index is greater than the length of the JSONArray, then null elements will be
* the JSONArray, then null elements will be added as necessary to pad it * added as necessary to pad it out.
* out. *
* @param index The subscript.
* @param value An int value.
* *
* @param index
* The subscript.
* @param value
* An int value.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative. * @throws JSONException If the index is negative.
*/ */
public JSONArray put(final int index, final int value) throws JSONException { public JSONArray put(final int index, final int value) throws JSONException {
this.put(index, new Integer(value)); this.put(index, new Integer(value));
@ -732,17 +666,15 @@ public class JSONArray {
} }
/** /**
* Put or replace a long value. If the index is greater than the length of * Put or replace a long value. If the index is greater than the length of the JSONArray, then null elements will be
* the JSONArray, then null elements will be added as necessary to pad it * added as necessary to pad it out.
* out. *
* @param index The subscript.
* @param value A long value.
* *
* @param index
* The subscript.
* @param value
* A long value.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative. * @throws JSONException If the index is negative.
*/ */
public JSONArray put(final int index, final long value) throws JSONException { public JSONArray put(final int index, final long value) throws JSONException {
this.put(index, new Long(value)); this.put(index, new Long(value));
@ -750,17 +682,14 @@ public class JSONArray {
} }
/** /**
* Put a value in the JSONArray, where the value will be a JSONObject that * Put a value in the JSONArray, where the value will be a JSONObject that is produced from a Map.
* is produced from a Map. *
* @param index The subscript.
* @param value The Map value.
* *
* @param index
* The subscript.
* @param value
* The Map value.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative or if the the value is an invalid * @throws JSONException If the index is negative or if the the value is an invalid number.
* number.
*/ */
public JSONArray put(final int index, final Map<String, Object> value) throws JSONException { public JSONArray put(final int index, final Map<String, Object> value) throws JSONException {
this.put(index, new JSONObject(value)); this.put(index, new JSONObject(value));
@ -768,20 +697,16 @@ public class JSONArray {
} }
/** /**
* Put or replace an object value in the JSONArray. If the index is greater * Put or replace an object value in the JSONArray. If the index is greater than the length of the JSONArray, then
* than the length of the JSONArray, then null elements will be added as * null elements will be added as necessary to pad it out.
* necessary to pad it out. *
* @param index The subscript.
* @param value The value to put into the array. The value should be a Boolean, Double, Integer, JSONArray,
* JSONObject, Long, or String, or the JSONObject.NULL object.
* *
* @param index
* The subscript.
* @param value
* The value to put into the array. The value should be a
* Boolean, Double, Integer, JSONArray, JSONObject, Long, or
* String, or the JSONObject.NULL object.
* @return this. * @return this.
* @throws JSONException *
* If the index is negative or if the the value is an invalid * @throws JSONException If the index is negative or if the the value is an invalid number.
* number.
*/ */
public JSONArray put(final int index, final Object value) throws JSONException { public JSONArray put(final int index, final Object value) throws JSONException {
JSONObject.testValidity(value); JSONObject.testValidity(value);
@ -790,8 +715,7 @@ public class JSONArray {
} }
if (index < this.length()) { if (index < this.length()) {
this.myArrayList.set(index, value); this.myArrayList.set(index, value);
} } else {
else {
while (index != this.length()) { while (index != this.length()) {
this.put(JSONObject.NULL); this.put(JSONObject.NULL);
} }
@ -803,21 +727,19 @@ public class JSONArray {
/** /**
* Remove an index and close the hole. * Remove an index and close the hole.
* *
* @param index * @param index The index of the element to be removed.
* The index of the element to be removed. *
* @return The value that was associated with the index, or null if there * @return The value that was associated with the index, or null if there was no value.
* was no value.
*/ */
public Object remove(final int index) { public Object remove(final int index) {
return (index >= 0) && (index < this.length()) ? this.myArrayList.remove(index) : null; return (index >= 0) && (index < this.length()) ? this.myArrayList.remove(index) : null;
} }
/** /**
* Determine if two JSONArrays are similar. * Determine if two JSONArrays are similar. They must contain similar sequences.
* They must contain similar sequences. *
* @param other The other JSONArray
* *
* @param other
* The other JSONArray
* @return true if they are equal * @return true if they are equal
*/ */
public boolean similar(final Object other) { public boolean similar(final Object other) {
@ -835,13 +757,11 @@ public class JSONArray {
if (!((JSONObject) valueThis).similar(valueOther)) { if (!((JSONObject) valueThis).similar(valueOther)) {
return false; return false;
} }
} } else if (valueThis instanceof JSONArray) {
else if (valueThis instanceof JSONArray) {
if (!((JSONArray) valueThis).similar(valueOther)) { if (!((JSONArray) valueThis).similar(valueOther)) {
return false; return false;
} }
} } else if (!valueThis.equals(valueOther)) {
else if (!valueThis.equals(valueOther)) {
return false; return false;
} }
} }
@ -849,16 +769,13 @@ public class JSONArray {
} }
/** /**
* Produce a JSONObject by combining a JSONArray of names with the values of * Produce a JSONObject by combining a JSONArray of names with the values of this JSONArray.
* this JSONArray.
* *
* @param names * @param names A JSONArray containing a list of key strings. These will be paired with the values.
* A JSONArray containing a list of key strings. These will be *
* paired with the values. * @return A JSONObject, or null if there are no names or if this JSONArray has no values.
* @return A JSONObject, or null if there are no names or if this JSONArray *
* has no values. * @throws JSONException If any of the names are null.
* @throws JSONException
* If any of the names are null.
*/ */
public JSONObject toJSONObject(final JSONArray names) throws JSONException { public JSONObject toJSONObject(final JSONArray names) throws JSONException {
if ((names == null) || (names.length() == 0) || (this.length() == 0)) { if ((names == null) || (names.length() == 0) || (this.length() == 0)) {
@ -872,36 +789,33 @@ public class JSONArray {
} }
/** /**
* Make a JSON text of this JSONArray. For compactness, no unnecessary * Make a JSON text of this JSONArray. For compactness, no unnecessary whitespace is added. If it is not possible to
* whitespace is added. If it is not possible to produce a syntactically * produce a syntactically correct JSON text then null will be returned instead. This could occur if the array
* correct JSON text then null will be returned instead. This could occur if * contains an invalid number.
* the array contains an invalid number.
* <p/> * <p/>
* Warning: This method assumes that the data structure is acyclical. * Warning: This method assumes that the data structure is acyclical.
* *
* @return a printable, displayable, transmittable representation of the * @return a printable, displayable, transmittable representation of the array.
* array.
*/ */
@Override @Override
public String toString() { public String toString() {
try { try {
return this.toString(0); return this.toString(0);
} } catch (final Exception e) {
catch (final Exception e) {
return null; return null;
} }
} }
/** /**
* Make a prettyprinted JSON text of this JSONArray. Warning: This method * Make a prettyprinted JSON text of this JSONArray. Warning: This method assumes that the data structure is
* assumes that the data structure is acyclical. * acyclical.
*
* @param indentFactor The number of spaces to add to each level of indentation.
*
* @return a printable, displayable, transmittable representation of the object, beginning with
* <code>[</code>&nbsp;<small>(left bracket)</small> and ending with <code>]</code> &nbsp;<small>(right
* bracket)</small>.
* *
* @param indentFactor
* The number of spaces to add to each level of indentation.
* @return a printable, displayable, transmittable representation of the
* object, beginning with <code>[</code>&nbsp;<small>(left
* bracket)</small> and ending with <code>]</code>
* &nbsp;<small>(right bracket)</small>.
* @throws JSONException * @throws JSONException
*/ */
public String toString(final int indentFactor) throws JSONException { public String toString(final int indentFactor) throws JSONException {
@ -912,12 +826,12 @@ public class JSONArray {
} }
/** /**
* Write the contents of the JSONArray as JSON text to a writer. For * Write the contents of the JSONArray as JSON text to a writer. For compactness, no whitespace is added.
* compactness, no whitespace is added.
* <p/> * <p/>
* Warning: This method assumes that the data structure is acyclical. * Warning: This method assumes that the data structure is acyclical.
* *
* @return The writer. * @return The writer.
*
* @throws JSONException * @throws JSONException
*/ */
public Writer write(final Writer writer) throws JSONException { public Writer write(final Writer writer) throws JSONException {
@ -925,16 +839,15 @@ public class JSONArray {
} }
/** /**
* Write the contents of the JSONArray as JSON text to a writer. For * Write the contents of the JSONArray as JSON text to a writer. For compactness, no whitespace is added.
* compactness, no whitespace is added.
* <p/> * <p/>
* Warning: This method assumes that the data structure is acyclical. * Warning: This method assumes that the data structure is acyclical.
* *
* @param indentFactor * @param indentFactor The number of spaces to add to each level of indentation.
* The number of spaces to add to each level of indentation. * @param indent The indention of the top level.
* @param indent *
* The indention of the top level.
* @return The writer. * @return The writer.
*
* @throws JSONException * @throws JSONException
*/ */
Writer write(final Writer writer, final int indentFactor, final int indent) throws JSONException { Writer write(final Writer writer, final int indentFactor, final int indent) throws JSONException {
@ -945,8 +858,7 @@ public class JSONArray {
if (length == 1) { if (length == 1) {
JSONObject.writeValue(writer, this.myArrayList.get(0), indentFactor, indent); JSONObject.writeValue(writer, this.myArrayList.get(0), indentFactor, indent);
} } else if (length != 0) {
else if (length != 0) {
final int newindent = indent + indentFactor; final int newindent = indent + indentFactor;
for (int i = 0; i < length; i += 1) { for (int i = 0; i < length; i += 1) {
@ -967,8 +879,7 @@ public class JSONArray {
} }
writer.write(']'); writer.write(']');
return writer; return writer;
} } catch (final IOException e) {
catch (final IOException e) {
throw new JSONException(e); throw new JSONException(e);
} }
} }

View File

@ -8,13 +8,12 @@ package com.intellectualcrafters.json;
*/ */
public class JSONException extends RuntimeException { public class JSONException extends RuntimeException {
private static final long serialVersionUID = 0; private static final long serialVersionUID = 0;
private Throwable cause; private Throwable cause;
/** /**
* Constructs a JSONException with an explanatory message. * Constructs a JSONException with an explanatory message.
* *
* @param message * @param message Detail about the reason for the exception.
* Detail about the reason for the exception.
*/ */
public JSONException(final String message) { public JSONException(final String message) {
super(message); super(message);
@ -23,8 +22,7 @@ public class JSONException extends RuntimeException {
/** /**
* Constructs a new JSONException with the specified cause. * Constructs a new JSONException with the specified cause.
* *
* @param cause * @param cause The cause.
* The cause.
*/ */
public JSONException(final Throwable cause) { public JSONException(final Throwable cause) {
super(cause.getMessage()); super(cause.getMessage());
@ -32,11 +30,9 @@ public class JSONException extends RuntimeException {
} }
/** /**
* Returns the cause of this exception or null if the cause is nonexistent * Returns the cause of this exception or null if the cause is nonexistent or unknown.
* or unknown.
* *
* @return the cause of this exception or null if the cause is nonexistent * @return the cause of this exception or null if the cause is nonexistent or unknown.
* or unknown.
*/ */
@Override @Override
public Throwable getCause() { public Throwable getCause() {

View File

@ -3,9 +3,8 @@ package com.intellectualcrafters.json;
import java.util.Iterator; import java.util.Iterator;
/** /**
* This provides static methods to convert an XML text into a JSONArray or * This provides static methods to convert an XML text into a JSONArray or JSONObject, and to covert a JSONArray or
* JSONObject, and to covert a JSONArray or JSONObject into an XML text using * JSONObject into an XML text using the JsonML transform.
* the JsonML transform.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -15,14 +14,12 @@ public class JSONML {
/** /**
* Parse XML values and store them in a JSONArray. * Parse XML values and store them in a JSONArray.
* *
* @param x * @param x The XMLTokener containing the source string.
* The XMLTokener containing the source string. * @param arrayForm true if array form, false if object form.
* @param arrayForm * @param ja The JSONArray that is containing the current tag or null if we are at the outermost level.
* true if array form, false if object form. *
* @param ja
* The JSONArray that is containing the current tag or null
* if we are at the outermost level.
* @return A JSONArray if the value is the outermost tag, otherwise null. * @return A JSONArray if the value is the outermost tag, otherwise null.
*
* @throws JSONException * @throws JSONException
*/ */
private static Object parse(final XMLTokener x, final boolean arrayForm, final JSONArray ja) throws JSONException { private static Object parse(final XMLTokener x, final boolean arrayForm, final JSONArray ja) throws JSONException {
@ -61,8 +58,7 @@ public class JSONML {
throw x.syntaxError("Misshaped close tag"); throw x.syntaxError("Misshaped close tag");
} }
return token; return token;
} } else if (token == XML.BANG) {
else if (token == XML.BANG) {
// <! // <!
@ -70,53 +66,43 @@ public class JSONML {
if (c == '-') { if (c == '-') {
if (x.next() == '-') { if (x.next() == '-') {
x.skipPast("-->"); x.skipPast("-->");
} } else {
else {
x.back(); x.back();
} }
} } else if (c == '[') {
else if (c == '[') {
token = x.nextToken(); token = x.nextToken();
if (token.equals("CDATA") && (x.next() == '[')) { if (token.equals("CDATA") && (x.next() == '[')) {
if (ja != null) { if (ja != null) {
ja.put(x.nextCDATA()); ja.put(x.nextCDATA());
} }
} } else {
else {
throw x.syntaxError("Expected 'CDATA['"); throw x.syntaxError("Expected 'CDATA['");
} }
} } else {
else {
i = 1; i = 1;
do { do {
token = x.nextMeta(); token = x.nextMeta();
if (token == null) { if (token == null) {
throw x.syntaxError("Missing '>' after '<!'."); throw x.syntaxError("Missing '>' after '<!'.");
} } else if (token == XML.LT) {
else if (token == XML.LT) {
i += 1; i += 1;
} } else if (token == XML.GT) {
else if (token == XML.GT) {
i -= 1; i -= 1;
} }
} } while (i > 0);
while (i > 0);
} }
} } else if (token == XML.QUEST) {
else if (token == XML.QUEST) {
// <? // <?
x.skipPast("?>"); x.skipPast("?>");
} } else {
else {
throw x.syntaxError("Misshaped tag"); throw x.syntaxError("Misshaped tag");
} }
// Open tag < // Open tag <
} } else {
else {
if (!(token instanceof String)) { if (!(token instanceof String)) {
throw x.syntaxError("Bad tagName '" + token + "'."); throw x.syntaxError("Bad tagName '" + token + "'.");
} }
@ -128,15 +114,14 @@ public class JSONML {
if (ja != null) { if (ja != null) {
ja.put(newja); ja.put(newja);
} }
} } else {
else {
newjo.put("tagName", tagName); newjo.put("tagName", tagName);
if (ja != null) { if (ja != null) {
ja.put(newjo); ja.put(newjo);
} }
} }
token = null; token = null;
for (;;) { for (; ; ) {
if (token == null) { if (token == null) {
token = x.nextToken(); token = x.nextToken();
} }
@ -161,8 +146,7 @@ public class JSONML {
} }
newjo.accumulate(attribute, XML.stringToValue((String) token)); newjo.accumulate(attribute, XML.stringToValue((String) token));
token = null; token = null;
} } else {
else {
newjo.accumulate(attribute, ""); newjo.accumulate(attribute, "");
} }
} }
@ -179,16 +163,14 @@ public class JSONML {
if (ja == null) { if (ja == null) {
if (arrayForm) { if (arrayForm) {
return newja; return newja;
} } else {
else {
return newjo; return newjo;
} }
} }
// Content, between <...> and </...> // Content, between <...> and </...>
} } else {
else {
if (token != XML.GT) { if (token != XML.GT) {
throw x.syntaxError("Misshaped tag"); throw x.syntaxError("Misshaped tag");
} }
@ -204,16 +186,14 @@ public class JSONML {
if (ja == null) { if (ja == null) {
if (arrayForm) { if (arrayForm) {
return newja; return newja;
} } else {
else {
return newjo; return newjo;
} }
} }
} }
} }
} }
} } else {
else {
if (ja != null) { if (ja != null) {
ja.put(token instanceof String ? XML.stringToValue((String) token) : token); ja.put(token instanceof String ? XML.stringToValue((String) token) : token);
} }
@ -222,17 +202,15 @@ public class JSONML {
} }
/** /**
* Convert a well-formed (but not necessarily valid) XML string into a * Convert a well-formed (but not necessarily valid) XML string into a JSONArray using the JsonML transform. Each
* JSONArray using the JsonML transform. Each XML tag is represented as * XML tag is represented as a JSONArray in which the first element is the tag name. If the tag has attributes, then
* a JSONArray in which the first element is the tag name. If the tag has * the second element will be JSONObject containing the name/value pairs. If the tag contains children, then strings
* attributes, then the second element will be JSONObject containing the * and JSONArrays will represent the child tags. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
* name/value pairs. If the tag contains children, then strings and *
* JSONArrays will represent the child tags. * @param string The source string.
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
* *
* @param string
* The source string.
* @return A JSONArray containing the structured data from the XML string. * @return A JSONArray containing the structured data from the XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray toJSONArray(final String string) throws JSONException { public static JSONArray toJSONArray(final String string) throws JSONException {
@ -240,17 +218,16 @@ public class JSONML {
} }
/** /**
* Convert a well-formed (but not necessarily valid) XML string into a * Convert a well-formed (but not necessarily valid) XML string into a JSONArray using the JsonML transform. Each
* JSONArray using the JsonML transform. Each XML tag is represented as * XML tag is represented as a JSONArray in which the first element is the tag name. If the tag has attributes, then
* a JSONArray in which the first element is the tag name. If the tag has * the second element will be JSONObject containing the name/value pairs. If the tag contains children, then strings
* attributes, then the second element will be JSONObject containing the * and JSONArrays will represent the child content and tags. Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code>
* name/value pairs. If the tag contains children, then strings and * are ignored.
* JSONArrays will represent the child content and tags. *
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored. * @param x An XMLTokener.
* *
* @param x
* An XMLTokener.
* @return A JSONArray containing the structured data from the XML string. * @return A JSONArray containing the structured data from the XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONArray toJSONArray(final XMLTokener x) throws JSONException { public static JSONArray toJSONArray(final XMLTokener x) throws JSONException {
@ -258,18 +235,17 @@ public class JSONML {
} }
/** /**
* Convert a well-formed (but not necessarily valid) XML string into a * Convert a well-formed (but not necessarily valid) XML string into a JSONObject using the JsonML transform. Each
* JSONObject using the JsonML transform. Each XML tag is represented as * XML tag is represented as a JSONObject with a "tagName" property. If the tag has attributes, then the attributes
* a JSONObject with a "tagName" property. If the tag has attributes, then * will be in the JSONObject as properties. If the tag contains children, the object will have a "childNodes"
* the attributes will be in the JSONObject as properties. If the tag * property which will be an array of strings and JsonML JSONObjects.
* contains children, the object will have a "childNodes" property which
* will be an array of strings and JsonML JSONObjects.
* <p/> * <p/>
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored. * Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
* *
* @param x * @param x An XMLTokener of the XML source text.
* An XMLTokener of the XML source text. *
* @return A JSONObject containing the structured data from the XML string. * @return A JSONObject containing the structured data from the XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final XMLTokener x) throws JSONException { public static JSONObject toJSONObject(final XMLTokener x) throws JSONException {
@ -277,18 +253,17 @@ public class JSONML {
} }
/** /**
* Convert a well-formed (but not necessarily valid) XML string into a * Convert a well-formed (but not necessarily valid) XML string into a JSONObject using the JsonML transform. Each
* JSONObject using the JsonML transform. Each XML tag is represented as * XML tag is represented as a JSONObject with a "tagName" property. If the tag has attributes, then the attributes
* a JSONObject with a "tagName" property. If the tag has attributes, then * will be in the JSONObject as properties. If the tag contains children, the object will have a "childNodes"
* the attributes will be in the JSONObject as properties. If the tag * property which will be an array of strings and JsonML JSONObjects.
* contains children, the object will have a "childNodes" property which
* will be an array of strings and JsonML JSONObjects.
* <p/> * <p/>
* Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored. * Comments, prologs, DTDs, and <code>&lt;[ [ ]]></code> are ignored.
* *
* @param string * @param string The XML source text.
* The XML source text. *
* @return A JSONObject containing the structured data from the XML string. * @return A JSONObject containing the structured data from the XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final String string) throws JSONException { public static JSONObject toJSONObject(final String string) throws JSONException {
@ -298,9 +273,10 @@ public class JSONML {
/** /**
* Reverse the JSONML transformation, making an XML text from a JSONArray. * Reverse the JSONML transformation, making an XML text from a JSONArray.
* *
* @param ja * @param ja A JSONArray.
* A JSONArray. *
* @return An XML string. * @return An XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final JSONArray ja) throws JSONException { public static String toString(final JSONArray ja) throws JSONException {
@ -343,8 +319,7 @@ public class JSONML {
sb.append('"'); sb.append('"');
} }
} }
} } else {
else {
i = 1; i = 1;
} }
@ -354,8 +329,7 @@ public class JSONML {
if (i >= length) { if (i >= length) {
sb.append('/'); sb.append('/');
sb.append('>'); sb.append('>');
} } else {
else {
sb.append('>'); sb.append('>');
do { do {
object = ja.get(i); object = ja.get(i);
@ -363,16 +337,13 @@ public class JSONML {
if (object != null) { if (object != null) {
if (object instanceof String) { if (object instanceof String) {
sb.append(XML.escape(object.toString())); sb.append(XML.escape(object.toString()));
} } else if (object instanceof JSONObject) {
else if (object instanceof JSONObject) {
sb.append(toString((JSONObject) object)); sb.append(toString((JSONObject) object));
} } else if (object instanceof JSONArray) {
else if (object instanceof JSONArray) {
sb.append(toString((JSONArray) object)); sb.append(toString((JSONArray) object));
} }
} }
} } while (i < length);
while (i < length);
sb.append('<'); sb.append('<');
sb.append('/'); sb.append('/');
sb.append(tagName); sb.append(tagName);
@ -382,14 +353,14 @@ public class JSONML {
} }
/** /**
* Reverse the JSONML transformation, making an XML text from a JSONObject. * Reverse the JSONML transformation, making an XML text from a JSONObject. The JSONObject must contain a "tagName"
* The JSONObject must contain a "tagName" property. If it has children, * property. If it has children, then it must have a "childNodes" property containing an array of objects. The other
* then it must have a "childNodes" property containing an array of objects. * properties are attributes with string values.
* The other properties are attributes with string values. *
* @param jo A JSONObject.
* *
* @param jo
* A JSONObject.
* @return An XML string. * @return An XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final JSONObject jo) throws JSONException { public static String toString(final JSONObject jo) throws JSONException {
@ -439,8 +410,7 @@ public class JSONML {
if (ja == null) { if (ja == null) {
sb.append('/'); sb.append('/');
sb.append('>'); sb.append('>');
} } else {
else {
sb.append('>'); sb.append('>');
length = ja.length(); length = ja.length();
for (i = 0; i < length; i += 1) { for (i = 0; i < length; i += 1) {
@ -448,14 +418,11 @@ public class JSONML {
if (object != null) { if (object != null) {
if (object instanceof String) { if (object instanceof String) {
sb.append(XML.escape(object.toString())); sb.append(XML.escape(object.toString()));
} } else if (object instanceof JSONObject) {
else if (object instanceof JSONObject) {
sb.append(toString((JSONObject) object)); sb.append(toString((JSONObject) object));
} } else if (object instanceof JSONArray) {
else if (object instanceof JSONArray) {
sb.append(toString((JSONArray) object)); sb.append(toString((JSONArray) object));
} } else {
else {
sb.append(object.toString()); sb.append(object.toString());
} }
} }

View File

@ -1,18 +1,14 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
/** /**
* The <code>JSONString</code> interface allows a <code>toJSONString()</code> * The <code>JSONString</code> interface allows a <code>toJSONString()</code> method so that a class can change the
* method so that a class can change the behavior of * behavior of <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>, and
* <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>, * <code>JSONWriter.value(</code>Object<code>)</code>. The <code>toJSONString</code> method will be used instead of the
* and <code>JSONWriter.value(</code>Object<code>)</code>. The * default behavior of using the Object's <code>toString()</code> method and quoting the result.
* <code>toJSONString</code> method will be used instead of the default behavior
* of using the Object's <code>toString()</code> method and quoting the result.
*/ */
public interface JSONString { public interface JSONString {
/** /**
* The <code>toJSONString</code> method allows a class to produce its own * The <code>toJSONString</code> method allows a class to produce its own JSON serialization.
* JSON
* serialization.
* *
* @return A strictly syntactically correct JSON text. * @return A strictly syntactically correct JSON text.
*/ */

View File

@ -3,34 +3,30 @@ package com.intellectualcrafters.json;
import java.io.StringWriter; import java.io.StringWriter;
/** /**
* JSONStringer provides a quick and convenient way of producing JSON text. * JSONStringer provides a quick and convenient way of producing JSON text. The texts produced strictly conform to JSON
* The texts produced strictly conform to JSON syntax rules. No whitespace is * syntax rules. No whitespace is added, so the results are ready for transmission or storage. Each instance of
* added, so the results are ready for transmission or storage. Each instance of
* JSONStringer can produce one JSON text. * JSONStringer can produce one JSON text.
* <p/> * <p/>
* A JSONStringer instance provides a <code>value</code> method for appending * A JSONStringer instance provides a <code>value</code> method for appending values to the text, and a <code>key</code>
* values to the text, and a <code>key</code> method for adding keys before * method for adding keys before values in objects. There are <code>array</code> and <code>endArray</code> methods that
* values in objects. There are <code>array</code> and <code>endArray</code> * make and bound array values, and <code>object</code> and <code>endObject</code> methods which make and bound object
* methods that make and bound array values, and <code>object</code> and * values. All of these methods return the JSONWriter instance, permitting cascade style. For example,
* <code>endObject</code> methods which make and bound object values. All of * <p/>
* these methods return the JSONWriter instance, permitting cascade style. For
* example,
* <p/> * <p/>
*
* <pre> * <pre>
* myString = new JSONStringer().object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;).endObject().toString(); * myString = new JSONStringer().object().key(&quot;JSON&quot;).value(&quot;Hello,
* World!&quot;).endObject().toString();
* </pre> * </pre>
* <p/> * <p/>
* which produces the string * which produces the string
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* {"JSON":"Hello, World!"} * {"JSON":"Hello, World!"}
* </pre> * </pre>
* <p/> * <p/>
* The first method called must be <code>array</code> or <code>object</code>. * The first method called must be <code>array</code> or <code>object</code>. There are no methods for adding commas or
* There are no methods for adding commas or colons. JSONStringer adds them for * colons. JSONStringer adds them for you. Objects and arrays can be nested up to 20 levels deep.
* you. Objects and arrays can be nested up to 20 levels deep.
* <p/> * <p/>
* This can sometimes be easier than using a JSONObject to build a string. * This can sometimes be easier than using a JSONObject to build a string.
* *
@ -46,11 +42,9 @@ public class JSONStringer extends JSONWriter {
} }
/** /**
* Return the JSON text. This method is used to obtain the product of the * Return the JSON text. This method is used to obtain the product of the JSONStringer instance. It will return
* JSONStringer instance. It will return <code>null</code> if there was a * <code>null</code> if there was a problem in the construction of the JSON text (such as the calls to
* problem in the construction of the JSON text (such as the calls to * <code>array</code> were not properly balanced with calls to <code>endArray</code>).
* <code>array</code> were not properly balanced with calls to
* <code>endArray</code>).
* *
* @return The JSON text. * @return The JSON text.
*/ */

View File

@ -1,16 +1,10 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
import java.io.BufferedReader; import java.io.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
/** /**
* A JSONTokener takes a source string and extracts characters and tokens from * A JSONTokener takes a source string and extracts characters and tokens from it. It is used by the JSONObject and
* it. It is used by the JSONObject and JSONArray constructors to parse * JSONArray constructors to parse JSON source strings.
* JSON source strings.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -18,18 +12,17 @@ import java.io.StringReader;
public class JSONTokener { public class JSONTokener {
private final Reader reader; private final Reader reader;
private long character; private long character;
private boolean eof; private boolean eof;
private long index; private long index;
private long line; private long line;
private char previous; private char previous;
private boolean usePrevious; private boolean usePrevious;
/** /**
* Construct a JSONTokener from a Reader. * Construct a JSONTokener from a Reader.
* *
* @param reader * @param reader A reader.
* A reader.
*/ */
public JSONTokener(final Reader reader) { public JSONTokener(final Reader reader) {
this.reader = reader.markSupported() ? reader : new BufferedReader(reader); this.reader = reader.markSupported() ? reader : new BufferedReader(reader);
@ -44,8 +37,7 @@ public class JSONTokener {
/** /**
* Construct a JSONTokener from an InputStream. * Construct a JSONTokener from an InputStream.
* *
* @param inputStream * @param inputStream The source.
* The source.
*/ */
public JSONTokener(final InputStream inputStream) throws JSONException { public JSONTokener(final InputStream inputStream) throws JSONException {
this(new InputStreamReader(inputStream)); this(new InputStreamReader(inputStream));
@ -54,8 +46,7 @@ public class JSONTokener {
/** /**
* Construct a JSONTokener from a string. * Construct a JSONTokener from a string.
* *
* @param s * @param s A source string.
* A source string.
*/ */
public JSONTokener(final String s) { public JSONTokener(final String s) {
this(new StringReader(s)); this(new StringReader(s));
@ -64,9 +55,8 @@ public class JSONTokener {
/** /**
* Get the hex value of a character (base16). * Get the hex value of a character (base16).
* *
* @param c * @param c A character between '0' and '9' or between 'A' and 'F' or between 'a' and 'f'.
* A character between '0' and '9' or between 'A' and 'F' or *
* between 'a' and 'f'.
* @return An int between 0 and 15, or -1 if c was not a hex digit. * @return An int between 0 and 15, or -1 if c was not a hex digit.
*/ */
public static int dehexchar(final char c) { public static int dehexchar(final char c) {
@ -83,9 +73,8 @@ public class JSONTokener {
} }
/** /**
* Back up one character. This provides a sort of lookahead capability, * Back up one character. This provides a sort of lookahead capability, so that you can test for a digit or letter
* so that you can test for a digit or letter before attempting to parse * before attempting to parse the next number or identifier.
* the next number or identifier.
*/ */
public void back() throws JSONException { public void back() throws JSONException {
if (this.usePrevious || (this.index <= 0)) { if (this.usePrevious || (this.index <= 0)) {
@ -102,8 +91,7 @@ public class JSONTokener {
} }
/** /**
* Determine if the source string still contains characters that next() * Determine if the source string still contains characters that next() can consume.
* can consume.
* *
* @return true if not yet at the end of the source. * @return true if not yet at the end of the source.
*/ */
@ -126,12 +114,10 @@ public class JSONTokener {
if (this.usePrevious) { if (this.usePrevious) {
this.usePrevious = false; this.usePrevious = false;
c = this.previous; c = this.previous;
} } else {
else {
try { try {
c = this.reader.read(); c = this.reader.read();
} } catch (final IOException exception) {
catch (final IOException exception) {
throw new JSONException(exception); throw new JSONException(exception);
} }
@ -144,12 +130,10 @@ public class JSONTokener {
if (this.previous == '\r') { if (this.previous == '\r') {
this.line += 1; this.line += 1;
this.character = c == '\n' ? 0 : 1; this.character = c == '\n' ? 0 : 1;
} } else if (c == '\n') {
else if (c == '\n') {
this.line += 1; this.line += 1;
this.character = 0; this.character = 0;
} } else {
else {
this.character += 1; this.character += 1;
} }
this.previous = (char) c; this.previous = (char) c;
@ -157,14 +141,13 @@ public class JSONTokener {
} }
/** /**
* Consume the next character, and check that it matches a specified * Consume the next character, and check that it matches a specified character.
* character. *
* @param c The character to match.
* *
* @param c
* The character to match.
* @return The character. * @return The character.
* @throws JSONException *
* if the character does not match. * @throws JSONException if the character does not match.
*/ */
public char next(final char c) throws JSONException { public char next(final char c) throws JSONException {
final char n = this.next(); final char n = this.next();
@ -177,12 +160,11 @@ public class JSONTokener {
/** /**
* Get the next n characters. * Get the next n characters.
* *
* @param n * @param n The number of characters to take.
* The number of characters to take. *
* @return A string of n characters. * @return A string of n characters.
* @throws JSONException *
* Substring bounds error if there are not * @throws JSONException Substring bounds error if there are not n characters remaining in the source string.
* n characters remaining in the source string.
*/ */
public String next(final int n) throws JSONException { public String next(final int n) throws JSONException {
if (n == 0) { if (n == 0) {
@ -206,10 +188,11 @@ public class JSONTokener {
* Get the next char in the string, skipping whitespace. * Get the next char in the string, skipping whitespace.
* *
* @return A character, or 0 if there are no more characters. * @return A character, or 0 if there are no more characters.
*
* @throws JSONException * @throws JSONException
*/ */
public char nextClean() throws JSONException { public char nextClean() throws JSONException {
for (;;) { for (; ; ) {
final char c = this.next(); final char c = this.next();
if ((c == 0) || (c > ' ')) { if ((c == 0) || (c > ' ')) {
return c; return c;
@ -218,23 +201,20 @@ public class JSONTokener {
} }
/** /**
* Return the characters up to the next close quote character. * Return the characters up to the next close quote character. Backslash processing is done. The formal JSON format
* Backslash processing is done. The formal JSON format does not * does not allow strings in single quotes, but an implementation is allowed to accept them.
* allow strings in single quotes, but an implementation is allowed to *
* accept them. * @param quote The quoting character, either <code>"</code> &nbsp;<small>(double quote)</small> or <code>'</code>
* &nbsp;<small>(single quote)</small>.
* *
* @param quote
* The quoting character, either <code>"</code>
* &nbsp;<small>(double quote)</small> or <code>'</code>
* &nbsp;<small>(single quote)</small>.
* @return A String. * @return A String.
* @throws JSONException *
* Unterminated string. * @throws JSONException Unterminated string.
*/ */
public String nextString(final char quote) throws JSONException { public String nextString(final char quote) throws JSONException {
char c; char c;
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (;;) { for (; ; ) {
c = this.next(); c = this.next();
switch (c) { switch (c) {
case 0: case 0:
@ -282,16 +262,15 @@ public class JSONTokener {
} }
/** /**
* Get the text up but not including the specified character or the * Get the text up but not including the specified character or the end of line, whichever comes first.
* end of line, whichever comes first. *
* @param delimiter A delimiter character.
* *
* @param delimiter
* A delimiter character.
* @return A string. * @return A string.
*/ */
public String nextTo(final char delimiter) throws JSONException { public String nextTo(final char delimiter) throws JSONException {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (;;) { for (; ; ) {
final char c = this.next(); final char c = this.next();
if ((c == delimiter) || (c == 0) || (c == '\n') || (c == '\r')) { if ((c == delimiter) || (c == 0) || (c == '\n') || (c == '\r')) {
if (c != 0) { if (c != 0) {
@ -304,17 +283,17 @@ public class JSONTokener {
} }
/** /**
* Get the text up but not including one of the specified delimiter * Get the text up but not including one of the specified delimiter characters or the end of line, whichever comes
* characters or the end of line, whichever comes first. * first.
*
* @param delimiters A set of delimiter characters.
* *
* @param delimiters
* A set of delimiter characters.
* @return A string, trimmed. * @return A string, trimmed.
*/ */
public String nextTo(final String delimiters) throws JSONException { public String nextTo(final String delimiters) throws JSONException {
char c; char c;
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (;;) { for (; ; ) {
c = this.next(); c = this.next();
if ((delimiters.indexOf(c) >= 0) || (c == 0) || (c == '\n') || (c == '\r')) { if ((delimiters.indexOf(c) >= 0) || (c == 0) || (c == '\n') || (c == '\r')) {
if (c != 0) { if (c != 0) {
@ -327,12 +306,12 @@ public class JSONTokener {
} }
/** /**
* Get the next value. The value can be a Boolean, Double, Integer, * Get the next value. The value can be a Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
* JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. * JSONObject.NULL object.
* *
* @return An object. * @return An object.
* @throws JSONException *
* If syntax error. * @throws JSONException If syntax error.
*/ */
public Object nextValue() throws JSONException { public Object nextValue() throws JSONException {
char c = this.nextClean(); char c = this.nextClean();
@ -373,13 +352,12 @@ public class JSONTokener {
} }
/** /**
* Skip characters until the next character is the requested character. * Skip characters until the next character is the requested character. If the requested character is not found, no
* If the requested character is not found, no characters are skipped. * characters are skipped.
* *
* @param to * @param to A character to skip to.
* A character to skip to. *
* @return The requested character, or zero if the requested character * @return The requested character, or zero if the requested character is not found.
* is not found.
*/ */
public char skipTo(final char to) throws JSONException { public char skipTo(final char to) throws JSONException {
char c; char c;
@ -397,10 +375,8 @@ public class JSONTokener {
this.line = startLine; this.line = startLine;
return c; return c;
} }
} } while (c != to);
while (c != to); } catch (final IOException exception) {
}
catch (final IOException exception) {
throw new JSONException(exception); throw new JSONException(exception);
} }
this.back(); this.back();
@ -410,8 +386,8 @@ public class JSONTokener {
/** /**
* Make a JSONException to signal a syntax error. * Make a JSONException to signal a syntax error.
* *
* @param message * @param message The error message.
* The error message. *
* @return A JSONException object, suitable for throwing * @return A JSONException object, suitable for throwing
*/ */
public JSONException syntaxError(final String message) { public JSONException syntaxError(final String message) {

View File

@ -4,34 +4,29 @@ import java.io.IOException;
import java.io.Writer; import java.io.Writer;
/** /**
* JSONWriter provides a quick and convenient way of producing JSON text. * JSONWriter provides a quick and convenient way of producing JSON text. The texts produced strictly conform to JSON
* The texts produced strictly conform to JSON syntax rules. No whitespace is * syntax rules. No whitespace is added, so the results are ready for transmission or storage. Each instance of
* added, so the results are ready for transmission or storage. Each instance of
* JSONWriter can produce one JSON text. * JSONWriter can produce one JSON text.
* <p/> * <p/>
* A JSONWriter instance provides a <code>value</code> method for appending * A JSONWriter instance provides a <code>value</code> method for appending values to the text, and a <code>key</code>
* values to the text, and a <code>key</code> method for adding keys before * method for adding keys before values in objects. There are <code>array</code> and <code>endArray</code> methods that
* values in objects. There are <code>array</code> and <code>endArray</code> * make and bound array values, and <code>object</code> and <code>endObject</code> methods which make and bound object
* methods that make and bound array values, and <code>object</code> and * values. All of these methods return the JSONWriter instance, permitting a cascade style. For example,
* <code>endObject</code> methods which make and bound object values. All of * <p/>
* these methods return the JSONWriter instance, permitting a cascade style. For
* example,
* <p/> * <p/>
*
* <pre> * <pre>
* new JSONWriter(myWriter).object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;).endObject(); * new JSONWriter(myWriter).object().key(&quot;JSON&quot;).value(&quot;Hello, World!&quot;).endObject();
* </pre> * </pre>
* <p/> * <p/>
* which writes * which writes
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* {"JSON":"Hello, World!"} * {"JSON":"Hello, World!"}
* </pre> * </pre>
* <p/> * <p/>
* The first method called must be <code>array</code> or <code>object</code>. * The first method called must be <code>array</code> or <code>object</code>. There are no methods for adding commas or
* There are no methods for adding commas or colons. JSONWriter adds them for * colons. JSONWriter adds them for you. Objects and arrays can be nested up to 20 levels deep.
* you. Objects and arrays can be nested up to 20 levels deep.
* <p/> * <p/>
* This can sometimes be easier than using a JSONObject to build a string. * This can sometimes be easier than using a JSONObject to build a string.
* *
@ -43,29 +38,23 @@ public class JSONWriter {
/** /**
* The writer that will receive the output. * The writer that will receive the output.
*/ */
protected final Writer writer; protected final Writer writer;
/** /**
* The object/array stack. * The object/array stack.
*/ */
private final JSONObject stack[]; private final JSONObject stack[];
/** /**
* The current mode. Values: * The current mode. Values: 'a' (array), 'd' (done), 'i' (initial), 'k' (key), 'o' (object).
* 'a' (array),
* 'd' (done),
* 'i' (initial),
* 'k' (key),
* 'o' (object).
*/ */
protected char mode; protected char mode;
/** /**
* The comma flag determines if a comma should be output before the next * The comma flag determines if a comma should be output before the next value.
* value.
*/ */
private boolean comma; private boolean comma;
/** /**
* The stack top index. A value of 0 indicates that the stack is empty. * The stack top index. A value of 0 indicates that the stack is empty.
*/ */
private int top; private int top;
/** /**
* Make a fresh JSONWriter. It can be used to build one JSON text. * Make a fresh JSONWriter. It can be used to build one JSON text.
@ -81,11 +70,11 @@ public class JSONWriter {
/** /**
* Append a value. * Append a value.
* *
* @param string * @param string A string value.
* A string value. *
* @return this * @return this
* @throws JSONException *
* If the value is out of sequence. * @throws JSONException If the value is out of sequence.
*/ */
private JSONWriter append(final String string) throws JSONException { private JSONWriter append(final String string) throws JSONException {
if (string == null) { if (string == null) {
@ -97,8 +86,7 @@ public class JSONWriter {
this.writer.write(','); this.writer.write(',');
} }
this.writer.write(string); this.writer.write(string);
} } catch (final IOException e) {
catch (final IOException e) {
throw new JSONException(e); throw new JSONException(e);
} }
if (this.mode == 'o') { if (this.mode == 'o') {
@ -111,16 +99,13 @@ public class JSONWriter {
} }
/** /**
* Begin appending a new array. All values until the balancing * Begin appending a new array. All values until the balancing <code>endArray</code> will be appended to this array.
* <code>endArray</code> will be appended to this array. The * The <code>endArray</code> method must be called to mark the array's end.
* <code>endArray</code> method must be called to mark the array's end.
* *
* @return this * @return this
* @throws JSONException *
* If the nesting is too deep, or if the object is * @throws JSONException If the nesting is too deep, or if the object is started in the wrong place (for example as
* started in the wrong place (for example as a key or after the * a key or after the end of the outermost array or object).
* end of the
* outermost array or object).
*/ */
public JSONWriter array() throws JSONException { public JSONWriter array() throws JSONException {
if ((this.mode == 'i') || (this.mode == 'o') || (this.mode == 'a')) { if ((this.mode == 'i') || (this.mode == 'o') || (this.mode == 'a')) {
@ -135,13 +120,12 @@ public class JSONWriter {
/** /**
* End something. * End something.
* *
* @param mode * @param mode Mode
* Mode * @param c Closing character
* @param c *
* Closing character
* @return this * @return this
* @throws JSONException *
* If unbalanced. * @throws JSONException If unbalanced.
*/ */
private JSONWriter end(final char mode, final char c) throws JSONException { private JSONWriter end(final char mode, final char c) throws JSONException {
if (this.mode != mode) { if (this.mode != mode) {
@ -150,8 +134,7 @@ public class JSONWriter {
this.pop(mode); this.pop(mode);
try { try {
this.writer.write(c); this.writer.write(c);
} } catch (final IOException e) {
catch (final IOException e) {
throw new JSONException(e); throw new JSONException(e);
} }
this.comma = true; this.comma = true;
@ -159,39 +142,37 @@ public class JSONWriter {
} }
/** /**
* End an array. This method most be called to balance calls to * End an array. This method most be called to balance calls to <code>array</code>.
* <code>array</code>.
* *
* @return this * @return this
* @throws JSONException *
* If incorrectly nested. * @throws JSONException If incorrectly nested.
*/ */
public JSONWriter endArray() throws JSONException { public JSONWriter endArray() throws JSONException {
return this.end('a', ']'); return this.end('a', ']');
} }
/** /**
* End an object. This method most be called to balance calls to * End an object. This method most be called to balance calls to <code>object</code>.
* <code>object</code>.
* *
* @return this * @return this
* @throws JSONException *
* If incorrectly nested. * @throws JSONException If incorrectly nested.
*/ */
public JSONWriter endObject() throws JSONException { public JSONWriter endObject() throws JSONException {
return this.end('k', '}'); return this.end('k', '}');
} }
/** /**
* Append a key. The key will be associated with the next value. In an * Append a key. The key will be associated with the next value. In an object, every value must be preceded by a
* object, every value must be preceded by a key. * key.
*
* @param string A key string.
* *
* @param string
* A key string.
* @return this * @return this
* @throws JSONException *
* If the key is out of place. For example, keys * @throws JSONException If the key is out of place. For example, keys do not belong in arrays or if the key is
* do not belong in arrays or if the key is null. * null.
*/ */
public JSONWriter key(final String string) throws JSONException { public JSONWriter key(final String string) throws JSONException {
if (string == null) { if (string == null) {
@ -208,8 +189,7 @@ public class JSONWriter {
this.comma = false; this.comma = false;
this.mode = 'o'; this.mode = 'o';
return this; return this;
} } catch (final IOException e) {
catch (final IOException e) {
throw new JSONException(e); throw new JSONException(e);
} }
} }
@ -217,16 +197,13 @@ public class JSONWriter {
} }
/** /**
* Begin appending a new object. All keys and values until the balancing * Begin appending a new object. All keys and values until the balancing <code>endObject</code> will be appended to
* <code>endObject</code> will be appended to this object. The * this object. The <code>endObject</code> method must be called to mark the object's end.
* <code>endObject</code> method must be called to mark the object's end.
* *
* @return this * @return this
* @throws JSONException *
* If the nesting is too deep, or if the object is * @throws JSONException If the nesting is too deep, or if the object is started in the wrong place (for example as
* started in the wrong place (for example as a key or after the * a key or after the end of the outermost array or object).
* end of the
* outermost array or object).
*/ */
public JSONWriter object() throws JSONException { public JSONWriter object() throws JSONException {
if (this.mode == 'i') { if (this.mode == 'i') {
@ -245,10 +222,9 @@ public class JSONWriter {
/** /**
* Pop an array or object scope. * Pop an array or object scope.
* *
* @param c * @param c The scope to close.
* The scope to close. *
* @throws JSONException * @throws JSONException If nesting is wrong.
* If nesting is wrong.
*/ */
private void pop(final char c) throws JSONException { private void pop(final char c) throws JSONException {
if (this.top <= 0) { if (this.top <= 0) {
@ -265,10 +241,9 @@ public class JSONWriter {
/** /**
* Push an array or object scope. * Push an array or object scope.
* *
* @param jo * @param jo The scope to open.
* The scope to open. *
* @throws JSONException * @throws JSONException If nesting is too deep.
* If nesting is too deep.
*/ */
private void push(final JSONObject jo) throws JSONException { private void push(final JSONObject jo) throws JSONException {
if (this.top >= maxdepth) { if (this.top >= maxdepth) {
@ -280,12 +255,12 @@ public class JSONWriter {
} }
/** /**
* Append either the value <code>true</code> or the value <code>false</code> * Append either the value <code>true</code> or the value <code>false</code> .
* . *
* @param b A boolean.
* *
* @param b
* A boolean.
* @return this * @return this
*
* @throws JSONException * @throws JSONException
*/ */
public JSONWriter value(final boolean b) throws JSONException { public JSONWriter value(final boolean b) throws JSONException {
@ -295,11 +270,11 @@ public class JSONWriter {
/** /**
* Append a double value. * Append a double value.
* *
* @param d * @param d A double.
* A double. *
* @return this * @return this
* @throws JSONException *
* If the number is not finite. * @throws JSONException If the number is not finite.
*/ */
public JSONWriter value(final double d) throws JSONException { public JSONWriter value(final double d) throws JSONException {
return this.value(new Double(d)); return this.value(new Double(d));
@ -308,9 +283,10 @@ public class JSONWriter {
/** /**
* Append a long value. * Append a long value.
* *
* @param l * @param l A long.
* A long. *
* @return this * @return this
*
* @throws JSONException * @throws JSONException
*/ */
public JSONWriter value(final long l) throws JSONException { public JSONWriter value(final long l) throws JSONException {
@ -320,13 +296,12 @@ public class JSONWriter {
/** /**
* Append an object value. * Append an object value.
* *
* @param object * @param object The object to append. It can be null, or a Boolean, Number, String, JSONObject, or JSONArray, or an
* The object to append. It can be null, or a Boolean, Number, * object that implements JSONString.
* String, JSONObject, or JSONArray, or an object that implements *
* JSONString.
* @return this * @return this
* @throws JSONException *
* If the value is out of sequence. * @throws JSONException If the value is out of sequence.
*/ */
public JSONWriter value(final Object object) throws JSONException { public JSONWriter value(final Object object) throws JSONException {
return this.append(JSONObject.valueToString(object)); return this.append(JSONObject.valueToString(object));

View File

@ -1,67 +1,56 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
/** /**
* Kim makes immutable eight bit Unicode strings. If the MSB of a byte is set, * Kim makes immutable eight bit Unicode strings. If the MSB of a byte is set, then the next byte is a continuation
* then the next byte is a continuation byte. The last byte of a character * byte. The last byte of a character never has the MSB reset. Every byte that is not the last byte has the MSB set. Kim
* never has the MSB reset. Every byte that is not the last byte has the MSB * stands for "Keep it minimal". A Unicode character is never longer than 3 bytes. Every byte contributes 7 bits to the
* set. Kim stands for "Keep it minimal". A Unicode character is never longer * character. ASCII is unmodified.
* than 3 bytes. Every byte contributes 7 bits to the character. ASCII is
* unmodified.
* <p/> * <p/>
* Kim UTF-8 one byte U+007F U+007F two bytes U+3FFF U+07FF three bytes U+10FFF * Kim UTF-8 one byte U+007F U+007F two bytes U+3FFF U+07FF three bytes U+10FFF U+FFFF four bytes U+10FFFF
* U+FFFF four bytes U+10FFFF
* <p/> * <p/>
* Characters in the ranges U+0800..U+3FFF and U+10000..U+10FFFF will be one * Characters in the ranges U+0800..U+3FFF and U+10000..U+10FFFF will be one byte smaller when encoded in Kim compared
* byte smaller when encoded in Kim compared to UTF-8. * to UTF-8.
* <p/> * <p/>
* Kim is beneficial when using scripts such as Old South Arabian, Aramaic, * Kim is beneficial when using scripts such as Old South Arabian, Aramaic, Avestan, Balinese, Batak, Bopomofo,
* Avestan, Balinese, Batak, Bopomofo, Buginese, Buhid, Carian, Cherokee, * Buginese, Buhid, Carian, Cherokee, Coptic, Cyrillic, Deseret, Egyptian Hieroglyphs, Ethiopic, Georgian, Glagolitic,
* Coptic, Cyrillic, Deseret, Egyptian Hieroglyphs, Ethiopic, Georgian, * Gothic, Hangul Jamo, Hanunoo, Hiragana, Kanbun, Kaithi, Kannada, Katakana, Kharoshthi, Khmer, Lao, Lepcha, Limbu,
* Glagolitic, Gothic, Hangul Jamo, Hanunoo, Hiragana, Kanbun, Kaithi, Kannada, * Lycian, Lydian, Malayalam, Mandaic, Meroitic, Miao, Mongolian, Myanmar, New Tai Lue, Ol Chiki, Old Turkic, Oriya,
* Katakana, Kharoshthi, Khmer, Lao, Lepcha, Limbu, Lycian, Lydian, Malayalam, * Osmanya, Pahlavi, Parthian, Phags-Pa, Phoenician, Samaritan, Sharada, Sinhala, Sora Sompeng, Tagalog, Tagbanwa,
* Mandaic, Meroitic, Miao, Mongolian, Myanmar, New Tai Lue, Ol Chiki, Old * Takri, Tai Le, Tai Tham, Tamil, Telugu, Thai, Tibetan, Tifinagh, UCAS.
* Turkic, Oriya, Osmanya, Pahlavi, Parthian, Phags-Pa, Phoenician, Samaritan,
* Sharada, Sinhala, Sora Sompeng, Tagalog, Tagbanwa, Takri, Tai Le, Tai Tham,
* Tamil, Telugu, Thai, Tibetan, Tifinagh, UCAS.
* <p/> * <p/>
* A kim object can be constructed from an ordinary UTF-16 string, or from a * A kim object can be constructed from an ordinary UTF-16 string, or from a byte array. A kim object can produce a
* byte array. A kim object can produce a UTF-16 string. * UTF-16 string.
* <p/> * <p/>
* As with UTF-8, it is possible to detect character boundaries within a byte * As with UTF-8, it is possible to detect character boundaries within a byte sequence. UTF-8 is one of the world's
* sequence. UTF-8 is one of the world's great inventions. While Kim is more * great inventions. While Kim is more efficient, it is not clear that it is worth the expense of transition.
* efficient, it is not clear that it is worth the expense of transition.
* *
* @version 2013-04-18 * @version 2013-04-18
*/ */
public class Kim { public class Kim {
/** /**
* The number of bytes in the kim. The number of bytes can be as much as * The number of bytes in the kim. The number of bytes can be as much as three times the number of characters.
* three times the number of characters.
*/ */
public int length = 0; public int length = 0;
/** /**
* The byte array containing the kim's content. * The byte array containing the kim's content.
*/ */
private byte[] bytes = null; private byte[] bytes = null;
/** /**
* The kim's hashcode, conforming to Java's hashcode conventions. * The kim's hashcode, conforming to Java's hashcode conventions.
*/ */
private int hashcode = 0; private int hashcode = 0;
/** /**
* The memoization of toString(). * The memoization of toString().
*/ */
private String string = null; private String string = null;
/** /**
* Make a kim from a portion of a byte array. * Make a kim from a portion of a byte array.
* *
* @param bytes * @param bytes A byte array.
* A byte array. * @param from The index of the first byte.
* @param from * @param thru The index of the last byte plus one.
* The index of the first byte.
* @param thru
* The index of the last byte plus one.
*/ */
public Kim(final byte[] bytes, final int from, final int thru) { public Kim(final byte[] bytes, final int from, final int thru) {
@ -88,25 +77,19 @@ public class Kim {
/** /**
* Make a kim from a byte array. * Make a kim from a byte array.
* *
* @param bytes * @param bytes The byte array.
* The byte array. * @param length The number of bytes.
* @param length
* The number of bytes.
*/ */
public Kim(final byte[] bytes, final int length) { public Kim(final byte[] bytes, final int length) {
this(bytes, 0, length); this(bytes, 0, length);
} }
/** /**
* Make a new kim from a substring of an existing kim. The coordinates are * Make a new kim from a substring of an existing kim. The coordinates are in byte units, not character units.
* in byte units, not character units.
* *
* @param kim * @param kim The source of bytes.
* The source of bytes. * @param from The point at which to take bytes.
* @param from * @param thru The point at which to stop taking bytes.
* The point at which to take bytes.
* @param thru
* The point at which to stop taking bytes.
*/ */
public Kim(final Kim kim, final int from, final int thru) { public Kim(final Kim kim, final int from, final int thru) {
this(kim.bytes, from, thru); this(kim.bytes, from, thru);
@ -115,10 +98,9 @@ public class Kim {
/** /**
* Make a kim from a string. * Make a kim from a string.
* *
* @param string * @param string The string.
* The string. *
* @throws JSONException * @throws JSONException if surrogate pair mismatch.
* if surrogate pair mismatch.
*/ */
public Kim(final String string) throws JSONException { public Kim(final String string) throws JSONException {
final int stringLength = string.length(); final int stringLength = string.length();
@ -133,11 +115,9 @@ public class Kim {
final int c = string.charAt(i); final int c = string.charAt(i);
if (c <= 0x7F) { if (c <= 0x7F) {
this.length += 1; this.length += 1;
} } else if (c <= 0x3FFF) {
else if (c <= 0x3FFF) {
this.length += 2; this.length += 2;
} } else {
else {
if ((c >= 0xD800) && (c <= 0xDFFF)) { if ((c >= 0xD800) && (c <= 0xDFFF)) {
i += 1; i += 1;
final int d = string.charAt(i); final int d = string.charAt(i);
@ -164,8 +144,7 @@ public class Kim {
sum += character; sum += character;
this.hashcode += sum; this.hashcode += sum;
at += 1; at += 1;
} } else if (character <= 0x3FFF) {
else if (character <= 0x3FFF) {
b = 0x80 | (character >>> 7); b = 0x80 | (character >>> 7);
this.bytes[at] = (byte) b; this.bytes[at] = (byte) b;
sum += b; sum += b;
@ -176,8 +155,7 @@ public class Kim {
sum += b; sum += b;
this.hashcode += sum; this.hashcode += sum;
at += 1; at += 1;
} } else {
else {
if ((character >= 0xD800) && (character <= 0xDBFF)) { if ((character >= 0xD800) && (character <= 0xDBFF)) {
i += 1; i += 1;
character = (((character & 0x3FF) << 10) | (string.charAt(i) & 0x3FF)) + 65536; character = (((character & 0x3FF) << 10) | (string.charAt(i) & 0x3FF)) + 65536;
@ -204,14 +182,13 @@ public class Kim {
} }
/** /**
* Returns the number of bytes needed to contain the character in Kim * Returns the number of bytes needed to contain the character in Kim format.
* format. *
* @param character a Unicode character between 0 and 0x10FFFF.
* *
* @param character
* a Unicode character between 0 and 0x10FFFF.
* @return 1, 2, or 3 * @return 1, 2, or 3
* @throws JSONException *
* if the character is not representable in a kim. * @throws JSONException if the character is not representable in a kim.
*/ */
public static int characterSize(final int character) throws JSONException { public static int characterSize(final int character) throws JSONException {
if ((character < 0) || (character > 0x10FFFF)) { if ((character < 0) || (character > 0x10FFFF)) {
@ -221,14 +198,12 @@ public class Kim {
} }
/** /**
* Returns the character at the specified index. The index refers to byte * Returns the character at the specified index. The index refers to byte values and ranges from 0 to length - 1.
* values and ranges from 0 to length - 1. The index of the next character * The index of the next character is at index + Kim.characterSize(kim.characterAt(index)).
* is at index + Kim.characterSize(kim.characterAt(index)).
* *
* @param at * @param at the index of the char value. The first character is at 0.
* the index of the char value. The first character is at 0. *
* @throws JSONException * @throws JSONException if at does not point to a valid character.
* if at does not point to a valid character.
* @returns a Unicode character between 0 and 0x10FFFF. * @returns a Unicode character between 0 and 0x10FFFF.
*/ */
public int characterAt(final int at) throws JSONException { public int characterAt(final int at) throws JSONException {
@ -243,8 +218,7 @@ public class Kim {
if (character > 0x7F) { if (character > 0x7F) {
return character; return character;
} }
} } else {
else {
final int c2 = get(at + 2); final int c2 = get(at + 2);
character = ((c & 0x7F) << 14) | ((c1 & 0x7F) << 7) | c2; character = ((c & 0x7F) << 14) | ((c1 & 0x7F) << 7) | c2;
if (((c2 & 0x80) == 0) && (character > 0x3FFF) && (character <= 0x10FFFF) && ((character < 0xD800) || (character > 0xDFFF))) { if (((c2 & 0x80) == 0) && (character > 0x3FFF) && (character <= 0x10FFFF) && ((character < 0xD800) || (character > 0xDFFF))) {
@ -257,10 +231,9 @@ public class Kim {
/** /**
* Copy the contents of this kim to a byte array. * Copy the contents of this kim to a byte array.
* *
* @param bytes * @param bytes A byte array of sufficient size.
* A byte array of sufficient size. * @param at The position within the byte array to take the byes.
* @param at *
* The position within the byte array to take the byes.
* @return The position immediately after the copy. * @return The position immediately after the copy.
*/ */
public int copy(final byte[] bytes, final int at) { public int copy(final byte[] bytes, final int at) {
@ -269,13 +242,11 @@ public class Kim {
} }
/** /**
* Two kim objects containing exactly the same bytes in the same order are * Two kim objects containing exactly the same bytes in the same order are equal to each other.
* equal to each other.
* *
* @param obj * @param obj the other kim with which to compare.
* the other kim with which to compare. *
* @returns true if this and obj are both kim objects containing identical * @returns true if this and obj are both kim objects containing identical byte sequences.
* byte sequences.
*/ */
@Override @Override
public boolean equals(final Object obj) { public boolean equals(final Object obj) {
@ -295,11 +266,11 @@ public class Kim {
/** /**
* Get a byte from a kim. * Get a byte from a kim.
* *
* @param at * @param at The position of the byte. The first byte is at 0.
* The position of the byte. The first byte is at 0. *
* @return The byte. * @return The byte.
* @throws JSONException *
* if there is no byte at that position. * @throws JSONException if there is no byte at that position.
*/ */
public int get(final int at) throws JSONException { public int get(final int at) throws JSONException {
if ((at < 0) || (at > this.length)) { if ((at < 0) || (at > this.length)) {
@ -317,13 +288,12 @@ public class Kim {
} }
/** /**
* Produce a UTF-16 String from this kim. The number of codepoints in the * Produce a UTF-16 String from this kim. The number of codepoints in the string will not be greater than the number
* string will not be greater than the number of bytes in the kim, although * of bytes in the kim, although it could be less.
* it could be less.
* *
* @return The string. A kim memoizes its string representation. * @return The string. A kim memoizes its string representation.
* @throws JSONException *
* if the kim is not valid. * @throws JSONException if the kim is not valid.
*/ */
@Override @Override
public String toString() throws JSONException { public String toString() throws JSONException {
@ -336,8 +306,7 @@ public class Kim {
if (c < 0x10000) { if (c < 0x10000) {
chars[length] = (char) c; chars[length] = (char) c;
length += 1; length += 1;
} } else {
else {
chars[length] = (char) (0xD800 | ((c - 0x10000) >>> 10)); chars[length] = (char) (0xD800 | ((c - 0x10000) >>> 10));
length += 1; length += 1;
chars[length] = (char) (0xDC00 | (c & 0x03FF)); chars[length] = (char) (0xDC00 | (c & 0x03FF));

View File

@ -33,12 +33,12 @@ import java.util.Properties;
*/ */
public class Property { public class Property {
/** /**
* Converts a property file object into a JSONObject. The property file * Converts a property file object into a JSONObject. The property file object is a table of name value pairs.
* object is a table of name value pairs. *
* @param properties java.util.Properties
* *
* @param properties
* java.util.Properties
* @return JSONObject * @return JSONObject
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final java.util.Properties properties) throws JSONException { public static JSONObject toJSONObject(final java.util.Properties properties) throws JSONException {
@ -56,9 +56,10 @@ public class Property {
/** /**
* Converts the JSONObject into a property file object. * Converts the JSONObject into a property file object.
* *
* @param jo * @param jo JSONObject
* JSONObject *
* @return java.util.Properties * @return java.util.Properties
*
* @throws JSONException * @throws JSONException
*/ */
public static Properties toProperties(final JSONObject jo) throws JSONException { public static Properties toProperties(final JSONObject jo) throws JSONException {

View File

@ -3,8 +3,7 @@ package com.intellectualcrafters.json;
import java.util.Iterator; import java.util.Iterator;
/** /**
* This provides static methods to convert an XML text into a JSONObject, * This provides static methods to convert an XML text into a JSONObject, and to covert a JSONObject into an XML text.
* and to covert a JSONObject into an XML text.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -14,32 +13,32 @@ public class XML {
/** /**
* The Character '&amp;'. * The Character '&amp;'.
*/ */
public static final Character AMP = '&'; public static final Character AMP = '&';
/** /**
* The Character '''. * The Character '''.
*/ */
public static final Character APOS = '\''; public static final Character APOS = '\'';
/** /**
* The Character '!'. * The Character '!'.
*/ */
public static final Character BANG = '!'; public static final Character BANG = '!';
/** /**
* The Character '='. * The Character '='.
*/ */
public static final Character EQ = '='; public static final Character EQ = '=';
/** /**
* The Character '>'. * The Character '>'.
*/ */
public static final Character GT = '>'; public static final Character GT = '>';
/** /**
* The Character '&lt;'. * The Character '&lt;'.
*/ */
public static final Character LT = '<'; public static final Character LT = '<';
/** /**
* The Character '?'. * The Character '?'.
@ -49,7 +48,7 @@ public class XML {
/** /**
* The Character '"'. * The Character '"'.
*/ */
public static final Character QUOT = '"'; public static final Character QUOT = '"';
/** /**
* The Character '/'. * The Character '/'.
@ -59,7 +58,7 @@ public class XML {
/** /**
* Replace special characters with XML escapes: * Replace special characters with XML escapes:
* <p/> * <p/>
* * <p/>
* <pre> * <pre>
* &amp; <small>(ampersand)</small> is replaced by &amp;amp; * &amp; <small>(ampersand)</small> is replaced by &amp;amp;
* &lt; <small>(less than)</small> is replaced by &amp;lt; * &lt; <small>(less than)</small> is replaced by &amp;lt;
@ -67,8 +66,8 @@ public class XML {
* &quot; <small>(double quote)</small> is replaced by &amp;quot; * &quot; <small>(double quote)</small> is replaced by &amp;quot;
* </pre> * </pre>
* *
* @param string * @param string The string to be escaped.
* The string to be escaped. *
* @return The escaped string. * @return The escaped string.
*/ */
public static String escape(final String string) { public static String escape(final String string) {
@ -99,11 +98,10 @@ public class XML {
} }
/** /**
* Throw an exception if the string contains whitespace. * Throw an exception if the string contains whitespace. Whitespace is not allowed in tagNames and attributes.
* Whitespace is not allowed in tagNames and attributes. *
* @param string A string.
* *
* @param string
* A string.
* @throws JSONException * @throws JSONException
*/ */
public static void noSpace(final String string) throws JSONException { public static void noSpace(final String string) throws JSONException {
@ -122,13 +120,12 @@ public class XML {
/** /**
* Scan the content following the named tag, attaching it to the context. * Scan the content following the named tag, attaching it to the context.
* *
* @param x * @param x The XMLTokener containing the source string.
* The XMLTokener containing the source string. * @param context The JSONObject that will include the new material.
* @param context * @param name The tag name.
* The JSONObject that will include the new material. *
* @param name
* The tag name.
* @return true if the close tag is processed. * @return true if the close tag is processed.
*
* @throws JSONException * @throws JSONException
*/ */
private static boolean parse(final XMLTokener x, final JSONObject context, final String name) throws JSONException { private static boolean parse(final XMLTokener x, final JSONObject context, final String name) throws JSONException {
@ -161,8 +158,7 @@ public class XML {
return false; return false;
} }
x.back(); x.back();
} } else if (c == '[') {
else if (c == '[') {
token = x.nextToken(); token = x.nextToken();
if ("CDATA".equals(token)) { if ("CDATA".equals(token)) {
if (x.next() == '[') { if (x.next() == '[') {
@ -180,25 +176,20 @@ public class XML {
token = x.nextMeta(); token = x.nextMeta();
if (token == null) { if (token == null) {
throw x.syntaxError("Missing '>' after '<!'."); throw x.syntaxError("Missing '>' after '<!'.");
} } else if (token == LT) {
else if (token == LT) {
i += 1; i += 1;
} } else if (token == GT) {
else if (token == GT) {
i -= 1; i -= 1;
} }
} } while (i > 0);
while (i > 0);
return false; return false;
} } else if (token == QUEST) {
else if (token == QUEST) {
// <? // <?
x.skipPast("?>"); x.skipPast("?>");
return false; return false;
} } else if (token == SLASH) {
else if (token == SLASH) {
// Close tag </ // Close tag </
@ -214,18 +205,16 @@ public class XML {
} }
return true; return true;
} } else if (token instanceof Character) {
else if (token instanceof Character) {
throw x.syntaxError("Misshaped tag"); throw x.syntaxError("Misshaped tag");
// Open tag < // Open tag <
} } else {
else {
tagName = (String) token; tagName = (String) token;
token = null; token = null;
jsonobject = new JSONObject(); jsonobject = new JSONObject();
for (;;) { for (; ; ) {
if (token == null) { if (token == null) {
token = x.nextToken(); token = x.nextToken();
} }
@ -242,39 +231,34 @@ public class XML {
} }
jsonobject.accumulate(string, XML.stringToValue((String) token)); jsonobject.accumulate(string, XML.stringToValue((String) token));
token = null; token = null;
} } else {
else {
jsonobject.accumulate(string, ""); jsonobject.accumulate(string, "");
} }
// Empty tag <.../> // Empty tag <.../>
} } else if (token == SLASH) {
else if (token == SLASH) {
if (x.nextToken() != GT) { if (x.nextToken() != GT) {
throw x.syntaxError("Misshaped tag"); throw x.syntaxError("Misshaped tag");
} }
if (jsonobject.length() > 0) { if (jsonobject.length() > 0) {
context.accumulate(tagName, jsonobject); context.accumulate(tagName, jsonobject);
} } else {
else {
context.accumulate(tagName, ""); context.accumulate(tagName, "");
} }
return false; return false;
// Content, between <...> and </...> // Content, between <...> and </...>
} } else if (token == GT) {
else if (token == GT) { for (; ; ) {
for (;;) {
token = x.nextContent(); token = x.nextContent();
if (token == null) { if (token == null) {
if (tagName != null) { if (tagName != null) {
throw x.syntaxError("Unclosed tag " + tagName); throw x.syntaxError("Unclosed tag " + tagName);
} }
return false; return false;
} } else if (token instanceof String) {
else if (token instanceof String) {
string = (String) token; string = (String) token;
if (string.length() > 0) { if (string.length() > 0) {
jsonobject.accumulate("content", XML.stringToValue(string)); jsonobject.accumulate("content", XML.stringToValue(string));
@ -282,24 +266,20 @@ public class XML {
// Nested element // Nested element
} } else if (token == LT) {
else if (token == LT) {
if (parse(x, jsonobject, tagName)) { if (parse(x, jsonobject, tagName)) {
if (jsonobject.length() == 0) { if (jsonobject.length() == 0) {
context.accumulate(tagName, ""); context.accumulate(tagName, "");
} } else if ((jsonobject.length() == 1) && (jsonobject.opt("content") != null)) {
else if ((jsonobject.length() == 1) && (jsonobject.opt("content") != null)) {
context.accumulate(tagName, jsonobject.opt("content")); context.accumulate(tagName, jsonobject.opt("content"));
} } else {
else {
context.accumulate(tagName, jsonobject); context.accumulate(tagName, jsonobject);
} }
return false; return false;
} }
} }
} }
} } else {
else {
throw x.syntaxError("Misshaped tag"); throw x.syntaxError("Misshaped tag");
} }
} }
@ -307,14 +287,12 @@ public class XML {
} }
/** /**
* Try to convert a string into a number, boolean, or null. If the string * Try to convert a string into a number, boolean, or null. If the string can't be converted, return the string.
* can't be converted, return the string. This is much less ambitious than * This is much less ambitious than JSONObject.stringToValue, especially because it does not attempt to convert plus
* JSONObject.stringToValue, especially because it does not attempt to * forms, octal forms, hex forms, or E forms lacking decimal points.
* convert plus forms, octal forms, hex forms, or E forms lacking decimal *
* points. * @param string A String.
* *
* @param string
* A String.
* @return A simple JSON value. * @return A simple JSON value.
*/ */
public static Object stringToValue(final String string) { public static Object stringToValue(final String string) {
@ -340,34 +318,30 @@ public class XML {
return value; return value;
} }
} }
} } catch (final Exception ignore) {
catch (final Exception ignore) {
try { try {
final Double value = new Double(string); final Double value = new Double(string);
if (value.toString().equals(string)) { if (value.toString().equals(string)) {
return value; return value;
} }
} } catch (final Exception ignoreAlso) {
catch (final Exception ignoreAlso) {
} }
} }
return string; return string;
} }
/** /**
* Convert a well-formed (but not necessarily valid) XML string into a * Convert a well-formed (but not necessarily valid) XML string into a JSONObject. Some information may be lost in
* JSONObject. Some information may be lost in this transformation * this transformation because JSON is a data format and XML is a document format. XML uses elements, attributes,
* because JSON is a data format and XML is a document format. XML uses * and content text, while JSON uses unordered collections of name/value pairs and arrays of values. JSON does not
* elements, attributes, and content text, while JSON uses unordered * does not like to distinguish between elements and attributes. Sequences of similar elements are represented as
* collections of name/value pairs and arrays of values. JSON does not * JSONArrays. Content text may be placed in a "content" member. Comments, prologs, DTDs, and <code>&lt;[ [
* does not like to distinguish between elements and attributes. * ]]></code> are ignored.
* Sequences of similar elements are represented as JSONArrays. Content *
* text may be placed in a "content" member. Comments, prologs, DTDs, and * @param string The source string.
* <code>&lt;[ [ ]]></code> are ignored.
* *
* @param string
* The source string.
* @return A JSONObject containing the structured data from the XML string. * @return A JSONObject containing the structured data from the XML string.
*
* @throws JSONException * @throws JSONException
*/ */
public static JSONObject toJSONObject(final String string) throws JSONException { public static JSONObject toJSONObject(final String string) throws JSONException {
@ -382,9 +356,10 @@ public class XML {
/** /**
* Convert a JSONObject into a well-formed, element-normal XML string. * Convert a JSONObject into a well-formed, element-normal XML string.
* *
* @param object * @param object A JSONObject.
* A JSONObject. *
* @return A string. * @return A string.
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(final Object object) throws JSONException { public static String toString(final Object object) throws JSONException {
@ -394,11 +369,11 @@ public class XML {
/** /**
* Convert a JSONObject into a well-formed, element-normal XML string. * Convert a JSONObject into a well-formed, element-normal XML string.
* *
* @param object * @param object A JSONObject.
* A JSONObject. * @param tagName The optional name of the enclosing tag.
* @param tagName *
* The optional name of the enclosing tag.
* @return A string. * @return A string.
*
* @throws JSONException * @throws JSONException
*/ */
public static String toString(Object object, final String tagName) throws JSONException { public static String toString(Object object, final String tagName) throws JSONException {
@ -445,15 +420,13 @@ public class XML {
} }
sb.append(escape(ja.get(i).toString())); sb.append(escape(ja.get(i).toString()));
} }
} } else {
else {
sb.append(escape(value.toString())); sb.append(escape(value.toString()));
} }
// Emit an array of similar keys // Emit an array of similar keys
} } else if (value instanceof JSONArray) {
else if (value instanceof JSONArray) {
ja = (JSONArray) value; ja = (JSONArray) value;
length = ja.length(); length = ja.length();
for (i = 0; i < length; i += 1) { for (i = 0; i < length; i += 1) {
@ -466,21 +439,18 @@ public class XML {
sb.append("</"); sb.append("</");
sb.append(key); sb.append(key);
sb.append('>'); sb.append('>');
} } else {
else {
sb.append(toString(value, key)); sb.append(toString(value, key));
} }
} }
} } else if ("".equals(value)) {
else if ("".equals(value)) {
sb.append('<'); sb.append('<');
sb.append(key); sb.append(key);
sb.append("/>"); sb.append("/>");
// Emit a new tag <k> // Emit a new tag <k>
} } else {
else {
sb.append(toString(value, key)); sb.append(toString(value, key));
} }
} }
@ -498,8 +468,7 @@ public class XML {
// a place // a place
// where XML is lacking, synthesize an <array> element. // where XML is lacking, synthesize an <array> element.
} } else {
else {
if (object.getClass().isArray()) { if (object.getClass().isArray()) {
object = new JSONArray(object); object = new JSONArray(object);
} }
@ -510,8 +479,7 @@ public class XML {
sb.append(toString(ja.opt(i), tagName == null ? "array" : tagName)); sb.append(toString(ja.opt(i), tagName == null ? "array" : tagName));
} }
return sb.toString(); return sb.toString();
} } else {
else {
string = (object == null) ? "null" : escape(object.toString()); string = (object == null) ? "null" : escape(object.toString());
return (tagName == null) ? "\"" + string + "\"" : (string.length() == 0) ? "<" + tagName + "/>" : "<" + tagName + ">" + string + "</" + tagName + ">"; return (tagName == null) ? "\"" + string + "\"" : (string.length() == 0) ? "<" + tagName + "/>" : "<" + tagName + ">" + string + "</" + tagName + ">";
} }

View File

@ -1,8 +1,7 @@
package com.intellectualcrafters.json; package com.intellectualcrafters.json;
/** /**
* The XMLTokener extends the JSONTokener to provide additional methods * The XMLTokener extends the JSONTokener to provide additional methods for the parsing of XML texts.
* for the parsing of XML texts.
* *
* @author JSON.org * @author JSON.org
* @version 2014-05-03 * @version 2014-05-03
@ -10,8 +9,7 @@ package com.intellectualcrafters.json;
public class XMLTokener extends JSONTokener { public class XMLTokener extends JSONTokener {
/** /**
* The table of entity values. It initially contains Character values for * The table of entity values. It initially contains Character values for amp, apos, gt, lt, quot.
* amp, apos, gt, lt, quot.
*/ */
public static final java.util.HashMap<String, Character> entity; public static final java.util.HashMap<String, Character> entity;
@ -27,8 +25,7 @@ public class XMLTokener extends JSONTokener {
/** /**
* Construct an XMLTokener from a string. * Construct an XMLTokener from a string.
* *
* @param s * @param s A source string.
* A source string.
*/ */
public XMLTokener(final String s) { public XMLTokener(final String s) {
super(s); super(s);
@ -38,14 +35,14 @@ public class XMLTokener extends JSONTokener {
* Get the text in the CDATA block. * Get the text in the CDATA block.
* *
* @return The string up to the <code>]]&gt;</code>. * @return The string up to the <code>]]&gt;</code>.
* @throws JSONException *
* If the <code>]]&gt;</code> is not found. * @throws JSONException If the <code>]]&gt;</code> is not found.
*/ */
public String nextCDATA() throws JSONException { public String nextCDATA() throws JSONException {
char c; char c;
int i; int i;
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (;;) { for (; ; ) {
c = next(); c = next();
if (end()) { if (end()) {
throw syntaxError("Unclosed CDATA"); throw syntaxError("Unclosed CDATA");
@ -60,12 +57,11 @@ public class XMLTokener extends JSONTokener {
} }
/** /**
* Get the next XML outer token, trimming whitespace. There are two kinds * Get the next XML outer token, trimming whitespace. There are two kinds of tokens: the '<' character which begins
* of tokens: the '<' character which begins a markup tag, and the content * a markup tag, and the content text between markup tags.
* text between markup tags. *
* @return A string, or a '<' Character, or null if there is no more source text.
* *
* @return A string, or a '<' Character, or null if there is no more
* source text.
* @throws JSONException * @throws JSONException
*/ */
public Object nextContent() throws JSONException { public Object nextContent() throws JSONException {
@ -73,8 +69,7 @@ public class XMLTokener extends JSONTokener {
StringBuilder sb; StringBuilder sb;
do { do {
c = next(); c = next();
} } while (Character.isWhitespace(c));
while (Character.isWhitespace(c));
if (c == 0) { if (c == 0) {
return null; return null;
} }
@ -82,15 +77,14 @@ public class XMLTokener extends JSONTokener {
return XML.LT; return XML.LT;
} }
sb = new StringBuilder(); sb = new StringBuilder();
for (;;) { for (; ; ) {
if ((c == '<') || (c == 0)) { if ((c == '<') || (c == 0)) {
back(); back();
return sb.toString().trim(); return sb.toString().trim();
} }
if (c == '&') { if (c == '&') {
sb.append(nextEntity(c)); sb.append(nextEntity(c));
} } else {
else {
sb.append(c); sb.append(c);
} }
c = next(); c = next();
@ -98,26 +92,24 @@ public class XMLTokener extends JSONTokener {
} }
/** /**
* Return the next entity. These entities are translated to Characters: * Return the next entity. These entities are translated to Characters: <code>&amp; &apos; &gt; &lt;
* <code>&amp; &apos; &gt; &lt; &quot;</code>. * &quot;</code>.
*
* @param ampersand An ampersand character.
* *
* @param ampersand
* An ampersand character.
* @return A Character or an entity String if the entity is not recognized. * @return A Character or an entity String if the entity is not recognized.
* @throws JSONException *
* If missing ';' in XML entity. * @throws JSONException If missing ';' in XML entity.
*/ */
public Object nextEntity(final char ampersand) throws JSONException { public Object nextEntity(final char ampersand) throws JSONException {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (;;) { for (; ; ) {
final char c = next(); final char c = next();
if (Character.isLetterOrDigit(c) || (c == '#')) { if (Character.isLetterOrDigit(c) || (c == '#')) {
sb.append(Character.toLowerCase(c)); sb.append(Character.toLowerCase(c));
} } else if (c == ';') {
else if (c == ';') {
break; break;
} } else {
else {
throw syntaxError("Missing ';' in XML entity: &" + sb); throw syntaxError("Missing ';' in XML entity: &" + sb);
} }
} }
@ -127,24 +119,19 @@ public class XMLTokener extends JSONTokener {
} }
/** /**
* Returns the next XML meta token. This is used for skipping over <!...> * Returns the next XML meta token. This is used for skipping over <!...> and <?...?> structures.
* and <?...?> structures.
* *
* @return Syntax characters (<code>< > / = ! ?</code>) are returned as * @return Syntax characters (<code>< > / = ! ?</code>) are returned as Character, and strings and names are
* Character, and strings and names are returned as Boolean. We * returned as Boolean. We don't care what the values actually are.
* don't care *
* what the values actually are. * @throws JSONException If a string is not properly closed or if the XML is badly structured.
* @throws JSONException
* If a string is not properly closed or if the XML
* is badly structured.
*/ */
public Object nextMeta() throws JSONException { public Object nextMeta() throws JSONException {
char c; char c;
char q; char q;
do { do {
c = next(); c = next();
} } while (Character.isWhitespace(c));
while (Character.isWhitespace(c));
switch (c) { switch (c) {
case 0: case 0:
throw syntaxError("Misshaped meta tag"); throw syntaxError("Misshaped meta tag");
@ -163,7 +150,7 @@ public class XMLTokener extends JSONTokener {
case '"': case '"':
case '\'': case '\'':
q = c; q = c;
for (;;) { for (; ; ) {
c = next(); c = next();
if (c == 0) { if (c == 0) {
throw syntaxError("Unterminated string"); throw syntaxError("Unterminated string");
@ -173,7 +160,7 @@ public class XMLTokener extends JSONTokener {
} }
} }
default: default:
for (;;) { for (; ; ) {
c = next(); c = next();
if (Character.isWhitespace(c)) { if (Character.isWhitespace(c)) {
return Boolean.TRUE; return Boolean.TRUE;
@ -196,14 +183,12 @@ public class XMLTokener extends JSONTokener {
} }
/** /**
* Get the next XML Token. These tokens are found inside of angle * Get the next XML Token. These tokens are found inside of angle brackets. It may be one of these characters:
* brackets. It may be one of these characters: <code>/ > = ! ?</code> or it * <code>/ > = ! ?</code> or it may be a string wrapped in single quotes or double quotes, or it may be a name.
* may be a string wrapped in single quotes or double quotes, or it may be a
* name.
* *
* @return a String or a Character. * @return a String or a Character.
* @throws JSONException *
* If the XML is not well formed. * @throws JSONException If the XML is not well formed.
*/ */
public Object nextToken() throws JSONException { public Object nextToken() throws JSONException {
char c; char c;
@ -211,8 +196,7 @@ public class XMLTokener extends JSONTokener {
StringBuilder sb; StringBuilder sb;
do { do {
c = next(); c = next();
} } while (Character.isWhitespace(c));
while (Character.isWhitespace(c));
switch (c) { switch (c) {
case 0: case 0:
throw syntaxError("Misshaped element"); throw syntaxError("Misshaped element");
@ -229,13 +213,13 @@ public class XMLTokener extends JSONTokener {
case '?': case '?':
return XML.QUEST; return XML.QUEST;
// Quoted string // Quoted string
case '"': case '"':
case '\'': case '\'':
q = c; q = c;
sb = new StringBuilder(); sb = new StringBuilder();
for (;;) { for (; ; ) {
c = next(); c = next();
if (c == 0) { if (c == 0) {
throw syntaxError("Unterminated string"); throw syntaxError("Unterminated string");
@ -245,8 +229,7 @@ public class XMLTokener extends JSONTokener {
} }
if (c == '&') { if (c == '&') {
sb.append(nextEntity(c)); sb.append(nextEntity(c));
} } else {
else {
sb.append(c); sb.append(c);
} }
} }
@ -255,7 +238,7 @@ public class XMLTokener extends JSONTokener {
// Name // Name
sb = new StringBuilder(); sb = new StringBuilder();
for (;;) { for (; ; ) {
sb.append(c); sb.append(c);
c = next(); c = next();
if (Character.isWhitespace(c)) { if (Character.isWhitespace(c)) {
@ -283,12 +266,11 @@ public class XMLTokener extends JSONTokener {
} }
/** /**
* Skip characters until past the requested string. * Skip characters until past the requested string. If it is not found, we are left at the end of the source with a
* If it is not found, we are left at the end of the source with a result of * result of false.
* false. *
* @param to A string to skip past.
* *
* @param to
* A string to skip past.
* @throws JSONException * @throws JSONException
*/ */
public boolean skipPast(final String to) throws JSONException { public boolean skipPast(final String to) throws JSONException {
@ -315,7 +297,7 @@ public class XMLTokener extends JSONTokener {
/* We will loop, possibly for all of the remaining characters. */ /* We will loop, possibly for all of the remaining characters. */
for (;;) { for (; ; ) {
j = offset; j = offset;
b = true; b = true;

View File

@ -21,38 +21,31 @@
package com.intellectualcrafters.plot; package com.intellectualcrafters.plot;
import java.io.File; import com.intellectualcrafters.plot.commands.Auto;
import java.io.FileWriter; import com.intellectualcrafters.plot.commands.MainCommand;
import java.io.IOException; import com.intellectualcrafters.plot.config.C;
import java.sql.Connection; import com.intellectualcrafters.plot.config.ConfigurationNode;
import java.sql.DatabaseMetaData; import com.intellectualcrafters.plot.config.Settings;
import java.sql.ResultSet; import com.intellectualcrafters.plot.database.*;
import java.sql.SQLException; import com.intellectualcrafters.plot.events.PlayerTeleportToPlotEvent;
import java.util.ArrayList; import com.intellectualcrafters.plot.events.PlotDeleteEvent;
import java.util.Arrays; import com.intellectualcrafters.plot.flag.AbstractFlag;
import java.util.Collection; import com.intellectualcrafters.plot.flag.FlagManager;
import java.util.Date; import com.intellectualcrafters.plot.generator.DefaultPlotManager;
import java.util.HashMap; import com.intellectualcrafters.plot.generator.DefaultPlotWorld;
import java.util.HashSet; import com.intellectualcrafters.plot.generator.WorldGenerator;
import java.util.LinkedHashMap; import com.intellectualcrafters.plot.listeners.*;
import java.util.LinkedHashSet; import com.intellectualcrafters.plot.object.*;
import java.util.List; import com.intellectualcrafters.plot.util.*;
import java.util.Map; import com.intellectualcrafters.plot.util.Logger.LogLevel;
import java.util.Map.Entry; import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper;
import java.util.Set; import com.intellectualcrafters.plot.uuid.PlotUUIDSaver;
import java.util.UUID; import com.intellectualcrafters.plot.uuid.UUIDSaver;
import java.util.concurrent.TimeUnit; import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import me.confuser.barapi.BarAPI; import me.confuser.barapi.BarAPI;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import org.bukkit.*;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -61,51 +54,16 @@ import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import com.intellectualcrafters.plot.commands.Auto; import java.io.File;
import com.intellectualcrafters.plot.commands.MainCommand; import java.io.FileWriter;
import com.intellectualcrafters.plot.config.C; import java.io.IOException;
import com.intellectualcrafters.plot.config.ConfigurationNode; import java.sql.Connection;
import com.intellectualcrafters.plot.config.Settings; import java.sql.DatabaseMetaData;
import com.intellectualcrafters.plot.database.DBFunc; import java.sql.ResultSet;
import com.intellectualcrafters.plot.database.MySQL; import java.sql.SQLException;
import com.intellectualcrafters.plot.database.PlotMeConverter; import java.util.*;
import com.intellectualcrafters.plot.database.SQLManager; import java.util.Map.Entry;
import com.intellectualcrafters.plot.database.SQLite; import java.util.concurrent.TimeUnit;
import com.intellectualcrafters.plot.events.PlayerTeleportToPlotEvent;
import com.intellectualcrafters.plot.events.PlotDeleteEvent;
import com.intellectualcrafters.plot.flag.AbstractFlag;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.generator.DefaultPlotManager;
import com.intellectualcrafters.plot.generator.DefaultPlotWorld;
import com.intellectualcrafters.plot.generator.WorldGenerator;
import com.intellectualcrafters.plot.listeners.EntityListener;
import com.intellectualcrafters.plot.listeners.ForceFieldListener;
import com.intellectualcrafters.plot.listeners.InventoryListener;
import com.intellectualcrafters.plot.listeners.PlayerEvents;
import com.intellectualcrafters.plot.listeners.PlotListener;
import com.intellectualcrafters.plot.listeners.PlotPlusListener;
import com.intellectualcrafters.plot.listeners.WorldEditListener;
import com.intellectualcrafters.plot.listeners.WorldGuardListener;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotGenerator;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager;
import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.ConsoleColors;
import com.intellectualcrafters.plot.util.Lag;
import com.intellectualcrafters.plot.util.Logger;
import com.intellectualcrafters.plot.util.Logger.LogLevel;
import com.intellectualcrafters.plot.util.Metrics;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SendChunk;
import com.intellectualcrafters.plot.util.SetBlockFast;
import com.intellectualcrafters.plot.util.UUIDHandler;
import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper;
import com.intellectualcrafters.plot.uuid.PlotUUIDSaver;
import com.intellectualcrafters.plot.uuid.UUIDSaver;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
/** /**
* PlotMain class. * PlotMain class.
@ -113,21 +71,20 @@ import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
* @author Citymonstret * @author Citymonstret
* @author Empire92 * @author Empire92
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused") public class PlotMain extends JavaPlugin {
public class PlotMain extends JavaPlugin { private static PlotMain main = null;
private static PlotMain main = null;
/** /**
* Permission that allows for "everything" * Permission that allows for "everything"
*/ */
public static final String ADMIN_PERMISSION = "plots.admin"; public static final String ADMIN_PERMISSION = "plots.admin";
/** /**
* Storage version * Storage version
*/ */
public final static int storage_ver = 1; public final static int storage_ver = 1;
/** /**
* Boolean Flags (material) * Boolean Flags (material)
*/ */
public final static HashMap<Material, String> booleanFlags = new HashMap<>(); public final static HashMap<Material, String> booleanFlags = new HashMap<>();
/** /**
* Initialize the material flags * Initialize the material flags
@ -150,66 +107,65 @@ public class PlotMain extends JavaPlugin {
/** /**
* All loaded plot worlds * All loaded plot worlds
*/ */
private final static HashMap<String, PlotWorld> worlds = new HashMap<>(); private final static HashMap<String, PlotWorld> worlds = new HashMap<>();
/** /**
* All world managers * All world managers
*/ */
private final static HashMap<String, PlotManager> managers = new HashMap<>(); private final static HashMap<String, PlotManager> managers = new HashMap<>();
/** /**
* settings.properties * settings.properties
*/ */
public static File configFile; public static File configFile;
/** /**
* The main configuration file * The main configuration file
*/ */
public static YamlConfiguration config; public static YamlConfiguration config;
/** /**
* storage.properties * storage.properties
*/ */
public static File storageFile; public static File storageFile;
/** /**
* Contains storage options * Contains storage options
*/ */
public static YamlConfiguration storage; public static YamlConfiguration storage;
/** /**
* MySQL Connection * MySQL Connection
*/ */
public static Connection connection; public static Connection connection;
/** /**
* WorldEdit object * WorldEdit object
*/ */
public static WorldEditPlugin worldEdit = null; public static WorldEditPlugin worldEdit = null;
/** /**
* BarAPI object * BarAPI object
*/ */
public static BarAPI barAPI = null; public static BarAPI barAPI = null;
/** /**
* World Guard Object * World Guard Object
*/ */
public static WorldGuardPlugin worldGuard = null; public static WorldGuardPlugin worldGuard = null;
/** /**
* World Guard Listener * World Guard Listener
*/ */
public static WorldGuardListener worldGuardListener = null; public static WorldGuardListener worldGuardListener = null;
/** /**
* Economy Object (vault) * Economy Object (vault)
*/ */
public static Economy economy; public static Economy economy;
/** /**
* Use Economy? * Use Economy?
*/ */
public static boolean useEconomy = false; public static boolean useEconomy = false;
/** /**
* The UUID Saver * The UUID Saver
*/ */
private static UUIDSaver uuidSaver; private static UUIDSaver uuidSaver;
/** /**
* MySQL Object * MySQL Object
*/ */
private static MySQL mySQL; private static MySQL mySQL;
/** /**
* List of all plots * List of all plots DO NOT USE EXCEPT FOR DATABASE PURPOSES
* DO NOT USE EXCEPT FOR DATABASE PURPOSES
*/ */
private static LinkedHashMap<String, HashMap<PlotId, Plot>> plots; private static LinkedHashMap<String, HashMap<PlotId, Plot>> plots;
@ -230,8 +186,7 @@ public class PlotMain extends JavaPlugin {
public void run() { public void run() {
try { try {
checkExpired(plugin, true); checkExpired(plugin, true);
} } catch (final Exception e) {
catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -239,15 +194,12 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* Check a range of permissions e.g. 'plots.plot.<0-100>'<br> * Check a range of permissions e.g. 'plots.plot.<0-100>'<br> Returns highest integer in range.
* Returns highest integer in range. *
* @param player to check
* @param stub to check
* @param range tp check
* *
* @param player
* to check
* @param stub
* to check
* @param range
* tp check
* @return permitted range * @return permitted range
*/ */
public static int hasPermissionRange(final Player player, final String stub, final int range) { public static int hasPermissionRange(final Player player, final String stub, final int range) {
@ -266,14 +218,11 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* Check a player for a permission<br> * Check a player for a permission<br> - Op has all permissions <br> - checks for '*' nodes
* - Op has all permissions <br> *
* - checks for '*' nodes * @param player to check
* @param perms to check
* *
* @param player
* to check
* @param perms
* to check
* @return true of player has permissions * @return true of player has permissions
*/ */
public static boolean hasPermissions(final Player player, final String[] perms) { public static boolean hasPermissions(final Player player, final String[] perms) {
@ -285,8 +234,7 @@ public class PlotMain extends JavaPlugin {
boolean permitted = false; boolean permitted = false;
if (player.hasPermission(perm)) { if (player.hasPermission(perm)) {
permitted = true; permitted = true;
} } else {
else {
final String[] nodes = perm.split("\\."); final String[] nodes = perm.split("\\.");
final StringBuilder n = new StringBuilder(); final StringBuilder n = new StringBuilder();
for (int i = 0; i < (nodes.length - 1); i++) { for (int i = 0; i < (nodes.length - 1); i++) {
@ -309,6 +257,7 @@ public class PlotMain extends JavaPlugin {
* Get the uuid saver * Get the uuid saver
* *
* @return uuid saver * @return uuid saver
*
* @see com.intellectualcrafters.plot.uuid.UUIDSaver; * @see com.intellectualcrafters.plot.uuid.UUIDSaver;
*/ */
public static UUIDSaver getUUIDSaver() { public static UUIDSaver getUUIDSaver() {
@ -318,8 +267,8 @@ public class PlotMain extends JavaPlugin {
/** /**
* Set the uuid saver * Set the uuid saver
* *
* @param saver * @param saver new saver
* new saver *
* @see com.intellectualcrafters.plot.uuid.UUIDSaver * @see com.intellectualcrafters.plot.uuid.UUIDSaver
*/ */
public static void setUUIDSaver(final UUIDSaver saver) { public static void setUUIDSaver(final UUIDSaver saver) {
@ -327,14 +276,11 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* Check a player for a permission<br> * Check a player for a permission<br> - Op has all permissions <br> - checks for '*' nodes
* - Op has all permissions <br> *
* - checks for '*' nodes * @param player to check
* @param perm to check
* *
* @param player
* to check
* @param perm
* to check
* @return true if player has the permission * @return true if player has the permission
*/ */
public static boolean hasPermission(final Player player, final String perm) { public static boolean hasPermission(final Player player, final String perm) {
@ -383,8 +329,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param player * @param player player
* player *
* @return Set Containing the players plots * @return Set Containing the players plots
*/ */
public static Set<Plot> getPlots(final Player player) { public static Set<Plot> getPlots(final Player player) {
@ -403,10 +349,9 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world plot world
* plot world * @param player plot owner
* @param player *
* plot owner
* @return players plots * @return players plots
*/ */
public static Set<Plot> getPlots(final World world, final Player player) { public static Set<Plot> getPlots(final World world, final Player player) {
@ -425,8 +370,8 @@ public class PlotMain extends JavaPlugin {
/** /**
* Get plots for the specified world * Get plots for the specified world
* *
* @param world * @param world A world, in which you want to search for plots
* A world, in which you want to search for plots *
* @return HashMap containing Plot IDs and Plot Objects * @return HashMap containing Plot IDs and Plot Objects
*/ */
public static HashMap<PlotId, Plot> getPlots(final String world) { public static HashMap<PlotId, Plot> getPlots(final String world) {
@ -437,8 +382,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world plot world
* plot world *
* @return plots in world * @return plots in world
*/ */
public static HashMap<PlotId, Plot> getPlots(final World world) { public static HashMap<PlotId, Plot> getPlots(final World world) {
@ -465,8 +410,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world plotworld(?)
* plotworld(?) *
* @return true if the world is a plotworld * @return true if the world is a plotworld
*/ */
public static boolean isPlotWorld(final World world) { public static boolean isPlotWorld(final World world) {
@ -474,8 +419,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world plotworld(?)
* plotworld(?) *
* @return true if the world is a plotworld * @return true if the world is a plotworld
*/ */
public static boolean isPlotWorld(final String world) { public static boolean isPlotWorld(final String world) {
@ -483,8 +428,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world World to get manager for
* World to get manager for *
* @return manager for world * @return manager for world
*/ */
public static PlotManager getPlotManager(final World world) { public static PlotManager getPlotManager(final World world) {
@ -495,8 +440,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world world
* world *
* @return PlotManager * @return PlotManager
*/ */
public static PlotManager getPlotManager(final String world) { public static PlotManager getPlotManager(final String world) {
@ -507,8 +452,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world to search
* to search *
* @return PlotWorld object * @return PlotWorld object
*/ */
public static PlotWorld getWorldSettings(final World world) { public static PlotWorld getWorldSettings(final World world) {
@ -519,8 +464,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world to search
* to search *
* @return PlotWorld object * @return PlotWorld object
*/ */
public static PlotWorld getWorldSettings(final String world) { public static PlotWorld getWorldSettings(final String world) {
@ -531,8 +476,8 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* @param world * @param world world to search
* world to search *
* @return set containing the plots for a world * @return set containing the plots for a world
*/ */
public static Plot[] getWorldPlots(final World world) { public static Plot[] getWorldPlots(final World world) {
@ -543,12 +488,10 @@ public class PlotMain extends JavaPlugin {
/** /**
* Remove a plot * Remove a plot
* *
* @param world * @param world The Plot World
* The Plot World * @param id The Plot ID
* @param id * @param callEvent Whether or not to call the PlotDeleteEvent
* The Plot ID *
* @param callEvent
* Whether or not to call the PlotDeleteEvent
* @return true if successful, false if not * @return true if successful, false if not
*/ */
public static boolean removePlot(final String world, final PlotId id, final boolean callEvent) { public static boolean removePlot(final String world, final PlotId id, final boolean callEvent) {
@ -567,8 +510,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Replace the plot object with an updated version * Replace the plot object with an updated version
* *
* @param plot * @param plot plot object
* plot object
*/ */
public static void updatePlot(final Plot plot) { public static void updatePlot(final Plot plot) {
final String world = plot.world; final String world = plot.world;
@ -580,30 +522,16 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* TODO: <b>Implement better system The whole point of this system is to * TODO: <b>Implement better system The whole point of this system is to recycle old plots</b> <br> So why not just
* recycle old plots</b> <br> * allow users to claim old plots, and try to hide the fact that the are owned. <br> <br> Reduce amount of expired
* So why not just allow users to claim old plots, and try to hide the fact * plots: <br> - On /plot <br> auto<br> - allow claiming of old plot, clear it so the user doesn't know<br> - On
* that the are owned. <br> * /plot info,<br> - show that the plot is expired and allowed to be claimed Have the task run less often:<br> - Run
* <br> * the task when there are very little, or no players online (great for small servers)<br> - Run the task at startup
* Reduce amount of expired plots: <br> * (also only useful for small servers)<br> Also, in terms of faster code:<br> - Have an array of plots, sorted by
* - On /plot <br> * expiry time.<br> - Add new plots to the end.<br> - The task then only needs to go through the first few plots
* auto<br>
* - allow claiming of old plot, clear it so the user doesn't know<br>
* - On /plot info,<br>
* - show that the plot is expired and allowed to be claimed Have the task
* run less often:<br>
* - Run the task when there are very little, or no players online (great
* for small servers)<br>
* - Run the task at startup (also only useful for small servers)<br>
* Also, in terms of faster code:<br>
* - Have an array of plots, sorted by expiry time.<br>
* - Add new plots to the end.<br>
* - The task then only needs to go through the first few plots
* *
* @param plugin * @param plugin Plugin
* Plugin * @param async Call async?
* @param async
* Call async?
*/ */
private static void checkExpired(final JavaPlugin plugin, final boolean async) { private static void checkExpired(final JavaPlugin plugin, final boolean async) {
if (async) { if (async) {
@ -629,8 +557,7 @@ public class PlotMain extends JavaPlugin {
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) { if (event.isCancelled()) {
event.setCancelled(true); event.setCancelled(true);
} } else {
else {
toDeletePlot.add(plot); toDeletePlot.add(plot);
} }
} }
@ -649,8 +576,7 @@ public class PlotMain extends JavaPlugin {
} }
} }
}); });
} } else {
else {
for (final String world : getPlotWorldsString()) { for (final String world : getPlotWorldsString()) {
if (PlotMain.plots.containsKey(world)) { if (PlotMain.plots.containsKey(world)) {
for (final Plot plot : PlotMain.plots.get(world).values()) { for (final Plot plot : PlotMain.plots.get(world).values()) {
@ -659,8 +585,7 @@ public class PlotMain extends JavaPlugin {
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) { if (event.isCancelled()) {
event.setCancelled(true); event.setCancelled(true);
} } else {
else {
DBFunc.delete(world, plot); DBFunc.delete(world, plot);
} }
} }
@ -691,14 +616,12 @@ public class PlotMain extends JavaPlugin {
/** /**
* Send a message to the console. * Send a message to the console.
* *
* @param string * @param string message
* message
*/ */
public static void sendConsoleSenderMessage(final String string) { public static void sendConsoleSenderMessage(final String string) {
if (getMain().getServer().getConsoleSender() == null) { if (getMain().getServer().getConsoleSender() == null) {
System.out.println(ChatColor.stripColor(ConsoleColors.fromString(string))); System.out.println(ChatColor.stripColor(ConsoleColors.fromString(string)));
} } else {
else {
getMain().getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', string)); getMain().getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', string));
} }
} }
@ -706,12 +629,10 @@ public class PlotMain extends JavaPlugin {
/** /**
* Teleport a player to a plot * Teleport a player to a plot
* *
* @param player * @param player Player to teleport
* Player to teleport * @param from Previous Location
* @param from * @param plot Plot to teleport to
* Previous Location *
* @param plot
* Plot to teleport to
* @return true if successful * @return true if successful
*/ */
public static boolean teleportPlayer(final Player player, final Location from, final Plot plot) { public static boolean teleportPlayer(final Player player, final Location from, final Plot plot) {
@ -732,8 +653,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Send a message to the console * Send a message to the console
* *
* @param c * @param c message
* message
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public static void sendConsoleSenderMessage(final C c) { public static void sendConsoleSenderMessage(final C c) {
@ -743,8 +663,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Broadcast publicly * Broadcast publicly
* *
* @param c * @param c message
* message
*/ */
public static void Broadcast(final C c) { public static void Broadcast(final C c) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', C.PREFIX.s() + c.s())); Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', C.PREFIX.s() + c.s()));
@ -762,8 +681,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Broadcast a message to all admins * Broadcast a message to all admins
* *
* @param c * @param c message
* message
*/ */
public static void BroadcastWithPerms(final C c) { public static void BroadcastWithPerms(final C c) {
for (final Player player : Bukkit.getOnlinePlayers()) { for (final Player player : Bukkit.getOnlinePlayers()) {
@ -786,8 +704,8 @@ public class PlotMain extends JavaPlugin {
/** /**
* Ge the last played time * Ge the last played time
* *
* @param uuid * @param uuid UUID for the player
* UUID for the player *
* @return last play time as a long * @return last play time as a long
*/ */
public static long getLastPlayed(final UUID uuid) { public static long getLastPlayed(final UUID uuid) {
@ -819,8 +737,7 @@ public class PlotMain extends JavaPlugin {
} }
config = YamlConfiguration.loadConfiguration(configFile); config = YamlConfiguration.loadConfiguration(configFile);
setupConfig(); setupConfig();
} } catch (final Exception err_trans) {
catch (final Exception err_trans) {
Logger.add(LogLevel.DANGER, "Failed to save settings.yml"); Logger.add(LogLevel.DANGER, "Failed to save settings.yml");
System.out.println("Failed to save settings.yml"); System.out.println("Failed to save settings.yml");
} }
@ -833,16 +750,14 @@ public class PlotMain extends JavaPlugin {
} }
storage = YamlConfiguration.loadConfiguration(storageFile); storage = YamlConfiguration.loadConfiguration(storageFile);
setupStorage(); setupStorage();
} } catch (final Exception err_trans) {
catch (final Exception err_trans) {
Logger.add(LogLevel.DANGER, "Failed to save storage.yml"); Logger.add(LogLevel.DANGER, "Failed to save storage.yml");
System.out.println("Failed to save storage.yml"); System.out.println("Failed to save storage.yml");
} }
try { try {
config.save(configFile); config.save(configFile);
storage.save(storageFile); storage.save(storageFile);
} } catch (final IOException e) {
catch (final IOException e) {
Logger.add(LogLevel.DANGER, "Configuration file saving failed"); Logger.add(LogLevel.DANGER, "Configuration file saving failed");
e.printStackTrace(); e.printStackTrace();
} }
@ -888,7 +803,7 @@ public class PlotMain extends JavaPlugin {
public static void killAllEntities() { public static void killAllEntities() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(getMain(), new Runnable() { Bukkit.getScheduler().scheduleSyncRepeatingTask(getMain(), new Runnable() {
long ticked = 0l; long ticked = 0l;
long error = 0l; long error = 0l;
{ {
sendConsoleSenderMessage(C.PREFIX.s() + "KillAllEntities started."); sendConsoleSenderMessage(C.PREFIX.s() + "KillAllEntities started.");
@ -977,11 +892,9 @@ public class PlotMain extends JavaPlugin {
// } // }
} }
} }
} } catch (final Throwable e) {
catch (final Throwable e) {
++this.error; ++this.error;
} } finally {
finally {
++this.ticked; ++this.ticked;
} }
} }
@ -1049,8 +962,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Create a plotworld config section * Create a plotworld config section
* *
* @param plotworld * @param plotworld World to create the section for
* World to create the section for
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public static void createConfiguration(final PlotWorld plotworld) { public static void createConfiguration(final PlotWorld plotworld) {
@ -1068,8 +980,7 @@ public class PlotMain extends JavaPlugin {
try { try {
config.save(PlotMain.configFile); config.save(PlotMain.configFile);
} } catch (final IOException e) {
catch (final IOException e) {
PlotMain.sendConsoleSenderMessage("&c[Warning] PlotSquared failed to save the configuration&7 (settings.yml may differ from the one in memory)\n - To force a save from console use /plots save"); PlotMain.sendConsoleSenderMessage("&c[Warning] PlotSquared failed to save the configuration&7 (settings.yml may differ from the one in memory)\n - To force a save from console use /plots save");
} }
} }
@ -1105,15 +1016,13 @@ public class PlotMain extends JavaPlugin {
try { try {
config.save(configFile); config.save(configFile);
} } catch (final IOException e) {
catch (final IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Now add it // Now add it
addPlotWorld(world, plotWorld, plotManager); addPlotWorld(world, plotWorld, plotManager);
} } else {
else {
if (worlds.contains(world)) { if (worlds.contains(world)) {
sendConsoleSenderMessage("&cWorld '" + world + "' in settings.yml is not using PlotSquared generator!"); sendConsoleSenderMessage("&cWorld '" + world + "' in settings.yml is not using PlotSquared generator!");
@ -1129,8 +1038,7 @@ public class PlotMain extends JavaPlugin {
try { try {
config.save(configFile); config.save(configFile);
} } catch (final IOException e) {
catch (final IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1141,13 +1049,11 @@ public class PlotMain extends JavaPlugin {
} }
/** /**
* Adds an external world as a recognized PlotSquared world - The PlotWorld * Adds an external world as a recognized PlotSquared world - The PlotWorld class created is based off the
* class created is based off the configuration in the settings.yml - Do not * configuration in the settings.yml - Do not use this method unless the required world is preconfigured in the
* use this method unless the required world is preconfigured in the
* settings.yml * settings.yml
* *
* @param world * @param world to load
* to load
*/ */
public static void loadWorld(final World world) { public static void loadWorld(final World world) {
if (world == null) { if (world == null) {
@ -1207,17 +1113,14 @@ public class PlotMain extends JavaPlugin {
seconds = 1; seconds = 1;
try { try {
amount = Integer.parseInt(values[0]); amount = Integer.parseInt(values[0]);
} } catch (final Exception e) {
catch (final Exception e) {
return null; return null;
} }
} } else {
else {
try { try {
amount = Integer.parseInt(values[0]); amount = Integer.parseInt(values[0]);
seconds = Integer.parseInt(values[1]); seconds = Integer.parseInt(values[1]);
} } catch (final Exception e) {
catch (final Exception e) {
return null; return null;
} }
} }
@ -1344,8 +1247,7 @@ public class PlotMain extends JavaPlugin {
public String parseValue(final String value) { public String parseValue(final String value) {
try { try {
return Long.parseLong(value) + ""; return Long.parseLong(value) + "";
} } catch (final Exception e) {
catch (final Exception e) {
return null; return null;
} }
} }
@ -1383,12 +1285,9 @@ public class PlotMain extends JavaPlugin {
/** /**
* Add a Plot world * Add a Plot world
* *
* @param world * @param world World to add
* World to add * @param plotworld PlotWorld Object
* @param plotworld * @param manager Plot Manager for the new world
* PlotWorld Object
* @param manager
* Plot Manager for the new world
*/ */
public static void addPlotWorld(final String world, final PlotWorld plotworld, final PlotManager manager) { public static void addPlotWorld(final String world, final PlotWorld plotworld, final PlotManager manager) {
worlds.put(world, plotworld); worlds.put(world, plotworld);
@ -1401,8 +1300,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Remove a plot world * Remove a plot world
* *
* @param world * @param world World to remove
* World to remove
*/ */
public static void removePlotWorld(final String world) { public static void removePlotWorld(final String world) {
plots.remove(world); plots.remove(world);
@ -1422,8 +1320,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Set all plots * Set all plots
* *
* @param plots * @param plots New Plot LinkedHashMap
* New Plot LinkedHashMap
*/ */
public static void setAllPlotsRaw(final LinkedHashMap<String, HashMap<PlotId, Plot>> plots) { public static void setAllPlotsRaw(final LinkedHashMap<String, HashMap<PlotId, Plot>> plots) {
PlotMain.plots = plots; PlotMain.plots = plots;
@ -1432,8 +1329,7 @@ public class PlotMain extends JavaPlugin {
/** /**
* Set all plots * Set all plots
* *
* @param plots * @param plots New Plot HashMap
* New Plot HashMap
*/ */
public static void setAllPlotsRaw(final HashMap<String, HashMap<PlotId, Plot>> plots) { public static void setAllPlotsRaw(final HashMap<String, HashMap<PlotId, Plot>> plots) {
PlotMain.plots = new LinkedHashMap<>(plots); PlotMain.plots = new LinkedHashMap<>(plots);
@ -1465,8 +1361,7 @@ public class PlotMain extends JavaPlugin {
writer.write("Created at: " + new Date().toString() + "\n\n\n"); writer.write("Created at: " + new Date().toString() + "\n\n\n");
writer.close(); writer.close();
} }
} } catch (final IOException e) {
catch (final IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1493,8 +1388,7 @@ public class PlotMain extends JavaPlugin {
sendConsoleSenderMessage(C.PREFIX.s() + "&cURL: &6https://java.com/en/download/index.jsp"); sendConsoleSenderMessage(C.PREFIX.s() + "&cURL: &6https://java.com/en/download/index.jsp");
Bukkit.getPluginManager().disablePlugin(this); Bukkit.getPluginManager().disablePlugin(this);
return; return;
} } else if (getJavaVersion() < 1.8) {
else if (getJavaVersion() < 1.8) {
sendConsoleSenderMessage(C.PREFIX.s() + "&cIt's really recommended to run Java 1.8, as it increases performance"); sendConsoleSenderMessage(C.PREFIX.s() + "&cIt's really recommended to run Java 1.8, as it increases performance");
} }
// Setup configuration // Setup configuration
@ -1505,12 +1399,10 @@ public class PlotMain extends JavaPlugin {
final Metrics metrics = new Metrics(this); final Metrics metrics = new Metrics(this);
metrics.start(); metrics.start();
sendConsoleSenderMessage(C.PREFIX.s() + "&6Metrics enabled."); sendConsoleSenderMessage(C.PREFIX.s() + "&6Metrics enabled.");
} } catch (final Exception e) {
catch (final Exception e) {
sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to load up metrics."); sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to load up metrics.");
} }
} } else {
else {
// We should at least make them feel bad. // We should at least make them feel bad.
sendConsoleSenderMessage("Using metrics will allow us to improve the plugin\nPlease consider it :)"); sendConsoleSenderMessage("Using metrics will allow us to improve the plugin\nPlease consider it :)");
} }
@ -1523,7 +1415,7 @@ public class PlotMain extends JavaPlugin {
} }
// Add tables to this one, if we create more :D // Add tables to this one, if we create more :D
final String[] tables = new String[] { "plot_trusted", "plot_ratings", "plot_comments" }; final String[] tables = new String[]{"plot_trusted", "plot_ratings", "plot_comments"};
// Use mysql? // Use mysql?
if (Settings.DB.USE_MYSQL) { if (Settings.DB.USE_MYSQL) {
@ -1538,8 +1430,7 @@ public class PlotMain extends JavaPlugin {
ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null); ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null);
if (!res.next()) { if (!res.next()) {
DBFunc.createTables("mysql", true); DBFunc.createTables("mysql", true);
} } else {
else {
for (final String table : tables) { for (final String table : tables) {
res = meta.getTables(null, null, Settings.DB.PREFIX + table, null); res = meta.getTables(null, null, Settings.DB.PREFIX + table, null);
if (!res.next()) { if (!res.next()) {
@ -1549,8 +1440,7 @@ public class PlotMain extends JavaPlugin {
// We should not repeat our self :P // We should not repeat our self :P
} }
} }
} } catch (final Exception e) {
catch (final Exception e) {
Logger.add(LogLevel.DANGER, "MySQL connection failed."); Logger.add(LogLevel.DANGER, "MySQL connection failed.");
sendConsoleSenderMessage("&c[Plots] MySQL is not setup correctly. The plugin will disable itself."); sendConsoleSenderMessage("&c[Plots] MySQL is not setup correctly. The plugin will disable itself.");
if ((config == null) || config.getBoolean("debug")) { if ((config == null) || config.getBoolean("debug")) {
@ -1568,8 +1458,7 @@ public class PlotMain extends JavaPlugin {
else if (Settings.DB.USE_MONGO) { else if (Settings.DB.USE_MONGO) {
// DBFunc.dbManager = new MongoManager(); // DBFunc.dbManager = new MongoManager();
sendConsoleSenderMessage(C.PREFIX.s() + "MongoDB is not yet implemented"); sendConsoleSenderMessage(C.PREFIX.s() + "MongoDB is not yet implemented");
} } else if (Settings.DB.USE_SQLITE) {
else if (Settings.DB.USE_SQLITE) {
try { try {
connection = new SQLite(this, Settings.DB.SQLITE_DB + ".db").openConnection(); connection = new SQLite(this, Settings.DB.SQLITE_DB + ".db").openConnection();
{ {
@ -1578,8 +1467,7 @@ public class PlotMain extends JavaPlugin {
ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null); ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null);
if (!res.next()) { if (!res.next()) {
DBFunc.createTables("sqlite", true); DBFunc.createTables("sqlite", true);
} } else {
else {
for (final String table : tables) { for (final String table : tables) {
res = meta.getTables(null, null, Settings.DB.PREFIX + table, null); res = meta.getTables(null, null, Settings.DB.PREFIX + table, null);
if (!res.next()) { if (!res.next()) {
@ -1588,8 +1476,7 @@ public class PlotMain extends JavaPlugin {
} }
} }
} }
} } catch (final Exception e) {
catch (final Exception e) {
Logger.add(LogLevel.DANGER, "SQLite connection failed"); Logger.add(LogLevel.DANGER, "SQLite connection failed");
sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to open SQLite connection. The plugin will disable itself."); sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to open SQLite connection. The plugin will disable itself.");
sendConsoleSenderMessage("&9==== Here is an ugly stacktrace, if you are interested in those things ==="); sendConsoleSenderMessage("&9==== Here is an ugly stacktrace, if you are interested in those things ===");
@ -1598,8 +1485,7 @@ public class PlotMain extends JavaPlugin {
return; return;
} }
plots = DBFunc.getPlots(); plots = DBFunc.getPlots();
} } else {
else {
Logger.add(LogLevel.DANGER, "No storage type is set."); Logger.add(LogLevel.DANGER, "No storage type is set.");
sendConsoleSenderMessage(C.PREFIX + "&cNo storage type is set!"); sendConsoleSenderMessage(C.PREFIX + "&cNo storage type is set!");
getServer().getPluginManager().disablePlugin(this); getServer().getPluginManager().disablePlugin(this);
@ -1612,8 +1498,7 @@ public class PlotMain extends JavaPlugin {
if (getServer().getPluginManager().getPlugin("PlotMe") != null) { if (getServer().getPluginManager().getPlugin("PlotMe") != null) {
try { try {
new PlotMeConverter(this).runAsync(); new PlotMeConverter(this).runAsync();
} } catch (final Exception e) {
catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -1653,8 +1538,7 @@ public class PlotMain extends JavaPlugin {
PlotMain.sendConsoleSenderMessage("&cThis version of WorldEdit does not support PlotSquared."); PlotMain.sendConsoleSenderMessage("&cThis version of WorldEdit does not support PlotSquared.");
PlotMain.sendConsoleSenderMessage("&cPlease use WorldEdit 6+"); PlotMain.sendConsoleSenderMessage("&cPlease use WorldEdit 6+");
PlotMain.sendConsoleSenderMessage("&c - http://builds.enginehub.org/job/worldedit"); PlotMain.sendConsoleSenderMessage("&c - http://builds.enginehub.org/job/worldedit");
} } else {
else {
getServer().getPluginManager().registerEvents(new WorldEditListener(), this); getServer().getPluginManager().registerEvents(new WorldEditListener(), this);
} }
} }
@ -1688,16 +1572,14 @@ public class PlotMain extends JavaPlugin {
try { try {
new SetBlockFast(); new SetBlockFast();
PlotHelper.canSetFast = true; PlotHelper.canSetFast = true;
} } catch (final Throwable e) {
catch (final Throwable e) {
PlotHelper.canSetFast = false; PlotHelper.canSetFast = false;
} }
try { try {
new SendChunk(); new SendChunk();
PlotHelper.canSendChunk = true; PlotHelper.canSendChunk = true;
} } catch (final Throwable e) {
catch (final Throwable e) {
PlotHelper.canSendChunk = false; PlotHelper.canSendChunk = false;
} }
} }
@ -1727,8 +1609,7 @@ public class PlotMain extends JavaPlugin {
final public void onDisable() { final public void onDisable() {
try { try {
C.saveTranslations(); C.saveTranslations();
} } catch (final Exception e) {
catch (final Exception e) {
sendConsoleSenderMessage("Failed to save translations"); sendConsoleSenderMessage("Failed to save translations");
Logger.add(LogLevel.DANGER, "Failed to save translations"); Logger.add(LogLevel.DANGER, "Failed to save translations");
e.printStackTrace(); e.printStackTrace();
@ -1736,15 +1617,13 @@ public class PlotMain extends JavaPlugin {
Logger.add(LogLevel.GENERAL, "Logger disabled"); Logger.add(LogLevel.GENERAL, "Logger disabled");
try { try {
Logger.write(); Logger.write();
} } catch (final IOException e1) {
catch (final IOException e1) {
e1.printStackTrace(); e1.printStackTrace();
} }
try { try {
connection.close(); connection.close();
mySQL.closeConnection(); mySQL.closeConnection();
} } catch (NullPointerException | SQLException e) {
catch (NullPointerException | SQLException e) {
if (connection != null) { if (connection != null) {
Logger.add(LogLevel.DANGER, "Could not close mysql connection"); Logger.add(LogLevel.DANGER, "Could not close mysql connection");
} }

View File

@ -21,16 +21,6 @@
package com.intellectualcrafters.plot.api; package com.intellectualcrafters.plot.api;
import java.util.ArrayList;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.commands.MainCommand; import com.intellectualcrafters.plot.commands.MainCommand;
import com.intellectualcrafters.plot.commands.SubCommand; import com.intellectualcrafters.plot.commands.SubCommand;
@ -41,31 +31,33 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotManager;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.*;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.PlotSquaredException;
import com.intellectualcrafters.plot.util.SchematicHandler;
import com.intellectualcrafters.plot.util.UUIDHandler;
import com.sun.istack.internal.NotNull; import com.sun.istack.internal.NotNull;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.Set;
/** /**
* PlotSquared API * PlotSquared API
* *
* @author Citymonstret * @author Citymonstret
* @author Empire92 * @author Empire92
*
* @version API 2.0 * @version API 2.0
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused") public class PlotAPI {
public class PlotAPI {
/** /**
* Permission that allows for admin access, * Permission that allows for admin access, this permission node will allow the player to use any part of the
* this permission node will allow the player * plugin, without limitations.
* to use any part of the plugin, without limitations.
*/ */
public static final String ADMIN_PERMISSION = "plots.admin"; public static final String ADMIN_PERMISSION = "plots.admin";
/** /**
* Plot Helper Class * Plot Helper Class
@ -74,29 +66,29 @@ public class PlotAPI {
* *
* @see com.intellectualcrafters.plot.util.PlotHelper * @see com.intellectualcrafters.plot.util.PlotHelper
*/ */
private static PlotHelper plotHelper; private static PlotHelper plotHelper;
/** /**
* Player Functions * Player Functions
* * <p/>
* General functions involving players, and plot worlds * General functions involving players, and plot worlds
* *
* @see com.intellectualcrafters.plot.util.PlayerFunctions * @see com.intellectualcrafters.plot.util.PlayerFunctions
*/ */
private static PlayerFunctions playerFunctions; private static PlayerFunctions playerFunctions;
/** /**
* Flag Manager * Flag Manager
* * <p/>
* The manager which handles all flags * The manager which handles all flags
* *
* @see com.intellectualcrafters.plot.flag.FlagManager * @see com.intellectualcrafters.plot.flag.FlagManager
*/ */
private static FlagManager flagManager; private static FlagManager flagManager;
/** /**
* Schematic Handler * Schematic Handler
* * <p/>
* The handler which is used to create, and paste, schematics * The handler which is used to create, and paste, schematics
* *
* @see com.intellectualcrafters.plot.util.SchematicHandler * @see com.intellectualcrafters.plot.util.SchematicHandler
@ -108,25 +100,24 @@ public class PlotAPI {
* *
* @see com.intellectualcrafters.plot.config.C * @see com.intellectualcrafters.plot.config.C
*/ */
private static C c; private static C c;
/** /**
* PlotMain instance * PlotMain instance
* * <p/>
* This is the instance that allows for most methods to be used. * This is the instance that allows for most methods to be used.
* *
* @see com.intellectualcrafters.plot.PlotMain * @see com.intellectualcrafters.plot.PlotMain
*/ */
private final PlotMain plotMain; private final PlotMain plotMain;
/** /**
* Constructor. Insert any Plugin. * Constructor. Insert any Plugin. (Optimally the plugin that is accessing the method)
* (Optimally the plugin that is accessing the method)
* *
* @param plugin * @param plugin Plugin used to access this method
* Plugin used to access this method *
* @throws com.intellectualcrafters.plot.util.PlotSquaredException * @throws com.intellectualcrafters.plot.util.PlotSquaredException if the program fails to fetch the PlotMain
* if the program fails to fetch the PlotMain instance * instance
* @see com.intellectualcrafters.plot.PlotMain * @see com.intellectualcrafters.plot.PlotMain
*/ */
public PlotAPI(@NotNull final JavaPlugin plugin) { public PlotAPI(@NotNull final JavaPlugin plugin) {
@ -140,6 +131,7 @@ public class PlotAPI {
* Get all plots * Get all plots
* *
* @return all plots * @return all plots
*
* @see com.intellectualcrafters.plot.PlotMain#getPlots() * @see com.intellectualcrafters.plot.PlotMain#getPlots()
*/ */
public Set<Plot> getAllPlots() { public Set<Plot> getAllPlots() {
@ -149,8 +141,8 @@ public class PlotAPI {
/** /**
* Return all plots for a player * Return all plots for a player
* *
* @param player * @param player Player, whose plots to search for
* Player, whose plots to search for *
* @return all plots that a player owns * @return all plots that a player owns
*/ */
public Set<Plot> getPlayerPlots(@NotNull final Player player) { public Set<Plot> getPlayerPlots(@NotNull final Player player) {
@ -160,15 +152,12 @@ public class PlotAPI {
/** /**
* Add a plot world * Add a plot world
* *
* @param world * @param world World Name
* World Name * @param plotWorld Plot World Object
* @param plotWorld * @param manager World Manager
* Plot World Object *
* @param manager * @see com.intellectualcrafters.plot.PlotMain#addPlotWorld(String, com.intellectualcrafters.plot.object.PlotWorld,
* World Manager * com.intellectualcrafters.plot.object.PlotManager)
* @see com.intellectualcrafters.plot.PlotMain#addPlotWorld(String,
* com.intellectualcrafters.plot.object.PlotWorld,
* com.intellectualcrafters.plot.object.PlotManager)
*/ */
public void addPlotWorld(@NotNull final String world, @NotNull final PlotWorld plotWorld, @NotNull final PlotManager manager) { public void addPlotWorld(@NotNull final String world, @NotNull final PlotWorld plotWorld, @NotNull final PlotManager manager) {
PlotMain.addPlotWorld(world, plotWorld, manager); PlotMain.addPlotWorld(world, plotWorld, manager);
@ -176,6 +165,7 @@ public class PlotAPI {
/** /**
* @return main configuration * @return main configuration
*
* @see com.intellectualcrafters.plot.PlotMain#config * @see com.intellectualcrafters.plot.PlotMain#config
*/ */
public YamlConfiguration getConfig() { public YamlConfiguration getConfig() {
@ -184,6 +174,7 @@ public class PlotAPI {
/** /**
* @return storage configuration * @return storage configuration
*
* @see com.intellectualcrafters.plot.PlotMain#storage * @see com.intellectualcrafters.plot.PlotMain#storage
*/ */
public YamlConfiguration getStorage() { public YamlConfiguration getStorage() {
@ -191,11 +182,11 @@ public class PlotAPI {
} }
/** /**
* Get the main class for this plugin <br> * Get the main class for this plugin <br> - Contains a lot of fields and methods - not very well organized <br>
* - Contains a lot of fields and methods - not very well organized <br>
* Only use this if you really need it * Only use this if you really need it
* *
* @return PlotMain PlotSquared Main Class * @return PlotMain PlotSquared Main Class
*
* @see com.intellectualcrafters.plot.PlotMain * @see com.intellectualcrafters.plot.PlotMain
*/ */
public PlotMain getMain() { public PlotMain getMain() {
@ -206,6 +197,7 @@ public class PlotAPI {
* PlotHelper class contains useful methods relating to plots. * PlotHelper class contains useful methods relating to plots.
* *
* @return PlotHelper * @return PlotHelper
*
* @see com.intellectualcrafters.plot.util.PlotHelper * @see com.intellectualcrafters.plot.util.PlotHelper
*/ */
public PlotHelper getPlotHelper() { public PlotHelper getPlotHelper() {
@ -213,10 +205,10 @@ public class PlotAPI {
} }
/** /**
* PlayerFunctions class contains useful methods relating to players - Some * PlayerFunctions class contains useful methods relating to players - Some player/plot methods are here as well
* player/plot methods are here as well
* *
* @return PlayerFunctions * @return PlayerFunctions
*
* @see com.intellectualcrafters.plot.util.PlayerFunctions * @see com.intellectualcrafters.plot.util.PlayerFunctions
*/ */
public PlayerFunctions getPlayerFunctions() { public PlayerFunctions getPlayerFunctions() {
@ -227,6 +219,7 @@ public class PlotAPI {
* FlagManager class contains methods relating to plot flags * FlagManager class contains methods relating to plot flags
* *
* @return FlagManager * @return FlagManager
*
* @see com.intellectualcrafters.plot.flag.FlagManager * @see com.intellectualcrafters.plot.flag.FlagManager
*/ */
public FlagManager getFlagManager() { public FlagManager getFlagManager() {
@ -237,6 +230,7 @@ public class PlotAPI {
* SchematicHandler class contains methods related to pasting schematics * SchematicHandler class contains methods related to pasting schematics
* *
* @return SchematicHandler * @return SchematicHandler
*
* @see com.intellectualcrafters.plot.util.SchematicHandler * @see com.intellectualcrafters.plot.util.SchematicHandler
*/ */
public SchematicHandler getSchematicHandler() { public SchematicHandler getSchematicHandler() {
@ -247,6 +241,7 @@ public class PlotAPI {
* C class contains all the captions from the translations.yml file. * C class contains all the captions from the translations.yml file.
* *
* @return C * @return C
*
* @see com.intellectualcrafters.plot.config.C * @see com.intellectualcrafters.plot.config.C
*/ */
public C getCaptions() { public C getCaptions() {
@ -254,12 +249,12 @@ public class PlotAPI {
} }
/** /**
* Get the plot manager for a world. - Most of these methods can be accessed * Get the plot manager for a world. - Most of these methods can be accessed through the PlotHelper
* through the PlotHelper *
* @param world Which manager to get
* *
* @param world
* Which manager to get
* @return PlotManager * @return PlotManager
*
* @see com.intellectualcrafters.plot.object.PlotManager * @see com.intellectualcrafters.plot.object.PlotManager
* @see PlotMain#getPlotManager(org.bukkit.World) * @see PlotMain#getPlotManager(org.bukkit.World)
*/ */
@ -268,12 +263,13 @@ public class PlotAPI {
} }
/** /**
* Get the plot manager for a world. - Contains useful low level methods for * Get the plot manager for a world. - Contains useful low level methods for plot merging, clearing, and
* plot merging, clearing, and tessellation * tessellation
*
* @param world Plot World
* *
* @param world
* Plot World
* @return PlotManager * @return PlotManager
*
* @see PlotMain#getPlotManager(String) * @see PlotMain#getPlotManager(String)
* @see com.intellectualcrafters.plot.object.PlotManager * @see com.intellectualcrafters.plot.object.PlotManager
*/ */
@ -282,14 +278,13 @@ public class PlotAPI {
} }
/** /**
* Get the settings for a world (settings bundled in PlotWorld class) - You * Get the settings for a world (settings bundled in PlotWorld class) - You will need to downcast for the specific
* will need to downcast for the specific settings a Generator has. e.g. * settings a Generator has. e.g. DefaultPlotWorld class implements PlotWorld
* DefaultPlotWorld class implements PlotWorld *
* @param world (to get settings of)
*
* @return PlotWorld class for that world ! will return null if not a plot world world
* *
* @param world
* (to get settings of)
* @return PlotWorld class for that world ! will return null if not a plot
* world world
* @see PlotMain#getWorldSettings(org.bukkit.World) * @see PlotMain#getWorldSettings(org.bukkit.World)
* @see com.intellectualcrafters.plot.object.PlotWorld * @see com.intellectualcrafters.plot.object.PlotWorld
*/ */
@ -300,10 +295,10 @@ public class PlotAPI {
/** /**
* Get the settings for a world (settings bundled in PlotWorld class) * Get the settings for a world (settings bundled in PlotWorld class)
* *
* @param world * @param world (to get settings of)
* (to get settings of) *
* @return PlotWorld class for that world ! will return null if not a plot * @return PlotWorld class for that world ! will return null if not a plot world world
* world world *
* @see PlotMain#getWorldSettings(String) * @see PlotMain#getWorldSettings(String)
* @see com.intellectualcrafters.plot.object.PlotWorld * @see com.intellectualcrafters.plot.object.PlotWorld
*/ */
@ -314,12 +309,11 @@ public class PlotAPI {
/** /**
* Send a message to a player. * Send a message to a player.
* *
* @param player * @param player Player that will receive the message
* Player that will receive the message * @param c (Caption)
* @param c *
* (Caption)
* @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player, * @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player,
* com.intellectualcrafters.plot.config.C, String...) * com.intellectualcrafters.plot.config.C, String...)
*/ */
public void sendMessage(@NotNull final Player player, @NotNull final C c) { public void sendMessage(@NotNull final Player player, @NotNull final C c) {
PlayerFunctions.sendMessage(player, c); PlayerFunctions.sendMessage(player, c);
@ -328,12 +322,10 @@ public class PlotAPI {
/** /**
* Send a message to a player. - Supports color codes * Send a message to a player. - Supports color codes
* *
* @param player * @param player Player that will receive the message
* Player that will receive the message * @param string The message
* @param string *
* The message * @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player, String)
* @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player,
* String)
*/ */
public void sendMessage(@NotNull final Player player, @NotNull final String string) { public void sendMessage(@NotNull final Player player, @NotNull final String string) {
PlayerFunctions.sendMessage(player, string); PlayerFunctions.sendMessage(player, string);
@ -342,8 +334,8 @@ public class PlotAPI {
/** /**
* Send a message to the console. - Supports color codes * Send a message to the console. - Supports color codes
* *
* @param msg * @param msg Message that should be sent to the console
* Message that should be sent to the console *
* @see PlotMain#sendConsoleSenderMessage(String) * @see PlotMain#sendConsoleSenderMessage(String)
*/ */
public void sendConsoleMessage(@NotNull final String msg) { public void sendConsoleMessage(@NotNull final String msg) {
@ -353,8 +345,8 @@ public class PlotAPI {
/** /**
* Send a message to the console * Send a message to the console
* *
* @param c * @param c (Caption)
* (Caption) *
* @see #sendConsoleMessage(String) * @see #sendConsoleMessage(String)
* @see com.intellectualcrafters.plot.config.C * @see com.intellectualcrafters.plot.config.C
*/ */
@ -365,8 +357,8 @@ public class PlotAPI {
/** /**
* Register a flag for use in plots * Register a flag for use in plots
* *
* @param flag * @param flag Flag that should be registered
* Flag that should be registered *
* @see com.intellectualcrafters.plot.flag.FlagManager#addFlag(com.intellectualcrafters.plot.flag.AbstractFlag) * @see com.intellectualcrafters.plot.flag.FlagManager#addFlag(com.intellectualcrafters.plot.flag.AbstractFlag)
* @see com.intellectualcrafters.plot.flag.AbstractFlag * @see com.intellectualcrafters.plot.flag.AbstractFlag
*/ */
@ -378,6 +370,7 @@ public class PlotAPI {
* get all the currently registered flags * get all the currently registered flags
* *
* @return array of Flag[] * @return array of Flag[]
*
* @see com.intellectualcrafters.plot.flag.FlagManager#getFlags() * @see com.intellectualcrafters.plot.flag.FlagManager#getFlags()
* @see com.intellectualcrafters.plot.flag.AbstractFlag * @see com.intellectualcrafters.plot.flag.AbstractFlag
*/ */
@ -388,15 +381,13 @@ public class PlotAPI {
/** /**
* Get a plot based on the ID * Get a plot based on the ID
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param x Plot Location X Co-ord
* @param x * @param z Plot Location Z Co-ord
* Plot Location X Co-ord *
* @param z
* Plot Location Z Co-ord
* @return plot, null if ID is wrong * @return plot, null if ID is wrong
* @see PlotHelper#getPlot(org.bukkit.World, *
* com.intellectualcrafters.plot.object.PlotId) * @see PlotHelper#getPlot(org.bukkit.World, com.intellectualcrafters.plot.object.PlotId)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
public Plot getPlot(@NotNull final World world, final int x, final int z) { public Plot getPlot(@NotNull final World world, final int x, final int z) {
@ -406,9 +397,10 @@ public class PlotAPI {
/** /**
* Get a plot based on the location * Get a plot based on the location
* *
* @param l * @param l The location that you want to to retrieve the plot from
* The location that you want to to retrieve the plot from *
* @return plot if found, otherwise it creates a temporary plot- * @return plot if found, otherwise it creates a temporary plot-
*
* @see PlotHelper#getCurrentPlot(org.bukkit.Location) * @see PlotHelper#getCurrentPlot(org.bukkit.Location)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
@ -419,9 +411,10 @@ public class PlotAPI {
/** /**
* Get a plot based on the player location * Get a plot based on the player location
* *
* @param player * @param player Get the current plot for the player location
* Get the current plot for the player location *
* @return plot if found, otherwise it creates a temporary plot * @return plot if found, otherwise it creates a temporary plot
*
* @see #getPlot(org.bukkit.Location) * @see #getPlot(org.bukkit.Location)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
@ -432,9 +425,10 @@ public class PlotAPI {
/** /**
* Check whether or not a player has a plot * Check whether or not a player has a plot
* *
* @param player * @param player Player that you want to check for
* Player that you want to check for *
* @return true if player has a plot, false if not. * @return true if player has a plot, false if not.
*
* @see #getPlots(org.bukkit.World, org.bukkit.entity.Player, boolean) * @see #getPlots(org.bukkit.World, org.bukkit.entity.Player, boolean)
*/ */
public boolean hasPlot(@NotNull final World world, @NotNull final Player player) { public boolean hasPlot(@NotNull final World world, @NotNull final Player player) {
@ -444,10 +438,9 @@ public class PlotAPI {
/** /**
* Get all plots for the player * Get all plots for the player
* *
* @param plr * @param plr to search for
* to search for * @param just_owner should we just search for owner? Or with rights?
* @param just_owner *
* should we just search for owner? Or with rights?
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
public Plot[] getPlots(@NotNull final World world, @NotNull final Player plr, final boolean just_owner) { public Plot[] getPlots(@NotNull final World world, @NotNull final Player plr, final boolean just_owner) {
@ -457,8 +450,7 @@ public class PlotAPI {
if ((plot.owner != null) && (plot.owner == UUIDHandler.getUUID(plr))) { if ((plot.owner != null) && (plot.owner == UUIDHandler.getUUID(plr))) {
pPlots.add(plot); pPlots.add(plot);
} }
} } else {
else {
if (plot.hasRights(plr)) { if (plot.hasRights(plr)) {
pPlots.add(plot); pPlots.add(plot);
} }
@ -470,9 +462,10 @@ public class PlotAPI {
/** /**
* Get all plots for the world * Get all plots for the world
* *
* @param world * @param world to get plots of
* to get plots of *
* @return Plot[] - array of plot objects in world * @return Plot[] - array of plot objects in world
*
* @see PlotMain#getWorldPlots(org.bukkit.World) * @see PlotMain#getWorldPlots(org.bukkit.World)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
@ -484,6 +477,7 @@ public class PlotAPI {
* Get all plot worlds * Get all plot worlds
* *
* @return World[] - array of plot worlds * @return World[] - array of plot worlds
*
* @see com.intellectualcrafters.plot.PlotMain#getPlotWorlds() * @see com.intellectualcrafters.plot.PlotMain#getPlotWorlds()
*/ */
public String[] getPlotWorlds() { public String[] getPlotWorlds() {
@ -493,9 +487,10 @@ public class PlotAPI {
/** /**
* Get if plot world * Get if plot world
* *
* @param world * @param world (to check if plot world)
* (to check if plot world) *
* @return boolean (if plot world or not) * @return boolean (if plot world or not)
*
* @see com.intellectualcrafters.plot.PlotMain#isPlotWorld(org.bukkit.World) * @see com.intellectualcrafters.plot.PlotMain#isPlotWorld(org.bukkit.World)
*/ */
public boolean isPlotWorld(@NotNull final World world) { public boolean isPlotWorld(@NotNull final World world) {
@ -505,31 +500,33 @@ public class PlotAPI {
/** /**
* Get plot locations * Get plot locations
* *
* @param p * @param p Plot that you want to get the locations for
* Plot that you want to get the locations for *
* @return [0] = bottomLc, [1] = topLoc, [2] = home * @return [0] = bottomLc, [1] = topLoc, [2] = home
*
* @see com.intellectualcrafters.plot.util.PlotHelper#getPlotBottomLoc(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotBottomLoc(org.bukkit.World,
* com.intellectualcrafters.plot.object.PlotId) * com.intellectualcrafters.plot.object.PlotId)
* @see com.intellectualcrafters.plot.util.PlotHelper#getPlotTopLoc(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotTopLoc(org.bukkit.World,
* com.intellectualcrafters.plot.object.PlotId) * com.intellectualcrafters.plot.object.PlotId)
* @see com.intellectualcrafters.plot.util.PlotHelper#getPlotHome(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotHome(org.bukkit.World,
* com.intellectualcrafters.plot.object.Plot) * com.intellectualcrafters.plot.object.Plot)
* @see com.intellectualcrafters.plot.object.PlotHomePosition * @see com.intellectualcrafters.plot.object.PlotHomePosition
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
public Location[] getLocations(@NotNull final Plot p) { public Location[] getLocations(@NotNull final Plot p) {
final World world = Bukkit.getWorld(p.world); final World world = Bukkit.getWorld(p.world);
return new Location[] { PlotHelper.getPlotBottomLoc(world, p.id), PlotHelper.getPlotTopLoc(world, p.id), PlotHelper.getPlotHome(world, p.id) }; return new Location[]{PlotHelper.getPlotBottomLoc(world, p.id), PlotHelper.getPlotTopLoc(world, p.id), PlotHelper.getPlotHome(world, p.id)};
} }
/** /**
* Get home location * Get home location
* *
* @param p * @param p Plot that you want to get the location for
* Plot that you want to get the location for *
* @return plot bottom location * @return plot bottom location
*
* @see com.intellectualcrafters.plot.util.PlotHelper#getPlotHome(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotHome(org.bukkit.World,
* com.intellectualcrafters.plot.object.Plot) * com.intellectualcrafters.plot.object.Plot)
* @see com.intellectualcrafters.plot.object.PlotHomePosition * @see com.intellectualcrafters.plot.object.PlotHomePosition
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
@ -540,11 +537,12 @@ public class PlotAPI {
/** /**
* Get Bottom Location (min, min, min) * Get Bottom Location (min, min, min)
* *
* @param p * @param p Plot that you want to get the location for
* Plot that you want to get the location for *
* @return plot bottom location * @return plot bottom location
*
* @see com.intellectualcrafters.plot.util.PlotHelper#getPlotBottomLoc(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotBottomLoc(org.bukkit.World,
* com.intellectualcrafters.plot.object.PlotId) * com.intellectualcrafters.plot.object.PlotId)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
public Location getBottomLocation(@NotNull final Plot p) { public Location getBottomLocation(@NotNull final Plot p) {
@ -555,11 +553,11 @@ public class PlotAPI {
/** /**
* Get Top Location (max, max, max) * Get Top Location (max, max, max)
* *
* @param p * @param p Plot that you want to get the location for
* Plot that you want to get the location for *
* @return plot top location * @return plot top location
* @see PlotHelper#getPlotTopLoc(org.bukkit.World, *
* com.intellectualcrafters.plot.object.PlotId) * @see PlotHelper#getPlotTopLoc(org.bukkit.World, com.intellectualcrafters.plot.object.PlotId)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
public Location getTopLocation(@NotNull final Plot p) { public Location getTopLocation(@NotNull final Plot p) {
@ -570,9 +568,10 @@ public class PlotAPI {
/** /**
* Check whether or not a player is in a plot * Check whether or not a player is in a plot
* *
* @param player * @param player who we're checking for
* who we're checking for *
* @return true if the player is in a plot, false if not- * @return true if the player is in a plot, false if not-
*
* @see com.intellectualcrafters.plot.util.PlayerFunctions#isInPlot(org.bukkit.entity.Player) * @see com.intellectualcrafters.plot.util.PlayerFunctions#isInPlot(org.bukkit.entity.Player)
*/ */
public boolean isInPlot(@NotNull final Player player) { public boolean isInPlot(@NotNull final Player player) {
@ -582,8 +581,8 @@ public class PlotAPI {
/** /**
* Register a subcommand * Register a subcommand
* *
* @param c * @param c SubCommand, that we want to register
* SubCommand, that we want to register *
* @see com.intellectualcrafters.plot.commands.MainCommand#subCommands * @see com.intellectualcrafters.plot.commands.MainCommand#subCommands
* @see com.intellectualcrafters.plot.commands.SubCommand * @see com.intellectualcrafters.plot.commands.SubCommand
*/ */
@ -595,6 +594,7 @@ public class PlotAPI {
* Get the plotMain class * Get the plotMain class
* *
* @return PlotMain Class * @return PlotMain Class
*
* @see com.intellectualcrafters.plot.PlotMain * @see com.intellectualcrafters.plot.PlotMain
*/ */
public PlotMain getPlotMain() { public PlotMain getPlotMain() {
@ -604,13 +604,13 @@ public class PlotAPI {
/** /**
* Get the player plot count * Get the player plot count
* *
* @param world * @param world Specify the world we want to select the plots from
* Specify the world we want to select the plots from * @param player Player, for whom we're getting the plot count
* @param player *
* Player, for whom we're getting the plot count
* @return the number of plots the player has * @return the number of plots the player has
*
* @see com.intellectualcrafters.plot.util.PlayerFunctions#getPlayerPlotCount(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlayerFunctions#getPlayerPlotCount(org.bukkit.World,
* org.bukkit.entity.Player) * org.bukkit.entity.Player)
*/ */
public int getPlayerPlotCount(@NotNull final World world, @NotNull final Player player) { public int getPlayerPlotCount(@NotNull final World world, @NotNull final Player player) {
return PlayerFunctions.getPlayerPlotCount(world, player); return PlayerFunctions.getPlayerPlotCount(world, player);
@ -619,13 +619,13 @@ public class PlotAPI {
/** /**
* Get a collection containing the players plots * Get a collection containing the players plots
* *
* @param world * @param world Specify the world we want to select the plots from
* Specify the world we want to select the plots from * @param player Player, for whom we're getting the plots
* @param player *
* Player, for whom we're getting the plots
* @return a set containing the players plots * @return a set containing the players plots
*
* @see com.intellectualcrafters.plot.util.PlayerFunctions#getPlayerPlots(org.bukkit.World, * @see com.intellectualcrafters.plot.util.PlayerFunctions#getPlayerPlots(org.bukkit.World,
* org.bukkit.entity.Player) * org.bukkit.entity.Player)
* @see com.intellectualcrafters.plot.object.Plot * @see com.intellectualcrafters.plot.object.Plot
*/ */
public Set<Plot> getPlayerPlots(@NotNull final World world, @NotNull final Player player) { public Set<Plot> getPlayerPlots(@NotNull final World world, @NotNull final Player player) {
@ -635,10 +635,10 @@ public class PlotAPI {
/** /**
* Get the numbers of plots, which the player is able to build in * Get the numbers of plots, which the player is able to build in
* *
* @param player * @param player Player, for whom we're getting the plots (trusted, helper and owner)
* Player, for whom we're getting the plots (trusted, helper and *
* owner)
* @return the number of allowed plots * @return the number of allowed plots
*
* @see com.intellectualcrafters.plot.util.PlayerFunctions#getAllowedPlots(org.bukkit.entity.Player) * @see com.intellectualcrafters.plot.util.PlayerFunctions#getAllowedPlots(org.bukkit.entity.Player)
*/ */
public int getAllowedPlots(@NotNull final Player player) { public int getAllowedPlots(@NotNull final Player player) {

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.config.Settings;
@ -38,9 +32,12 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation") public class Auto extends SubCommand {
public class Auto extends SubCommand {
public static PlotId lastPlot = new PlotId(0, 0); public static PlotId lastPlot = new PlotId(0, 0);
public Auto() { public Auto() {
@ -53,20 +50,16 @@ public class Auto extends SubCommand {
if (absX > absY) { if (absX > absY) {
if (id.x > 0) { if (id.x > 0) {
return new PlotId(id.x, id.y + 1); return new PlotId(id.x, id.y + 1);
} } else {
else {
return new PlotId(id.x, id.y - 1); return new PlotId(id.x, id.y - 1);
} }
} } else if (absY > absX) {
else if (absY > absX) {
if (id.y > 0) { if (id.y > 0) {
return new PlotId(id.x - 1, id.y); return new PlotId(id.x - 1, id.y);
} } else {
else {
return new PlotId(id.x + 1, id.y); return new PlotId(id.x + 1, id.y);
} }
} } else {
else {
if (id.x.equals(id.y) && (id.x > 0)) { if (id.x.equals(id.y) && (id.x > 0)) {
return new PlotId(id.x, id.y + step); return new PlotId(id.x, id.y + step);
} }
@ -89,12 +82,10 @@ public class Auto extends SubCommand {
String schematic = ""; String schematic = "";
if (PlotMain.getPlotWorlds().length == 1) { if (PlotMain.getPlotWorlds().length == 1) {
world = Bukkit.getWorld(PlotMain.getPlotWorlds()[0]); world = Bukkit.getWorld(PlotMain.getPlotWorlds()[0]);
} } else {
else {
if (PlotMain.isPlotWorld(plr.getWorld())) { if (PlotMain.isPlotWorld(plr.getWorld())) {
world = plr.getWorld(); world = plr.getWorld();
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD); PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
return false; return false;
} }
@ -114,8 +105,7 @@ public class Auto extends SubCommand {
if (args.length > 1) { if (args.length > 1) {
schematic = args[1]; schematic = args[1];
} }
} } catch (final Exception e) {
catch (final Exception e) {
size_x = 1; size_x = 1;
size_z = 1; size_z = 1;
schematic = args[0]; schematic = args[0];
@ -123,8 +113,7 @@ public class Auto extends SubCommand {
// "&cError: Invalid size (X,Y)"); // "&cError: Invalid size (X,Y)");
// return false; // return false;
} }
} } else {
else {
schematic = args[0]; schematic = args[0];
// PlayerFunctions.sendMessage(plr, C.NO_PERMISSION); // PlayerFunctions.sendMessage(plr, C.NO_PERMISSION);
// return false; // return false;
@ -139,8 +128,7 @@ public class Auto extends SubCommand {
if ((diff + (size_x * size_z)) >= 0) { if ((diff + (size_x * size_z)) >= 0) {
if (diff < 0) { if (diff < 0) {
PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS_NUM, (-diff - 1) + ""); PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS_NUM, (-diff - 1) + "");
} } else {
else {
PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS);
} }
return false; return false;
@ -188,8 +176,7 @@ public class Auto extends SubCommand {
} }
Auto.lastPlot = getNextPlot(Auto.lastPlot, 1); Auto.lastPlot = getNextPlot(Auto.lastPlot, 1);
} }
} } else {
else {
boolean lastPlot = true; boolean lastPlot = true;
while (!br) { while (!br) {
final PlotId start = getNextPlot(Auto.lastPlot, 1); final PlotId start = getNextPlot(Auto.lastPlot, 1);
@ -199,8 +186,7 @@ public class Auto extends SubCommand {
} }
if ((PlotMain.getPlots(world).get(start) != null) && (PlotMain.getPlots(world).get(start).owner != null)) { if ((PlotMain.getPlots(world).get(start) != null) && (PlotMain.getPlots(world).get(start).owner != null)) {
continue; continue;
} } else {
else {
lastPlot = false; lastPlot = false;
} }
System.out.print("UNOWNED: " + start); System.out.print("UNOWNED: " + start);

View File

@ -1,10 +1,9 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
/** /**
* Created 2014-11-09 for PlotSquared * Created 2014-11-09 for PlotSquared

View File

@ -21,11 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -39,6 +34,9 @@ import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SchematicHandler; import com.intellectualcrafters.plot.util.SchematicHandler;
import com.intellectualcrafters.plot.util.SetBlockFast; import com.intellectualcrafters.plot.util.SetBlockFast;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
/** /**
* @author Citymonstret * @author Citymonstret
@ -71,8 +69,7 @@ public class Claim extends SubCommand {
SchematicHandler.Schematic sch; SchematicHandler.Schematic sch;
if (schematic.equals("")) { if (schematic.equals("")) {
sch = SchematicHandler.getSchematic(world.SCHEMATIC_FILE); sch = SchematicHandler.getSchematic(world.SCHEMATIC_FILE);
} } else {
else {
sch = SchematicHandler.getSchematic(schematic); sch = SchematicHandler.getSchematic(schematic);
if (sch == null) { if (sch == null) {
sch = SchematicHandler.getSchematic(world.SCHEMATIC_FILE); sch = SchematicHandler.getSchematic(world.SCHEMATIC_FILE);

View File

@ -21,9 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
@ -31,6 +28,8 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class Clear extends SubCommand { public class Clear extends SubCommand {
@ -44,23 +43,19 @@ public class Clear extends SubCommand {
// Is console // Is console
if (args.length < 2) { if (args.length < 2) {
PlotMain.sendConsoleSenderMessage("You need to specify two arguments: ID (0;0) & World (world)"); PlotMain.sendConsoleSenderMessage("You need to specify two arguments: ID (0;0) & World (world)");
} } else {
else {
final PlotId id = PlotId.fromString(args[0]); final PlotId id = PlotId.fromString(args[0]);
final String world = args[1]; final String world = args[1];
if (id == null) { if (id == null) {
PlotMain.sendConsoleSenderMessage("Invalid Plot ID: " + args[0]); PlotMain.sendConsoleSenderMessage("Invalid Plot ID: " + args[0]);
} } else {
else {
if (!PlotMain.isPlotWorld(world)) { if (!PlotMain.isPlotWorld(world)) {
PlotMain.sendConsoleSenderMessage("Invalid plot world: " + world); PlotMain.sendConsoleSenderMessage("Invalid plot world: " + world);
} } else {
else {
final Plot plot = PlotHelper.getPlot(Bukkit.getWorld(world), id); final Plot plot = PlotHelper.getPlot(Bukkit.getWorld(world), id);
if (plot == null) { if (plot == null) {
PlotMain.sendConsoleSenderMessage("Could not find plot " + args[0] + " in world " + world); PlotMain.sendConsoleSenderMessage("Could not find plot " + args[0] + " in world " + world);
} } else {
else {
plot.clear(null, false); plot.clear(null, false);
PlotMain.sendConsoleSenderMessage("Plot " + plot.getId().toString() + " cleared."); PlotMain.sendConsoleSenderMessage("Plot " + plot.getId().toString() + " cleared.");
} }

View File

@ -21,14 +21,13 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import static com.intellectualcrafters.plot.object.PlotSelection.currentSelection;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotSelection; import com.intellectualcrafters.plot.object.PlotSelection;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
import static com.intellectualcrafters.plot.object.PlotSelection.currentSelection;
public class Clipboard extends SubCommand { public class Clipboard extends SubCommand {

View File

@ -164,12 +164,12 @@ public enum Command {
/** /**
* Command * Command
*/ */
private final String command; private final String command;
/** /**
* Alias * Alias
*/ */
private final String alias; private final String alias;
/** /**
* Permission Node * Permission Node
@ -177,8 +177,7 @@ public enum Command {
private final CommandPermission permission; private final CommandPermission permission;
/** /**
* @param command * @param command Command "name" (/plot [cmd])
* Command "name" (/plot [cmd])
*/ */
Command(final String command) { Command(final String command) {
this.command = command; this.command = command;
@ -187,10 +186,8 @@ public enum Command {
} }
/** /**
* @param command * @param command Command "name" (/plot [cmd])
* Command "name" (/plot [cmd]) * @param permission Command Permission Node
* @param permission
* Command Permission Node
*/ */
Command(final String command, final CommandPermission permission) { Command(final String command, final CommandPermission permission) {
this.command = command; this.command = command;
@ -199,10 +196,8 @@ public enum Command {
} }
/** /**
* @param command * @param command Command "name" (/plot [cmd])
* Command "name" (/plot [cmd]) * @param alias Command Alias
* @param alias
* Command Alias
*/ */
Command(final String command, final String alias) { Command(final String command, final String alias) {
this.command = command; this.command = command;
@ -211,12 +206,9 @@ public enum Command {
} }
/** /**
* @param command * @param command Command "name" (/plot [cmd])
* Command "name" (/plot [cmd]) * @param alias Command Alias
* @param alias * @param permission Required Permission Node
* Command Alias
* @param permission
* Required Permission Node
*/ */
Command(final String command, final String alias, final CommandPermission permission) { Command(final String command, final String alias, final CommandPermission permission) {
this.command = command; this.command = command;
@ -240,6 +232,7 @@ public enum Command {
/** /**
* @return permission object * @return permission object
*
* @see com.intellectualcrafters.plot.commands.CommandPermission * @see com.intellectualcrafters.plot.commands.CommandPermission
*/ */
public CommandPermission getPermission() { public CommandPermission getPermission() {

View File

@ -21,9 +21,8 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import org.bukkit.entity.Player;
/** /**
* Created by Citymonstret on 2014-08-03. * Created by Citymonstret on 2014-08-03.
@ -38,16 +37,15 @@ public class CommandPermission {
public final String permission; public final String permission;
/** /**
* @param permission * @param permission Command Permission
* Command Permission
*/ */
public CommandPermission(final String permission) { public CommandPermission(final String permission) {
this.permission = permission.toLowerCase(); this.permission = permission.toLowerCase();
} }
/** /**
* @param player * @param player Does the player have the permission?
* Does the player have the permission? *
* @return true of player has the required permission node * @return true of player has the required permission node
*/ */
public boolean hasPermission(final Player player) { public boolean hasPermission(final Player player) {

View File

@ -21,18 +21,17 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotComment; import com.intellectualcrafters.plot.object.PlotComment;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
public class Comment extends SubCommand { public class Comment extends SubCommand {
@ -62,8 +61,7 @@ public class Comment extends SubCommand {
DBFunc.setComment(plr.getWorld().getName(), plot, comment); DBFunc.setComment(plr.getWorld().getName(), plot, comment);
return true; return true;
} } else {
else {
return sendMessage(plr, C.NO_PERMISSION, "plots.comment." + args[0].toLowerCase()); return sendMessage(plr, C.NO_PERMISSION, "plots.comment." + args[0].toLowerCase());
} }
} }

View File

@ -21,14 +21,13 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotSelection; import com.intellectualcrafters.plot.object.PlotSelection;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import org.bukkit.entity.Player;
public class Copy extends SubCommand { public class Copy extends SubCommand {

View File

@ -1,10 +1,9 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
/** /**
* Created 2014-11-09 for PlotSquared * Created 2014-11-09 for PlotSquared

View File

@ -1,15 +1,5 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.database.MySQL; import com.intellectualcrafters.plot.database.MySQL;
import com.intellectualcrafters.plot.database.SQLManager; import com.intellectualcrafters.plot.database.SQLManager;
@ -17,6 +7,15 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.StringComparison; import com.intellectualcrafters.plot.util.StringComparison;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.UUID;
/** /**
* Created 2014-11-15 for PlotSquared * Created 2014-11-15 for PlotSquared
@ -25,7 +24,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler;
*/ */
public class Database extends SubCommand { public class Database extends SubCommand {
final String[] tables = new String[] { "plot_trusted", "plot_ratings", "plot_comments" }; final String[] tables = new String[]{"plot_trusted", "plot_ratings", "plot_comments"};
public Database() { public Database() {
super(Command.DATABASE, "Convert/Backup Storage", "database [type] [...details]", CommandCategory.DEBUG, false); super(Command.DATABASE, "Convert/Backup Storage", "database [type] [...details]", CommandCategory.DEBUG, false);
@ -34,13 +33,11 @@ public class Database extends SubCommand {
private static boolean sendMessageU(final UUID uuid, final String msg) { private static boolean sendMessageU(final UUID uuid, final String msg) {
if (uuid == null) { if (uuid == null) {
PlotMain.sendConsoleSenderMessage(msg); PlotMain.sendConsoleSenderMessage(msg);
} } else {
else {
final Player p = UUIDHandler.uuidWrapper.getPlayer(uuid); final Player p = UUIDHandler.uuidWrapper.getPlayer(uuid);
if ((p != null) && p.isOnline()) { if ((p != null) && p.isOnline()) {
return PlayerFunctions.sendMessage(p, msg); return PlayerFunctions.sendMessage(p, msg);
} } else {
else {
return sendMessageU(null, msg); return sendMessageU(null, msg);
} }
} }
@ -61,15 +58,13 @@ public class Database extends SubCommand {
manager.createPlots(ps); manager.createPlots(ps);
manager.createAllSettingsAndHelpers(ps); manager.createAllSettingsAndHelpers(ps);
sendMessageU(requester, "&6Database conversion finished"); sendMessageU(requester, "&6Database conversion finished");
} } catch (final Exception e) {
catch (final Exception e) {
sendMessageU(requester, "Failed to insert plot objects, see stacktrace for info"); sendMessageU(requester, "Failed to insert plot objects, see stacktrace for info");
e.printStackTrace(); e.printStackTrace();
} }
try { try {
c.close(); c.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -81,7 +76,7 @@ public class Database extends SubCommand {
if (args.length < 1) { if (args.length < 1) {
return sendMessage(plr, "/plot database [sqlite/mysql]"); return sendMessage(plr, "/plot database [sqlite/mysql]");
} }
final String type = new StringComparison(args[0], new String[] { "mysql", "sqlite" }).getBestMatch().toLowerCase(); final String type = new StringComparison(args[0], new String[]{"mysql", "sqlite"}).getBestMatch().toLowerCase();
switch (type) { switch (type) {
case "mysql": case "mysql":
if (args.length < 6) { if (args.length < 6) {
@ -103,8 +98,7 @@ public class Database extends SubCommand {
if (n.isClosed()) { if (n.isClosed()) {
return sendMessage(plr, "Failed to open connection"); return sendMessage(plr, "Failed to open connection");
} }
} } catch (SQLException | ClassNotFoundException e) {
catch (SQLException | ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
return sendMessage(plr, "Failed to open connection, read stacktrace for info"); return sendMessage(plr, "Failed to open connection, read stacktrace for info");
} }
@ -114,8 +108,7 @@ public class Database extends SubCommand {
ResultSet set = meta.getTables(null, null, prefix + "plot", null); ResultSet set = meta.getTables(null, null, prefix + "plot", null);
if (!set.next()) { if (!set.next()) {
manager.createTables("mysql", true); manager.createTables("mysql", true);
} } else {
else {
for (final String s : this.tables) { for (final String s : this.tables) {
set = meta.getTables(null, null, prefix + s, null); set = meta.getTables(null, null, prefix + s, null);
if (!set.next()) { if (!set.next()) {
@ -123,8 +116,7 @@ public class Database extends SubCommand {
} }
} }
} }
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
return sendMessage(plr, "Could not create the required tables and/or load the database") && sendMessage(plr, "Please see the stacktrace for more information"); return sendMessage(plr, "Could not create the required tables and/or load the database") && sendMessage(plr, "Please see the stacktrace for more information");
} }
@ -149,8 +141,7 @@ public class Database extends SubCommand {
private boolean sendMessage(final Player player, final String msg) { private boolean sendMessage(final Player player, final String msg) {
if (player == null) { if (player == null) {
PlotMain.sendConsoleSenderMessage(msg); PlotMain.sendConsoleSenderMessage(msg);
} } else {
else {
PlayerFunctions.sendMessage(player, msg); PlayerFunctions.sendMessage(player, msg);
} }
return true; return true;

View File

@ -21,16 +21,15 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.util.Lag; import com.intellectualcrafters.plot.util.Lag;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.RUtils; import com.intellectualcrafters.plot.util.RUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class Debug extends SubCommand { public class Debug extends SubCommand {

View File

@ -21,9 +21,16 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList; import com.google.common.collect.BiMap;
import java.util.UUID; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.events.PlayerClaimPlotEvent;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.object.*;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
@ -32,20 +39,8 @@ import org.bukkit.block.Block;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.google.common.collect.BiMap; import java.util.ArrayList;
import com.intellectualcrafters.plot.PlotMain; import java.util.UUID;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.events.PlayerClaimPlotEvent;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager;
import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.object.StringWrapper;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.UUIDHandler;
/** /**
* @author Citymonstret * @author Citymonstret
@ -95,8 +90,7 @@ public class DebugClaimTest extends SubCommand {
min = new PlotId(Integer.parseInt(split1[0]), Integer.parseInt(split1[1])); min = new PlotId(Integer.parseInt(split1[0]), Integer.parseInt(split1[1]));
max = new PlotId(Integer.parseInt(split2[0]), Integer.parseInt(split2[1])); max = new PlotId(Integer.parseInt(split2[0]), Integer.parseInt(split2[1]));
} } catch (final Exception e) {
catch (final Exception e) {
return !PlayerFunctions.sendMessage(null, "&cInvalid min/max values. &7The values are to Plot IDs in the format &cX;Y &7where X,Y are the plot coords\nThe conversion will only check the plots in the selected area."); return !PlayerFunctions.sendMessage(null, "&cInvalid min/max values. &7The values are to Plot IDs in the format &cX;Y &7where X,Y are the plot coords\nThe conversion will only check the plots in the selected area.");
} }
PlayerFunctions.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Beginning sign to plot conversion. This may take a while..."); PlayerFunctions.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Beginning sign to plot conversion. This may take a while...");
@ -154,8 +148,7 @@ public class DebugClaimTest extends SubCommand {
plot.owner = uuid; plot.owner = uuid;
plot.hasChanged = true; plot.hasChanged = true;
plots.add(plot); plots.add(plot);
} } else {
else {
PlayerFunctions.sendMessage(null, " - &cInvalid playername: " + plot.id + " : " + line); PlayerFunctions.sendMessage(null, " - &cInvalid playername: " + plot.id + " : " + line);
} }
} }
@ -174,13 +167,11 @@ public class DebugClaimTest extends SubCommand {
PlayerFunctions.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Complete!"); PlayerFunctions.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Complete!");
} } else {
else {
PlayerFunctions.sendMessage(null, "No plots were found for the given search."); PlayerFunctions.sendMessage(null, "No plots were found for the given search.");
} }
} } else {
else {
PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused."); PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused.");
} }
return true; return true;

View File

@ -21,13 +21,12 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.lang.reflect.Field;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
/** /**
* @author Citymonstret * @author Citymonstret
@ -45,14 +44,12 @@ public class DebugLoadTest extends SubCommand {
final Field fPlots = PlotMain.class.getDeclaredField("plots"); final Field fPlots = PlotMain.class.getDeclaredField("plots");
fPlots.setAccessible(true); fPlots.setAccessible(true);
fPlots.set(null, DBFunc.getPlots()); fPlots.set(null, DBFunc.getPlots());
} } catch (final Exception e) {
catch (final Exception e) {
PlotMain.sendConsoleSenderMessage("&3===FAILED&3==="); PlotMain.sendConsoleSenderMessage("&3===FAILED&3===");
e.printStackTrace(); e.printStackTrace();
PlotMain.sendConsoleSenderMessage("&3===END OF STACKTRACE==="); PlotMain.sendConsoleSenderMessage("&3===END OF STACKTRACE===");
} }
} } else {
else {
PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused."); PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused.");
} }
return true; return true;

View File

@ -21,14 +21,13 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
import java.util.ArrayList;
/** /**
* @author Citymonstret * @author Citymonstret
@ -46,8 +45,7 @@ public class DebugSaveTest extends SubCommand {
plots.addAll(PlotMain.getPlots()); plots.addAll(PlotMain.getPlots());
DBFunc.createPlots(plots); DBFunc.createPlots(plots);
DBFunc.createAllSettingsAndHelpers(plots); DBFunc.createAllSettingsAndHelpers(plots);
} } else {
else {
PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused."); PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused.");
} }
return true; return true;

View File

@ -21,16 +21,14 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.entity.Player;
public class Delete extends SubCommand { public class Delete extends SubCommand {
@ -67,8 +65,7 @@ public class Delete extends SubCommand {
if ((Math.abs(plot.id.x) <= Math.abs(Auto.lastPlot.x)) && (Math.abs(plot.id.y) <= Math.abs(Auto.lastPlot.y))) { if ((Math.abs(plot.id.x) <= Math.abs(Auto.lastPlot.x)) && (Math.abs(plot.id.y) <= Math.abs(Auto.lastPlot.y))) {
Auto.lastPlot = plot.id; Auto.lastPlot = plot.id;
} }
} } else {
else {
PlayerFunctions.sendMessage(plr, "Plot deletion has been denied."); PlayerFunctions.sendMessage(plr, "Plot deletion has been denied.");
} }
return true; return true;

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -34,9 +28,13 @@ import com.intellectualcrafters.plot.events.PlayerPlotDeniedEvent;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
@SuppressWarnings("deprecation") import java.util.UUID;
public class Denied extends SubCommand {
@SuppressWarnings("deprecation") public class Denied extends SubCommand {
public Denied() { public Denied() {
super(Command.DENIED, "Manage plot helpers", "denied {add|remove} {player}", CommandCategory.ACTIONS, true); super(Command.DENIED, "Manage plot helpers", "denied {add|remove} {player}", CommandCategory.ACTIONS, true);
@ -62,8 +60,7 @@ public class Denied extends SubCommand {
if (args[1].equalsIgnoreCase("*")) { if (args[1].equalsIgnoreCase("*")) {
uuid = DBFunc.everyone; uuid = DBFunc.everyone;
} } else {
else {
uuid = UUIDHandler.getUUID(args[1]); uuid = UUIDHandler.getUUID(args[1]);
} }
if (!plot.denied.contains(uuid)) { if (!plot.denied.contains(uuid)) {
@ -88,8 +85,7 @@ public class Denied extends SubCommand {
DBFunc.setDenied(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1])); DBFunc.setDenied(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
final PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, true); final PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, true);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
} } else {
else {
PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED); PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED);
return false; return false;
} }
@ -103,8 +99,7 @@ public class Denied extends SubCommand {
} }
PlayerFunctions.sendMessage(plr, C.DENIED_ADDED); PlayerFunctions.sendMessage(plr, C.DENIED_ADDED);
return true; return true;
} } else if (args[0].equalsIgnoreCase("remove")) {
else if (args[0].equalsIgnoreCase("remove")) {
if (args[1].equalsIgnoreCase("*")) { if (args[1].equalsIgnoreCase("*")) {
final UUID uuid = DBFunc.everyone; final UUID uuid = DBFunc.everyone;
if (!plot.denied.contains(uuid)) { if (!plot.denied.contains(uuid)) {
@ -134,8 +129,7 @@ public class Denied extends SubCommand {
final PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, false); final PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, false);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
PlayerFunctions.sendMessage(plr, C.DENIED_REMOVED); PlayerFunctions.sendMessage(plr, C.DENIED_REMOVED);
} } else {
else {
PlayerFunctions.sendMessage(plr, C.DENIED_NEED_ARGUMENT); PlayerFunctions.sendMessage(plr, C.DENIED_NEED_ARGUMENT);
return true; return true;
} }

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -34,9 +28,13 @@ import com.intellectualcrafters.plot.events.PlayerPlotHelperEvent;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
@SuppressWarnings("deprecation") import java.util.UUID;
public class Helpers extends SubCommand {
@SuppressWarnings("deprecation") public class Helpers extends SubCommand {
public Helpers() { public Helpers() {
super(Command.HELPERS, "Manage plot helpers", "helpers {add|remove} {player}", CommandCategory.ACTIONS, true); super(Command.HELPERS, "Manage plot helpers", "helpers {add|remove} {player}", CommandCategory.ACTIONS, true);
@ -61,8 +59,7 @@ public class Helpers extends SubCommand {
UUID uuid; UUID uuid;
if (args[1].equalsIgnoreCase("*")) { if (args[1].equalsIgnoreCase("*")) {
uuid = DBFunc.everyone; uuid = DBFunc.everyone;
} } else {
else {
uuid = UUIDHandler.getUUID(args[1]); uuid = UUIDHandler.getUUID(args[1]);
} }
if (!plot.helpers.contains(uuid)) { if (!plot.helpers.contains(uuid)) {
@ -87,15 +84,13 @@ public class Helpers extends SubCommand {
DBFunc.setHelper(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1])); DBFunc.setHelper(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
final PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, true); final PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, true);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
} } else {
else {
PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED); PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED);
return false; return false;
} }
PlayerFunctions.sendMessage(plr, C.HELPER_ADDED); PlayerFunctions.sendMessage(plr, C.HELPER_ADDED);
return true; return true;
} } else if (args[0].equalsIgnoreCase("remove")) {
else if (args[0].equalsIgnoreCase("remove")) {
if (args[1].equalsIgnoreCase("*")) { if (args[1].equalsIgnoreCase("*")) {
final UUID uuid = DBFunc.everyone; final UUID uuid = DBFunc.everyone;
if (!plot.helpers.contains(uuid)) { if (!plot.helpers.contains(uuid)) {
@ -126,8 +121,7 @@ public class Helpers extends SubCommand {
final PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, false); final PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, false);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
PlayerFunctions.sendMessage(plr, C.HELPER_REMOVED); PlayerFunctions.sendMessage(plr, C.HELPER_REMOVED);
} } else {
else {
PlayerFunctions.sendMessage(plr, C.HELPER_NEED_ARGUMENT); PlayerFunctions.sendMessage(plr, C.HELPER_NEED_ARGUMENT);
return true; return true;
} }

View File

@ -21,12 +21,11 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
/** /**
* @author Citymonstret * @author Citymonstret
@ -52,16 +51,14 @@ public class Home extends SubCommand {
if (plots.length == 1) { if (plots.length == 1) {
PlotMain.teleportPlayer(plr, plr.getLocation(), plots[0]); PlotMain.teleportPlayer(plr, plr.getLocation(), plots[0]);
return true; return true;
} } else if (plots.length > 1) {
else if (plots.length > 1) {
if (args.length < 1) { if (args.length < 1) {
args = new String[] { "1" }; args = new String[]{"1"};
} }
int id = 0; int id = 0;
try { try {
id = Integer.parseInt(args[0]); id = Integer.parseInt(args[0]);
} } catch (final Exception e) {
catch (final Exception e) {
Plot temp; Plot temp;
if ((temp = isAlias(args[0])) != null) { if ((temp = isAlias(args[0])) != null) {
if (temp.hasOwner()) { if (temp.hasOwner()) {
@ -82,8 +79,7 @@ public class Home extends SubCommand {
} }
PlotMain.teleportPlayer(plr, plr.getLocation(), plots[id - 1]); PlotMain.teleportPlayer(plr, plr.getLocation(), plots[id - 1]);
return true; return true;
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NO_PLOTS); PlayerFunctions.sendMessage(plr, C.NO_PLOTS);
return true; return true;
} }

View File

@ -21,20 +21,19 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotComment; import com.intellectualcrafters.plot.object.PlotComment;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class Inbox extends SubCommand { public class Inbox extends SubCommand {
@ -58,17 +57,13 @@ public class Inbox extends SubCommand {
final UUID uuid = plr.getUniqueId(); final UUID uuid = plr.getUniqueId();
if (PlotMain.hasPermission(plr, "plots.admin")) { if (PlotMain.hasPermission(plr, "plots.admin")) {
tier = 0; tier = 0;
} } else if (plot.owner == uuid) {
else if (plot.owner == uuid) {
tier = 1; tier = 1;
} } else if (plot.helpers.contains(uuid)) {
else if (plot.helpers.contains(uuid)) {
tier = 2; tier = 2;
} } else if (plot.trusted.contains(uuid)) {
else if (plot.trusted.contains(uuid)) {
tier = 3; tier = 3;
} } else {
else {
tier = 4; tier = 4;
} }
@ -77,8 +72,7 @@ public class Inbox extends SubCommand {
case "admin": case "admin":
if (tier <= 0) { if (tier <= 0) {
tier = 0; tier = 0;
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX); PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX);
return false; return false;
} }
@ -86,8 +80,7 @@ public class Inbox extends SubCommand {
case "owner": case "owner":
if (tier <= 1) { if (tier <= 1) {
tier = 1; tier = 1;
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX); PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX);
return false; return false;
} }
@ -95,8 +88,7 @@ public class Inbox extends SubCommand {
case "helper": case "helper":
if (tier <= 2) { if (tier <= 2) {
tier = 2; tier = 2;
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX); PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX);
return false; return false;
} }
@ -104,8 +96,7 @@ public class Inbox extends SubCommand {
case "trusted": case "trusted":
if (tier <= 3) { if (tier <= 3) {
tier = 3; tier = 3;
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX); PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX);
return false; return false;
} }
@ -113,14 +104,13 @@ public class Inbox extends SubCommand {
case "everyone": case "everyone":
if (tier <= 4) { if (tier <= 4) {
tier = 4; tier = 4;
} } else {
else {
PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX); PlayerFunctions.sendMessage(plr, C.NO_PERM_INBOX);
return false; return false;
} }
break; break;
case "default": case "default":
PlayerFunctions.sendMessage(plr, C.INVALID_INBOX, Arrays.copyOfRange(new String[] { "admin", "owner", "helper", "trusted", "everyone" }, tier, 4)); PlayerFunctions.sendMessage(plr, C.INVALID_INBOX, Arrays.copyOfRange(new String[]{"admin", "owner", "helper", "trusted", "everyone"}, tier, 4));
return false; return false;
} }
} }
@ -151,8 +141,7 @@ public class Inbox extends SubCommand {
plot.settings.removeComment(comment); plot.settings.removeComment(comment);
PlayerFunctions.sendMessage(plr, C.COMMENT_REMOVED, "1 comment"); PlayerFunctions.sendMessage(plr, C.COMMENT_REMOVED, "1 comment");
return; return;
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, "&cInvalid index:\n/plot inbox [tier] [clear][:#]"); PlayerFunctions.sendMessage(plr, "&cInvalid index:\n/plot inbox [tier] [clear][:#]");
return; return;
} }
@ -162,8 +151,7 @@ public class Inbox extends SubCommand {
} }
plot.settings.removeComments(comments); plot.settings.removeComments(comments);
PlayerFunctions.sendMessage(plr, C.COMMENT_REMOVED, "all comments in that category"); PlayerFunctions.sendMessage(plr, C.COMMENT_REMOVED, "all comments in that category");
} } else {
else {
final List<String> recipients = Arrays.asList("A", "O", "H", "T", "E"); final List<String> recipients = Arrays.asList("A", "O", "H", "T", "E");
int count = 1; int count = 1;
final StringBuilder message = new StringBuilder(); final StringBuilder message = new StringBuilder();

View File

@ -21,16 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import java.util.UUID;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -41,12 +31,20 @@ import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.UUID;
/** /**
* @author Citymonstret * @author Citymonstret
*/ */
@SuppressWarnings({ "unused", "deprecated", "javadoc" }) @SuppressWarnings({"unused", "deprecated", "javadoc"}) public class Info extends SubCommand {
public class Info extends SubCommand {
public Info() { public Info() {
super(Command.INFO, "Display plot info", "info", CommandCategory.INFO, false); super(Command.INFO, "Display plot info", "info", CommandCategory.INFO, false);
@ -63,8 +61,7 @@ public class Info extends SubCommand {
return false; return false;
} }
plot = PlayerFunctions.getCurrentPlot(player); plot = PlayerFunctions.getCurrentPlot(player);
} } else {
else {
if (args.length < 2) { if (args.length < 2) {
PlayerFunctions.sendMessage(null, C.INFO_SYNTAX_CONSOLE); PlayerFunctions.sendMessage(null, C.INFO_SYNTAX_CONSOLE);
return false; return false;
@ -84,13 +81,11 @@ public class Info extends SubCommand {
} }
world = Bukkit.getWorld(args[0]); world = Bukkit.getWorld(args[0]);
if (args.length == 3) { if (args.length == 3) {
args = new String[] { args[2] }; args = new String[]{args[2]};
} } else {
else {
args = new String[0]; args = new String[0];
} }
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(player, C.INFO_SYNTAX_CONSOLE); PlayerFunctions.sendMessage(player, C.INFO_SYNTAX_CONSOLE);
return false; return false;
} }
@ -215,8 +210,7 @@ public class Info extends SubCommand {
for (int x = 0; x < l.size(); x++) { for (int x = 0; x < l.size(); x++) {
if ((x + 1) == l.size()) { if ((x + 1) == l.size()) {
list.append(c.replace("%user%", getPlayerName(l.get(x))).replace(",", "")); list.append(c.replace("%user%", getPlayerName(l.get(x))).replace(",", ""));
} } else {
else {
list.append(c.replace("%user%", getPlayerName(l.get(x)))); list.append(c.replace("%user%", getPlayerName(l.get(x))));
} }
} }

View File

@ -21,8 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@ -30,6 +28,8 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
public class Inventory extends SubCommand { public class Inventory extends SubCommand {
public Inventory() { public Inventory() {

View File

@ -21,16 +21,14 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@SuppressWarnings({ "unused", "deprecation", "javadoc" }) @SuppressWarnings({"unused", "deprecation", "javadoc"}) public class Kick extends SubCommand {
public class Kick extends SubCommand {
public Kick() { public Kick() {
super(Command.KICK, "Kick a player from your plot", "kick", CommandCategory.ACTIONS, true); super(Command.KICK, "Kick a player from your plot", "kick", CommandCategory.ACTIONS, true);

View File

@ -21,10 +21,10 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList; import com.intellectualcrafters.plot.PlotMain;
import java.util.Arrays; import com.intellectualcrafters.plot.config.C;
import java.util.List; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.StringComparison;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -32,10 +32,9 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import java.util.ArrayList;
import com.intellectualcrafters.plot.config.C; import java.util.Arrays;
import com.intellectualcrafters.plot.util.PlayerFunctions; import java.util.List;
import com.intellectualcrafters.plot.util.StringComparison;
/** /**
* PlotMain command class * PlotMain command class
@ -47,11 +46,11 @@ public class MainCommand implements CommandExecutor, TabCompleter {
/** /**
* Main Permission Node * Main Permission Node
*/ */
public static final String MAIN_PERMISSION = "plots.use"; public static final String MAIN_PERMISSION = "plots.use";
private final static SubCommand[] _subCommands = new SubCommand[] { new Ban(), new Unban(), new OP(), new DEOP(), new Claim(), new Paste(), new Copy(), new Clipboard(), new Auto(), new Home(), new Visit(), new TP(), new Set(), new Clear(), new Delete(), new SetOwner(), new Denied(), new Helpers(), new Trusted(), new Info(), new list(), new Help(), new Debug(), new Schematic(), new plugin(), new Inventory(), new Purge(), new Reload(), new Merge(), new Unlink(), new Kick(), new Setup(), new Rate(), new DebugClaimTest(), new Inbox(), new Comment(), new Database(), new Unclaim(), new Swap(), new MusicSubcommand() }; private final static SubCommand[] _subCommands = new SubCommand[]{new Ban(), new Unban(), new OP(), new DEOP(), new Claim(), new Paste(), new Copy(), new Clipboard(), new Auto(), new Home(), new Visit(), new TP(), new Set(), new Clear(), new Delete(), new SetOwner(), new Denied(), new Helpers(), new Trusted(), new Info(), new list(), new Help(), new Debug(), new Schematic(), new plugin(), new Inventory(), new Purge(), new Reload(), new Merge(), new Unlink(), new Kick(), new Setup(), new Rate(), new DebugClaimTest(), new Inbox(), new Comment(), new Database(), new Unclaim(), new Swap(), new MusicSubcommand()};
public final static ArrayList<SubCommand> subCommands = new ArrayList<SubCommand>() { public final static ArrayList<SubCommand> subCommands = new ArrayList<SubCommand>() {
{ {
addAll(Arrays.asList(_subCommands)); addAll(Arrays.asList(_subCommands));
} }
@ -75,7 +74,7 @@ public class MainCommand implements CommandExecutor, TabCompleter {
public static List<String> helpMenu(final Player player, final SubCommand.CommandCategory category, int page) { public static List<String> helpMenu(final Player player, final SubCommand.CommandCategory category, int page) {
final List<SubCommand> commands = getCommands(category, player); final List<SubCommand> commands = getCommands(category, player);
// final int totalPages = ((int) Math.ceil(12 * (commands.size()) / // final int totalPages = ((int) Math.ceil(12 * (commands.size()) /
// 100)); // 100));
final int perPage = 5; final int perPage = 5;
final int totalPages = (int) Math.ceil(commands.size() / perPage); final int totalPages = (int) Math.ceil(commands.size() / perPage);
if (page > totalPages) { if (page > totalPages) {
@ -152,8 +151,7 @@ public class MainCommand implements CommandExecutor, TabCompleter {
String arg2; String arg2;
if (args.length > 2) { if (args.length > 2) {
arg2 = args[2]; arg2 = args[2];
} } else {
else {
arg2 = "1"; arg2 = "1";
} }
@ -175,8 +173,7 @@ public class MainCommand implements CommandExecutor, TabCompleter {
} }
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', help.toString())); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', help.toString()));
// return PlayerFunctions.sendMessage(player, help.toString()); // return PlayerFunctions.sendMessage(player, help.toString());
} } else {
else {
for (final SubCommand command : subCommands) { for (final SubCommand command : subCommands) {
if (command.cmd.equalsIgnoreCase(args[0]) || command.alias.contains(args[0].toLowerCase())) { if (command.cmd.equalsIgnoreCase(args[0]) || command.alias.contains(args[0].toLowerCase())) {
final String[] arguments = new String[args.length - 1]; final String[] arguments = new String[args.length - 1];
@ -184,12 +181,10 @@ public class MainCommand implements CommandExecutor, TabCompleter {
if (command.permission.hasPermission(player)) { if (command.permission.hasPermission(player)) {
if ((player != null) || !command.isPlayer) { if ((player != null) || !command.isPlayer) {
return command.execute(player, arguments); return command.execute(player, arguments);
} } else {
else {
return !PlayerFunctions.sendMessage(null, C.IS_CONSOLE); return !PlayerFunctions.sendMessage(null, C.IS_CONSOLE);
} }
} } else {
else {
return no_permission(player, command.permission.permission.toLowerCase()); return no_permission(player, command.permission.permission.toLowerCase());
} }
} }
@ -234,8 +229,7 @@ public class MainCommand implements CommandExecutor, TabCompleter {
if (cmd.permission.hasPermission(player)) { if (cmd.permission.hasPermission(player)) {
if (cmd.cmd.startsWith(arg)) { if (cmd.cmd.startsWith(arg)) {
tabOptions.add(cmd.cmd); tabOptions.add(cmd.cmd);
} } else if (cmd.alias.get(0).startsWith(arg)) {
else if (cmd.alias.get(0).startsWith(arg)) {
tabOptions.add(cmd.alias.get(0)); tabOptions.add(cmd.alias.get(0));
} }
} }

View File

@ -21,15 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import net.milkbowl.vault.economy.Economy;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.events.PlotMergeEvent; import com.intellectualcrafters.plot.events.PlotMergeEvent;
@ -39,14 +30,21 @@ import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SetBlockFast; import com.intellectualcrafters.plot.util.SetBlockFast;
import net.milkbowl.vault.economy.Economy;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.ArrayList;
/** /**
* @author Citymonstret * @author Citymonstret
*/ */
public class Merge extends SubCommand { public class Merge extends SubCommand {
public final static String[] values = new String[] { "north", "east", "south", "west" }; public final static String[] values = new String[]{"north", "east", "south", "west"};
public final static String[] aliases = new String[] { "n", "e", "s", "w" }; public final static String[] aliases = new String[]{"n", "e", "s", "w"};
public Merge() { public Merge() {
super(Command.MERGE, "Merge the plot you are standing on with another plot.", "merge", CommandCategory.ACTIONS, true); super(Command.MERGE, "Merge the plot you are standing on with another plot.", "merge", CommandCategory.ACTIONS, true);

View File

@ -21,18 +21,17 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.Arrays; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.listeners.PlotPlusListener;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import com.intellectualcrafters.plot.config.C; import java.util.Arrays;
import com.intellectualcrafters.plot.listeners.PlotPlusListener;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
public class MusicSubcommand extends SubCommand { public class MusicSubcommand extends SubCommand {
public MusicSubcommand() { public MusicSubcommand() {

View File

@ -1,10 +1,9 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
/** /**
* Created 2014-11-09 for PlotSquared * Created 2014-11-09 for PlotSquared

View File

@ -21,14 +21,13 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotSelection; import com.intellectualcrafters.plot.object.PlotSelection;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import org.bukkit.entity.Player;
public class Paste extends SubCommand { public class Paste extends SubCommand {
@ -62,8 +61,7 @@ public class Paste extends SubCommand {
} }
selection.paste(plr.getWorld(), plot); selection.paste(plr.getWorld(), plot);
sendMessage(plr, C.PASTED); sendMessage(plr, C.PASTED);
} } else {
else {
sendMessage(plr, C.NO_CLIPBOARD); sendMessage(plr, C.NO_CLIPBOARD);
return false; return false;
} }

View File

@ -21,16 +21,14 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
@SuppressWarnings({ "unused", "deprecated", "javadoc" }) @SuppressWarnings({"unused", "deprecated", "javadoc"}) public class Purge extends SubCommand {
public class Purge extends SubCommand {
public Purge() { public Purge() {
super("purge", "plots.admin", "Purge all plots for a world", "purge", "", CommandCategory.DEBUG, false); super("purge", "plots.admin", "Purge all plots for a world", "purge", "", CommandCategory.DEBUG, false);
@ -60,8 +58,7 @@ public class Purge extends SubCommand {
DBFunc.purge(world, id); DBFunc.purge(world, id);
PlayerFunctions.sendMessage(null, "&aPurge of '" + args[0] + "' was successful!"); PlayerFunctions.sendMessage(null, "&aPurge of '" + args[0] + "' was successful!");
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID);
} }
} }
@ -77,8 +74,7 @@ public class Purge extends SubCommand {
DBFunc.purge(args[0]); DBFunc.purge(args[0]);
PlayerFunctions.sendMessage(plr, (C.PURGE_SUCCESS)); PlayerFunctions.sendMessage(plr, (C.PURGE_SUCCESS));
return true; return true;
} } else {
else {
PlayerFunctions.sendMessage(plr, "This is a dangerous command, if you are sure, use /plot purge {world} -o"); PlayerFunctions.sendMessage(plr, "This is a dangerous command, if you are sure, use /plot purge {world} -o");
return false; return false;
} }

View File

@ -21,15 +21,13 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
@SuppressWarnings({ "unused", "deprecated", "javadoc" }) @SuppressWarnings({"unused", "deprecated", "javadoc"}) public class Rate extends SubCommand {
public class Rate extends SubCommand {
/* /*
* String cmd, String permission, String description, String usage, String * String cmd, String permission, String description, String usage, String
@ -79,8 +77,7 @@ public class Rate extends SubCommand {
boolean rated = true; boolean rated = true;
try { try {
DBFunc.getRatings(plot); DBFunc.getRatings(plot);
} } catch (final Exception e) {
catch (final Exception e) {
rated = false; rated = false;
} }
@ -90,8 +87,7 @@ public class Rate extends SubCommand {
final boolean success = true; final boolean success = true;
if (success) { if (success) {
sendMessage(plr, C.RATING_APPLIED, plot.getId().toString()); sendMessage(plr, C.RATING_APPLIED, plot.getId().toString());
} } else {
else {
sendMessage(plr, C.COMMAND_WENT_WRONG); sendMessage(plr, C.COMMAND_WENT_WRONG);
} }
return true; return true;

View File

@ -21,12 +21,11 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
public class Reload extends SubCommand { public class Reload extends SubCommand {
@ -47,8 +46,7 @@ public class Reload extends SubCommand {
plotworld.loadDefaultConfiguration(PlotMain.config.getConfigurationSection("worlds." + pw)); plotworld.loadDefaultConfiguration(PlotMain.config.getConfigurationSection("worlds." + pw));
} }
PlotMain.BroadcastWithPerms(C.RELOADED_CONFIGS); PlotMain.BroadcastWithPerms(C.RELOADED_CONFIGS);
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.RELOAD_FAILED); PlayerFunctions.sendMessage(plr, C.RELOAD_FAILED);
} }
return true; return true;

View File

@ -21,35 +21,30 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.Collection;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import com.intellectualcrafters.jnbt.CompoundTag; import com.intellectualcrafters.jnbt.CompoundTag;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.*;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SchematicHandler;
import com.intellectualcrafters.plot.util.SchematicHandler.DataCollection; import com.intellectualcrafters.plot.util.SchematicHandler.DataCollection;
import com.intellectualcrafters.plot.util.SchematicHandler.Dimension; import com.intellectualcrafters.plot.util.SchematicHandler.Dimension;
import com.intellectualcrafters.plot.util.SetBlockFast; import org.bukkit.Bukkit;
import com.intellectualcrafters.plot.util.UUIDHandler; import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.util.Collection;
import java.util.HashMap;
public class Schematic extends SubCommand { public class Schematic extends SubCommand {
private int counter = 0; private int counter = 0;
private boolean running = false; private boolean running = false;
private Plot[] plots; private Plot[] plots;
private int task; private int task;
public Schematic() { public Schematic() {
super("schematic", "plots.schematic", "Schematic Command", "schematic {arg}", "sch", CommandCategory.ACTIONS, false); super("schematic", "plots.schematic", "Schematic Command", "schematic {arg}", "sch", CommandCategory.ACTIONS, false);
@ -119,8 +114,7 @@ public class Schematic extends SubCommand {
final Location loc = plr.getLocation(); final Location loc = plr.getLocation();
x = Math.min(length2 - dem.getX(), loc.getBlockX() - bot.getBlockX()); x = Math.min(length2 - dem.getX(), loc.getBlockX() - bot.getBlockX());
z = Math.min(length2 - dem.getZ(), loc.getBlockZ() - bot.getBlockZ()); z = Math.min(length2 - dem.getZ(), loc.getBlockZ() - bot.getBlockZ());
} } else {
else {
x = 0; x = 0;
z = 0; z = 0;
} }
@ -237,8 +231,7 @@ public class Schematic extends SubCommand {
final String owner = o == null ? "unknown" : o; final String owner = o == null ? "unknown" : o;
if (sch == null) { if (sch == null) {
PlayerFunctions.sendMessage(null, "&7 - Skipped plot &c" + plot.id); PlayerFunctions.sendMessage(null, "&7 - Skipped plot &c" + plot.id);
} } else {
else {
Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() { Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() {
@Override @Override
public void run() { public void run() {
@ -246,8 +239,7 @@ public class Schematic extends SubCommand {
final boolean result = SchematicHandler.save(sch, Settings.SCHEMATIC_SAVE_PATH + "/" + plot.id.x + ";" + plot.id.y + "," + worldname + "," + owner + ".schematic"); final boolean result = SchematicHandler.save(sch, Settings.SCHEMATIC_SAVE_PATH + "/" + plot.id.x + ";" + plot.id.y + "," + worldname + "," + owner + ".schematic");
if (!result) { if (!result) {
PlayerFunctions.sendMessage(null, "&7 - Failed to save &c" + plot.id); PlayerFunctions.sendMessage(null, "&7 - Failed to save &c" + plot.id);
} } else {
else {
PlayerFunctions.sendMessage(null, "&7 - &aExport success: " + plot.id); PlayerFunctions.sendMessage(null, "&7 - &aExport success: " + plot.id);
} }
} }
@ -281,8 +273,7 @@ public class Schematic extends SubCommand {
} }
p2 = myplot; p2 = myplot;
world = plr.getWorld().getName(); world = plr.getWorld().getName();
} } else {
else {
if (args.length == 3) { if (args.length == 3) {
try { try {
world = args[0]; world = args[0];
@ -293,13 +284,11 @@ public class Schematic extends SubCommand {
return false; return false;
} }
p2 = PlotMain.getPlots(world).get(i); p2 = PlotMain.getPlots(world).get(i);
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save <world> <id>"); PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save <world> <id>");
return false; return false;
} }
} } else {
else {
PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save <world> <id>"); PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save <world> <id>");
return false; return false;
} }
@ -307,7 +296,7 @@ public class Schematic extends SubCommand {
final Plugin plugin2 = Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"); final Plugin plugin2 = Bukkit.getServer().getPluginManager().getPlugin("PlotSquared");
this.plots = new Plot[] { p2 }; this.plots = new Plot[]{p2};
this.running = true; this.running = true;
this.counter = 0; this.counter = 0;
@ -326,8 +315,7 @@ public class Schematic extends SubCommand {
final String owner = o == null ? "unknown" : o; final String owner = o == null ? "unknown" : o;
if (sch == null) { if (sch == null) {
PlayerFunctions.sendMessage(plr, "&7 - Skipped plot &c" + plot.id); PlayerFunctions.sendMessage(plr, "&7 - Skipped plot &c" + plot.id);
} } else {
else {
Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() { Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() {
@Override @Override
public void run() { public void run() {
@ -335,8 +323,7 @@ public class Schematic extends SubCommand {
final boolean result = SchematicHandler.save(sch, Settings.SCHEMATIC_SAVE_PATH + "/" + plot.id.x + ";" + plot.id.y + "," + world + "," + owner.trim() + ".schematic"); final boolean result = SchematicHandler.save(sch, Settings.SCHEMATIC_SAVE_PATH + "/" + plot.id.x + ";" + plot.id.y + "," + world + "," + owner.trim() + ".schematic");
if (!result) { if (!result) {
PlayerFunctions.sendMessage(plr, "&7 - Failed to save &c" + plot.id); PlayerFunctions.sendMessage(plr, "&7 - Failed to save &c" + plot.id);
} } else {
else {
PlayerFunctions.sendMessage(plr, "&7 - &aExport success: " + plot.id); PlayerFunctions.sendMessage(plr, "&7 - &aExport success: " + plot.id);
} }
} }

View File

@ -21,17 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -48,14 +37,24 @@ import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.StringComparison; import com.intellectualcrafters.plot.util.StringComparison;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** /**
* @author Citymonstret * @author Citymonstret
*/ */
public class Set extends SubCommand { public class Set extends SubCommand {
public final static String[] values = new String[] { "biome", "wall", "wall_filling", "floor", "alias", "home", "flag" }; public final static String[] values = new String[]{"biome", "wall", "wall_filling", "floor", "alias", "home", "flag"};
public final static String[] aliases = new String[] { "b", "w", "wf", "f", "a", "h", "fl" }; public final static String[] aliases = new String[]{"b", "w", "wf", "f", "a", "h", "fl"};
public Set() { public Set() {
super(Command.SET, "Set a plot value", "set {arg} {value...}", CommandCategory.ACTIONS, true); super(Command.SET, "Set a plot value", "set {arg} {value...}", CommandCategory.ACTIONS, true);
@ -100,8 +99,7 @@ public class Set extends SubCommand {
if (PlotMain.worldGuardListener != null) { if (PlotMain.worldGuardListener != null) {
if (message.equals("")) { if (message.equals("")) {
message = StringUtils.join(PlotMain.worldGuardListener.str_flags, "&c, &6"); message = StringUtils.join(PlotMain.worldGuardListener.str_flags, "&c, &6");
} } else {
else {
message += "," + StringUtils.join(PlotMain.worldGuardListener.str_flags, "&c, &6"); message += "," + StringUtils.join(PlotMain.worldGuardListener.str_flags, "&c, &6");
} }
} }
@ -113,8 +111,7 @@ public class Set extends SubCommand {
try { try {
af = FlagManager.getFlag(args[1].toLowerCase()); af = FlagManager.getFlag(args[1].toLowerCase());
} } catch (final Exception e) {
catch (final Exception e) {
af = new AbstractFlag(args[1].toLowerCase()); af = new AbstractFlag(args[1].toLowerCase());
} }
@ -183,8 +180,7 @@ public class Set extends SubCommand {
PlayerFunctions.sendMessage(plr, C.FLAG_ADDED); PlayerFunctions.sendMessage(plr, C.FLAG_ADDED);
PlotListener.plotEntry(plr, plot); PlotListener.plotEntry(plr, plot);
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, "&c" + e.getMessage()); PlayerFunctions.sendMessage(plr, "&c" + e.getMessage());
return false; return false;
} }
@ -275,8 +271,7 @@ public class Set extends SubCommand {
Material material; Material material;
try { try {
material = getMaterial(args[1], PlotWorld.BLOCKS); material = getMaterial(args[1], PlotWorld.BLOCKS);
} } catch (final NullPointerException e) {
catch (final NullPointerException e) {
material = null; material = null;
} }
/* /*
@ -296,8 +291,7 @@ public class Set extends SubCommand {
if (args.length > 2) { if (args.length > 2) {
try { try {
data = (byte) Integer.parseInt(args[2]); data = (byte) Integer.parseInt(args[2]);
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA); PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA);
return true; return true;
} }
@ -317,8 +311,7 @@ public class Set extends SubCommand {
return true; return true;
} }
// //
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked") final ArrayList<Material> materials = (ArrayList<Material>) ((ArrayList<Material>) PlotWorld.BLOCKS).clone();
final ArrayList<Material> materials = (ArrayList<Material>) ((ArrayList<Material>) PlotWorld.BLOCKS).clone();
materials.add(Material.AIR); materials.add(Material.AIR);
// //
final String[] strings = args[1].split(","); final String[] strings = args[1].split(",");
@ -352,13 +345,11 @@ public class Set extends SubCommand {
if (ss.length == 1) { if (ss.length == 1) {
blocks[index] = new PlotBlock((short) m.getId(), (byte) 0); blocks[index] = new PlotBlock((short) m.getId(), (byte) 0);
} } else {
else {
byte b; byte b;
try { try {
b = (byte) Integer.parseInt(ss[1]); b = (byte) Integer.parseInt(ss[1]);
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA); PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA);
return true; return true;
} }
@ -402,8 +393,7 @@ public class Set extends SubCommand {
if (args.length > 2) { if (args.length > 2) {
try { try {
data = (byte) Integer.parseInt(args[2]); data = (byte) Integer.parseInt(args[2]);
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA); PlayerFunctions.sendMessage(plr, C.NOT_VALID_DATA);
return true; return true;
} }
@ -415,8 +405,7 @@ public class Set extends SubCommand {
AbstractFlag af; AbstractFlag af;
try { try {
af = new AbstractFlag(args[0].toLowerCase()); af = new AbstractFlag(args[0].toLowerCase());
} } catch (final Exception e) {
catch (final Exception e) {
af = new AbstractFlag(""); af = new AbstractFlag("");
} }
if (FlagManager.getFlags().contains(af)) { if (FlagManager.getFlags().contains(af)) {

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import java.util.UUID;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -35,9 +29,13 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.World;
import org.bukkit.entity.Player;
@SuppressWarnings("deprecation") import java.util.ArrayList;
public class SetOwner extends SubCommand { import java.util.UUID;
@SuppressWarnings("deprecation") public class SetOwner extends SubCommand {
public SetOwner() { public SetOwner() {
super("setowner", "plots.admin", "Set the plot owner", "setowner {player}", "so", CommandCategory.ACTIONS, true); super("setowner", "plots.admin", "Set the plot owner", "setowner {player}", "so", CommandCategory.ACTIONS, true);

View File

@ -21,11 +21,13 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.io.IOException; import com.intellectualcrafters.plot.PlotMain;
import java.util.ArrayList; import com.intellectualcrafters.plot.config.C;
import java.util.HashMap; import com.intellectualcrafters.plot.config.ConfigurationNode;
import java.util.Map; import com.intellectualcrafters.plot.generator.DefaultPlotWorld;
import com.intellectualcrafters.plot.object.PlotGenerator;
import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
@ -35,13 +37,10 @@ import org.bukkit.event.Listener;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import com.intellectualcrafters.plot.PlotMain; import java.io.IOException;
import com.intellectualcrafters.plot.config.C; import java.util.ArrayList;
import com.intellectualcrafters.plot.config.ConfigurationNode; import java.util.HashMap;
import com.intellectualcrafters.plot.generator.DefaultPlotWorld; import java.util.Map;
import com.intellectualcrafters.plot.object.PlotGenerator;
import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions;
/** /**
* Created 2014-09-26 for PlotSquared * Created 2014-09-26 for PlotSquared
@ -62,8 +61,7 @@ public class Setup extends SubCommand implements Listener {
if (plr == null) { if (plr == null) {
plrname = ""; plrname = "";
} } else {
else {
plrname = plr.getName(); plrname = plr.getName();
} }
@ -77,20 +75,17 @@ public class Setup extends SubCommand implements Listener {
} }
try { try {
PlotMain.config.save(PlotMain.configFile); PlotMain.config.save(PlotMain.configFile);
} } catch (final IOException e) {
catch (final IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Creating the worlds // Creating the worlds
if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) {
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv create " + world + " normal -g " + object.plugin); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv create " + world + " normal -g " + object.plugin);
} } else {
else {
if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) {
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world + " plugin:" + object.plugin); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world + " plugin:" + object.plugin);
} } else {
else {
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) { for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
if (plugin.isEnabled()) { if (plugin.isEnabled()) {
if (plugin.getDefaultWorldGenerator("world", "") != null) { if (plugin.getDefaultWorldGenerator("world", "") != null) {
@ -120,8 +115,7 @@ public class Setup extends SubCommand implements Listener {
if (args.length < 1) { if (args.length < 1) {
sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + "");
return true; return true;
} } else {
else {
if (args[0].equalsIgnoreCase("cancel")) { if (args[0].equalsIgnoreCase("cancel")) {
setupMap.remove(plrname); setupMap.remove(plrname);
PlayerFunctions.sendMessage(plr, "&cCancelled setup."); PlayerFunctions.sendMessage(plr, "&cCancelled setup.");
@ -133,8 +127,7 @@ public class Setup extends SubCommand implements Listener {
step = object.step[object.current]; step = object.step[object.current];
sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + "");
return true; return true;
} } else {
else {
sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + "");
return true; return true;
} }
@ -151,15 +144,13 @@ public class Setup extends SubCommand implements Listener {
step = object.step[object.current]; step = object.step[object.current];
sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + "");
return true; return true;
} } else {
else {
sendMessage(plr, C.SETUP_INVALID_ARG, args[0], step.getConstant()); sendMessage(plr, C.SETUP_INVALID_ARG, args[0], step.getConstant());
sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + "");
return true; return true;
} }
} }
} } else {
else {
if (args.length < 1) { if (args.length < 1) {
sendMessage(plr, C.SETUP_MISSING_WORLD); sendMessage(plr, C.SETUP_MISSING_WORLD);
return true; return true;
@ -202,8 +193,7 @@ public class Setup extends SubCommand implements Listener {
PlotWorld plotworld; PlotWorld plotworld;
if (generator instanceof PlotGenerator) { if (generator instanceof PlotGenerator) {
plotworld = ((PlotGenerator) generator).getNewPlotWorld(world); plotworld = ((PlotGenerator) generator).getNewPlotWorld(world);
} } else {
else {
plotworld = new DefaultPlotWorld(world); plotworld = new DefaultPlotWorld(world);
} }
@ -217,10 +207,10 @@ public class Setup extends SubCommand implements Listener {
} }
private class SetupObject { private class SetupObject {
final String world; final String world;
final String plugin; final String plugin;
final ConfigurationNode[] step; final ConfigurationNode[] step;
int current = 0; int current = 0;
public SetupObject(final String world, final PlotWorld plotworld, final String plugin) { public SetupObject(final String world, final PlotWorld plotworld, final String plugin) {
this.world = world; this.world = world;

View File

@ -21,26 +21,24 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import java.util.Arrays;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.Arrays;
/** /**
* SubCommand class * SubCommand class
* *
* @author Citymonstret * @author Citymonstret
*/ */
@SuppressWarnings({ "deprecation", "unused" }) @SuppressWarnings({"deprecation", "unused"}) public abstract class SubCommand {
public abstract class SubCommand {
/** /**
* Command * Command
*/ */
public final String cmd; public final String cmd;
/** /**
* Permission node * Permission node
*/ */
@ -48,7 +46,7 @@ public abstract class SubCommand {
/** /**
* Simple description * Simple description
*/ */
public final String description; public final String description;
/** /**
* Aliases * Aliases
*/ */
@ -56,29 +54,23 @@ public abstract class SubCommand {
/** /**
* Command usage * Command usage
*/ */
public final String usage; public final String usage;
/** /**
* The category * The category
*/ */
public final CommandCategory category; public final CommandCategory category;
/** /**
* Is this a player-online command? * Is this a player-online command?
*/ */
public final boolean isPlayer; public final boolean isPlayer;
/** /**
* @param cmd * @param cmd Command /plot {cmd} <-- That!
* Command /plot {cmd} <-- That! * @param permission Permission Node
* @param permission * @param description Simple description
* Permission Node * @param usage Usage description: /plot command {args...}
* @param description * @param alias Command alias
* Simple description * @param category CommandCategory. Pick whichever is closest to what you want.
* @param usage
* Usage description: /plot command {args...}
* @param alias
* Command alias
* @param category
* CommandCategory. Pick whichever is closest to what you want.
*/ */
public SubCommand(final String cmd, final String permission, final String description, final String usage, final String alias, final CommandCategory category, final boolean isPlayer) { public SubCommand(final String cmd, final String permission, final String description, final String usage, final String alias, final CommandCategory category, final boolean isPlayer) {
this.cmd = cmd; this.cmd = cmd;
@ -92,18 +84,12 @@ public abstract class SubCommand {
} }
/** /**
* @param cmd * @param cmd Command /plot {cmd} <-- That!
* Command /plot {cmd} <-- That! * @param permission Permission Node
* @param permission * @param description Simple description
* Permission Node * @param usage Usage description: /plot command {args...}
* @param description * @param aliases Command aliases
* Simple description * @param category CommandCategory. Pick whichever is closest to what you want.
* @param usage
* Usage description: /plot command {args...}
* @param aliases
* Command aliases
* @param category
* CommandCategory. Pick whichever is closest to what you want.
*/ */
public SubCommand(final String cmd, final String permission, final String description, final String usage, final CommandCategory category, final boolean isPlayer, final String... aliases) { public SubCommand(final String cmd, final String permission, final String description, final String usage, final CommandCategory category, final boolean isPlayer, final String... aliases) {
this.cmd = cmd; this.cmd = cmd;
@ -117,14 +103,10 @@ public abstract class SubCommand {
} }
/** /**
* @param command * @param command Command /plot {cmd} <-- That!
* Command /plot {cmd} <-- That! * @param description Simple description
* @param description * @param usage Usage description: /plot command {args...}
* Simple description * @param category CommandCategory. Pick whichever closests to what you want.
* @param usage
* Usage description: /plot command {args...}
* @param category
* CommandCategory. Pick whichever closests to what you want.
*/ */
public SubCommand(final Command command, final String description, final String usage, final CommandCategory category, final boolean isPlayer) { public SubCommand(final Command command, final String description, final String usage, final CommandCategory category, final boolean isPlayer) {
this.cmd = command.getCommand(); this.cmd = command.getCommand();
@ -140,10 +122,9 @@ public abstract class SubCommand {
/** /**
* Execute. * Execute.
* *
* @param plr * @param plr executor
* executor * @param args arguments
* @param args *
* arguments
* @return true on success, false on failure * @return true on success, false on failure
*/ */
public abstract boolean execute(final Player plr, final String... args); public abstract boolean execute(final Player plr, final String... args);
@ -151,8 +132,7 @@ public abstract class SubCommand {
/** /**
* Execute the command as console * Execute the command as console
* *
* @param args * @param args Arguments
* Arguments
*/ */
public void executeConsole(final String... args) { public void executeConsole(final String... args) {
this.execute(null, args); this.execute(null, args);
@ -161,14 +141,12 @@ public abstract class SubCommand {
/** /**
* Send a message * Send a message
* *
* @param plr * @param plr Player who will receive the mssage
* Player who will receive the mssage * @param c Caption
* @param c * @param args Arguments (%s's)
* Caption *
* @param args
* Arguments (%s's)
* @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player, * @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player,
* com.intellectualcrafters.plot.config.C, String...) * com.intellectualcrafters.plot.config.C, String...)
*/ */
public boolean sendMessage(final Player plr, final C c, final String... args) { public boolean sendMessage(final Player plr, final C c, final String... args) {
PlayerFunctions.sendMessage(plr, c, args); PlayerFunctions.sendMessage(plr, c, args);
@ -221,8 +199,7 @@ public abstract class SubCommand {
/** /**
* Constructor * Constructor
* *
* @param name * @param name readable name
* readable name
*/ */
CommandCategory(final String name) { CommandCategory(final String name) {
this.name = name; this.name = name;

View File

@ -21,9 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
@ -32,6 +29,8 @@ import com.intellectualcrafters.plot.object.PlotSelection;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SetBlockFast; import com.intellectualcrafters.plot.util.SetBlockFast;
import org.bukkit.World;
import org.bukkit.entity.Player;
/** /**
* Created 2014-08-01 for PlotSquared * Created 2014-08-01 for PlotSquared
@ -74,8 +73,7 @@ public class Swap extends SubCommand {
PlayerFunctions.sendMessage(plr, C.NO_PERM_MERGE, plotid.toString()); PlayerFunctions.sendMessage(plr, C.NO_PERM_MERGE, plotid.toString());
return false; return false;
} }
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID);
PlayerFunctions.sendMessage(plr, C.SWAP_SYNTAX); PlayerFunctions.sendMessage(plr, C.SWAP_SYNTAX);
return false; return false;

View File

@ -21,17 +21,16 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
/** /**
* @author Citymonstret * @author Citymonstret
@ -70,8 +69,7 @@ public class TP extends SubCommand {
plotid = new PlotId(Integer.parseInt(id.split(";")[0]), Integer.parseInt(id.split(";")[1])); plotid = new PlotId(Integer.parseInt(id.split(";")[0]), Integer.parseInt(id.split(";")[1]));
PlotMain.teleportPlayer(plr, plr.getLocation(), PlotHelper.getPlot(world, plotid)); PlotMain.teleportPlayer(plr, plr.getLocation(), PlotHelper.getPlot(world, plotid));
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID);
} }
return false; return false;
@ -86,8 +84,7 @@ public class TP extends SubCommand {
} }
a = split[0]; a = split[0];
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation") final Player player = Bukkit.getPlayer(a);
final Player player = Bukkit.getPlayer(a);
if (player != null) { if (player != null) {
final java.util.Set<Plot> plotMainPlots = PlotMain.getPlots(world, player); final java.util.Set<Plot> plotMainPlots = PlotMain.getPlots(world, player);
final Plot[] plots = plotMainPlots.toArray(new Plot[plotMainPlots.size()]); final Plot[] plots = plotMainPlots.toArray(new Plot[plotMainPlots.size()]);

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -34,9 +28,13 @@ import com.intellectualcrafters.plot.events.PlayerPlotTrustedEvent;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
@SuppressWarnings("deprecation") import java.util.UUID;
public class Trusted extends SubCommand {
@SuppressWarnings("deprecation") public class Trusted extends SubCommand {
public Trusted() { public Trusted() {
super(Command.TRUSTED, "Manage trusted users for a plot", "trusted {add|remove} {player}", CommandCategory.ACTIONS, true); super(Command.TRUSTED, "Manage trusted users for a plot", "trusted {add|remove} {player}", CommandCategory.ACTIONS, true);
@ -62,8 +60,7 @@ public class Trusted extends SubCommand {
if (args[1].equalsIgnoreCase("*")) { if (args[1].equalsIgnoreCase("*")) {
uuid = DBFunc.everyone; uuid = DBFunc.everyone;
} } else {
else {
uuid = UUIDHandler.getUUID(args[1]); uuid = UUIDHandler.getUUID(args[1]);
} }
if (!plot.trusted.contains(uuid)) { if (!plot.trusted.contains(uuid)) {
@ -88,15 +85,13 @@ public class Trusted extends SubCommand {
DBFunc.setTrusted(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1])); DBFunc.setTrusted(plr.getWorld().getName(), plot, Bukkit.getOfflinePlayer(args[1]));
final PlayerPlotTrustedEvent event = new PlayerPlotTrustedEvent(plr, plot, uuid, true); final PlayerPlotTrustedEvent event = new PlayerPlotTrustedEvent(plr, plot, uuid, true);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
} } else {
else {
PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED); PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED);
return false; return false;
} }
PlayerFunctions.sendMessage(plr, C.TRUSTED_ADDED); PlayerFunctions.sendMessage(plr, C.TRUSTED_ADDED);
return true; return true;
} } else if (args[0].equalsIgnoreCase("remove")) {
else if (args[0].equalsIgnoreCase("remove")) {
if (args[1].equalsIgnoreCase("*")) { if (args[1].equalsIgnoreCase("*")) {
final UUID uuid = DBFunc.everyone; final UUID uuid = DBFunc.everyone;
if (!plot.trusted.contains(uuid)) { if (!plot.trusted.contains(uuid)) {
@ -127,8 +122,7 @@ public class Trusted extends SubCommand {
final PlayerPlotTrustedEvent event = new PlayerPlotTrustedEvent(plr, plot, uuid, false); final PlayerPlotTrustedEvent event = new PlayerPlotTrustedEvent(plr, plot, uuid, false);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
PlayerFunctions.sendMessage(plr, C.TRUSTED_REMOVED); PlayerFunctions.sendMessage(plr, C.TRUSTED_REMOVED);
} } else {
else {
PlayerFunctions.sendMessage(plr, C.TRUSTED_NEED_ARGUMENT); PlayerFunctions.sendMessage(plr, C.TRUSTED_NEED_ARGUMENT);
return true; return true;
} }

View File

@ -1,10 +1,9 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.entity.Player;
/** /**
* Created 2014-11-09 for PlotSquared * Created 2014-11-09 for PlotSquared

View File

@ -21,16 +21,14 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.entity.Player;
public class Unclaim extends SubCommand { public class Unclaim extends SubCommand {
@ -66,9 +64,14 @@ public class Unclaim extends SubCommand {
if ((Math.abs(plot.id.x) <= Math.abs(Auto.lastPlot.x)) && (Math.abs(plot.id.y) <= Math.abs(Auto.lastPlot.y))) { if ((Math.abs(plot.id.x) <= Math.abs(Auto.lastPlot.x)) && (Math.abs(plot.id.y) <= Math.abs(Auto.lastPlot.y))) {
Auto.lastPlot = plot.id; Auto.lastPlot = plot.id;
} }
<<<<<<< HEAD
} }
else { else {
PlayerFunctions.sendMessage(plr, "Plot unclaim has been denied."); PlayerFunctions.sendMessage(plr, "Plot unclaim has been denied.");
=======
} else {
PlayerFunctions.sendMessage(plr, "Plot removal has been denied.");
>>>>>>> 73e92b834155ea9e458d7299ad78f4fd9b55aa66
} }
PlayerFunctions.sendMessage(plr, C.UNCLAIM_SUCCESS); PlayerFunctions.sendMessage(plr, C.UNCLAIM_SUCCESS);
return true; return true;

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -39,6 +33,11 @@ import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SetBlockFast; import com.intellectualcrafters.plot.util.SetBlockFast;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.ArrayList;
/** /**
* Created 2014-08-01 for PlotSquared * Created 2014-08-01 for PlotSquared
@ -97,7 +96,7 @@ public class Unlink extends SubCommand {
myplot.denied = plot.denied; myplot.denied = plot.denied;
} }
myplot.deny_entry = plot.deny_entry; myplot.deny_entry = plot.deny_entry;
myplot.settings.setMerged(new boolean[] { false, false, false, false }); myplot.settings.setMerged(new boolean[]{false, false, false, false});
DBFunc.setMerged(world.getName(), myplot, myplot.settings.getMerged()); DBFunc.setMerged(world.getName(), myplot, myplot.settings.getMerged());
} }
@ -126,13 +125,11 @@ public class Unlink extends SubCommand {
if (PlotHelper.canSetFast) { if (PlotHelper.canSetFast) {
SetBlockFast.update(plr); SetBlockFast.update(plr);
} }
} } catch (final Exception e) {
catch (final Exception e) {
// execute(final Player plr, final String... args) { // execute(final Player plr, final String... args) {
try { try {
PlotMain.sendConsoleSenderMessage("Error on: " + getClass().getMethod("execute", Player.class, String[].class).toGenericString() + ":119, when trying to use \"SetBlockFast#update\""); PlotMain.sendConsoleSenderMessage("Error on: " + getClass().getMethod("execute", Player.class, String[].class).toGenericString() + ":119, when trying to use \"SetBlockFast#update\"");
} } catch (final Exception ex) {
catch (final Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }

View File

@ -21,16 +21,15 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class Visit extends SubCommand { public class Visit extends SubCommand {
public Visit() { public Visit() {
@ -68,8 +67,7 @@ public class Visit extends SubCommand {
int i; int i;
try { try {
i = Integer.parseInt(args[1]); i = Integer.parseInt(args[1]);
} } catch (final Exception e) {
catch (final Exception e) {
return sendMessage(plr, C.NOT_VALID_NUMBER); return sendMessage(plr, C.NOT_VALID_NUMBER);
} }
if ((i < 0) || (i >= plots.size())) { if ((i < 0) || (i >= plots.size())) {

View File

@ -21,12 +21,6 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
@ -34,6 +28,11 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.StringComparison; import com.intellectualcrafters.plot.util.StringComparison;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.UUID;
/** /**
* @author Citymonstret * @author Citymonstret
@ -61,10 +60,9 @@ public class list extends SubCommand {
final StringBuilder builder = new StringBuilder(); final StringBuilder builder = new StringBuilder();
builder.append(C.SUBCOMMAND_SET_OPTIONS_HEADER.s()); builder.append(C.SUBCOMMAND_SET_OPTIONS_HEADER.s());
if (plr != null) { if (plr != null) {
builder.append(getArgumentList(new String[] { "mine", "shared", "world", "all" })); builder.append(getArgumentList(new String[]{"mine", "shared", "world", "all"}));
} } else {
else { builder.append(getArgumentList(new String[]{"all"}));
builder.append(getArgumentList(new String[] { "all" }));
} }
PlayerFunctions.sendMessage(plr, builder.toString()); PlayerFunctions.sendMessage(plr, builder.toString());
return true; return true;
@ -84,8 +82,7 @@ public class list extends SubCommand {
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "You have").replaceAll("%num%", idx + "").replaceAll("%plot%", idx == 1 ? "plot" : "plots")); string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "You have").replaceAll("%num%", idx + "").replaceAll("%plot%", idx == 1 ? "plot" : "plots"));
PlayerFunctions.sendMessage(plr, string.toString()); PlayerFunctions.sendMessage(plr, string.toString());
return true; return true;
} } else if (args[0].equalsIgnoreCase("shared") && (plr != null)) {
else if (args[0].equalsIgnoreCase("shared") && (plr != null)) {
final StringBuilder string = new StringBuilder(); final StringBuilder string = new StringBuilder();
string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all")).append("\n"); string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all")).append("\n");
for (final Plot p : PlotMain.getPlotsSorted()) { for (final Plot p : PlotMain.getPlotsSorted()) {
@ -96,8 +93,7 @@ public class list extends SubCommand {
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There are").replaceAll("%num%", PlotMain.getPlotsSorted().size() + "").replaceAll("%plot%", PlotMain.getPlotsSorted().size() == 1 ? "plot" : "plots")); string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There are").replaceAll("%num%", PlotMain.getPlotsSorted().size() + "").replaceAll("%plot%", PlotMain.getPlotsSorted().size() == 1 ? "plot" : "plots"));
PlayerFunctions.sendMessage(plr, string.toString()); PlayerFunctions.sendMessage(plr, string.toString());
return true; return true;
} } else if (args[0].equalsIgnoreCase("all")) {
else if (args[0].equalsIgnoreCase("all")) {
// Current page // Current page
int page = 0; int page = 0;
@ -109,8 +105,7 @@ public class list extends SubCommand {
if (page < 0) { if (page < 0) {
page = 0; page = 0;
} }
} } catch (final Exception e) {
catch (final Exception e) {
page = 0; page = 0;
} }
} }
@ -145,8 +140,7 @@ public class list extends SubCommand {
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", PlotMain.getPlotsSorted().size() + "").replaceAll("%plot%", PlotMain.getPlotsSorted().size() == 1 ? "plot" : "plots")); string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", PlotMain.getPlotsSorted().size() + "").replaceAll("%plot%", PlotMain.getPlotsSorted().size() == 1 ? "plot" : "plots"));
PlayerFunctions.sendMessage(plr, string.toString()); PlayerFunctions.sendMessage(plr, string.toString());
return true; return true;
} } else if (args[0].equalsIgnoreCase("world") && (plr != null)) {
else if (args[0].equalsIgnoreCase("world") && (plr != null)) {
final StringBuilder string = new StringBuilder(); final StringBuilder string = new StringBuilder();
string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all")).append("\n"); string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all")).append("\n");
final HashMap<PlotId, Plot> plots = PlotMain.getPlots(plr.getWorld()); final HashMap<PlotId, Plot> plots = PlotMain.getPlots(plr.getWorld());
@ -156,10 +150,9 @@ public class list extends SubCommand {
string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", plots.values().size() + "").replaceAll("%plot%", plots.values().size() == 1 ? "plot" : "plots")); string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", plots.values().size() + "").replaceAll("%plot%", plots.values().size() == 1 ? "plot" : "plots"));
PlayerFunctions.sendMessage(plr, string.toString()); PlayerFunctions.sendMessage(plr, string.toString());
return true; return true;
} } else {
else {
// execute(plr); // execute(plr);
sendMessage(plr, C.DID_YOU_MEAN, new StringComparison(args[0], new String[] { "mine", "shared", "world", "all" }).getBestMatch()); sendMessage(plr, C.DID_YOU_MEAN, new StringComparison(args[0], new String[]{"mine", "shared", "world", "all"}).getBestMatch());
return false; return false;
} }
} }

View File

@ -21,19 +21,18 @@
package com.intellectualcrafters.plot.commands; package com.intellectualcrafters.plot.commands;
import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.util.ArrayList; import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.util.PlayerFunctions;
public class plugin extends SubCommand { public class plugin extends SubCommand {
public static String downloads, version; public static String downloads, version;
@ -48,8 +47,7 @@ public class plugin extends SubCommand {
public void run() { public void run() {
try { try {
downloads = convertToNumericString(getInfo("https://intellectualsites.com/spigot_api.php?method=downloads&url=http://www.spigotmc.org/resources/plotsquared.1177/"), false); downloads = convertToNumericString(getInfo("https://intellectualsites.com/spigot_api.php?method=downloads&url=http://www.spigotmc.org/resources/plotsquared.1177/"), false);
} } catch (final Exception e) {
catch (final Exception e) {
downloads = "unknown"; downloads = "unknown";
} }
} }
@ -59,8 +57,7 @@ public class plugin extends SubCommand {
public void run() { public void run() {
try { try {
version = convertToNumericString(getInfo("https://intellectualsites.com/spigot_api.php?method=version&resource=1177"), true); version = convertToNumericString(getInfo("https://intellectualsites.com/spigot_api.php?method=version&resource=1177"), true);
} } catch (final Exception e) {
catch (final Exception e) {
// Let's just ignore this, most likely error 500... // Let's just ignore this, most likely error 500...
version = "unknown"; version = "unknown";
} }
@ -73,8 +70,7 @@ public class plugin extends SubCommand {
for (final char c : str.toCharArray()) { for (final char c : str.toCharArray()) {
if (Character.isDigit(c)) { if (Character.isDigit(c)) {
builder.append(c); builder.append(c);
} } else if (dividers && ((c == ',') || (c == '.') || (c == '-') || (c == '_'))) {
else if (dividers && ((c == ',') || (c == '.') || (c == '-') || (c == '_'))) {
builder.append(c); builder.append(c);
} }
} }

View File

@ -21,15 +21,10 @@
package com.intellectualcrafters.plot.config; package com.intellectualcrafters.plot.config;
import org.bukkit.ChatColor;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualsites.translation.TranslationFile; import com.intellectualsites.translation.*;
import com.intellectualsites.translation.TranslationLanguage;
import com.intellectualsites.translation.TranslationManager;
import com.intellectualsites.translation.TranslationObject;
import com.intellectualsites.translation.YamlTranslationFile;
import com.intellectualsites.translation.bukkit.BukkitTranslation; import com.intellectualsites.translation.bukkit.BukkitTranslation;
import org.bukkit.ChatColor;
/** /**
* Captions class. * Captions class.
@ -394,24 +389,24 @@ public enum C {
* *
* @see com.intellectualsites.translation.TranslationManager * @see com.intellectualsites.translation.TranslationManager
*/ */
private static TranslationManager manager; private static TranslationManager manager;
/** /**
* The default file * The default file
* *
* @see com.intellectualsites.translation.TranslationFile * @see com.intellectualsites.translation.TranslationFile
*/ */
private static TranslationFile defaultFile; private static TranslationFile defaultFile;
/** /**
* Default * Default
*/ */
private String d; private String d;
/** /**
* Translated * Translated
*/ */
private String s; private String s;
/** /**
* Constructor for custom strings. * Constructor for custom strings.
@ -426,8 +421,7 @@ public enum C {
/** /**
* Constructor * Constructor
* *
* @param d * @param d default
* default
*/ */
C(final String d) { C(final String d) {
this.d = d; this.d = d;
@ -486,6 +480,7 @@ public enum C {
/** /**
* @return translated and color decoded * @return translated and color decoded
*
* @see org.bukkit.ChatColor#translateAlternateColorCodes(char, String) * @see org.bukkit.ChatColor#translateAlternateColorCodes(char, String)
*/ */
public String translated() { public String translated() {

View File

@ -21,22 +21,20 @@
package com.intellectualcrafters.plot.config; package com.intellectualcrafters.plot.config;
import java.util.ArrayList; import com.intellectualcrafters.plot.object.PlotBlock;
import java.util.List;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
import com.intellectualcrafters.plot.object.PlotBlock; import java.util.ArrayList;
import java.util.List;
/** /**
* Main Configuration Utility * Main Configuration Utility
* *
* @author Empire92 * @author Empire92
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused") public class Configuration {
public class Configuration {
public static final SettingValue STRING = new SettingValue("STRING") { public static final SettingValue STRING = new SettingValue("STRING") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
return true; return true;
@ -60,14 +58,13 @@ public class Configuration {
} }
}; };
public static final SettingValue INTEGER = new SettingValue("INTEGER") { public static final SettingValue INTEGER = new SettingValue("INTEGER") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
try { try {
Integer.parseInt(string); Integer.parseInt(string);
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }
@ -78,14 +75,13 @@ public class Configuration {
} }
}; };
public static final SettingValue BOOLEAN = new SettingValue("BOOLEAN") { public static final SettingValue BOOLEAN = new SettingValue("BOOLEAN") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
try { try {
Boolean.parseBoolean(string); Boolean.parseBoolean(string);
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }
@ -96,14 +92,13 @@ public class Configuration {
} }
}; };
public static final SettingValue DOUBLE = new SettingValue("DOUBLE") { public static final SettingValue DOUBLE = new SettingValue("DOUBLE") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
try { try {
Double.parseDouble(string); Double.parseDouble(string);
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }
@ -114,14 +109,13 @@ public class Configuration {
} }
}; };
public static final SettingValue BIOME = new SettingValue("BIOME") { public static final SettingValue BIOME = new SettingValue("BIOME") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
try { try {
Biome.valueOf(string.toUpperCase()); Biome.valueOf(string.toUpperCase());
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }
@ -142,7 +136,7 @@ public class Configuration {
} }
}; };
public static final SettingValue BLOCK = new SettingValue("BLOCK") { public static final SettingValue BLOCK = new SettingValue("BLOCK") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
try { try {
@ -150,13 +144,11 @@ public class Configuration {
final String[] split = string.split(":"); final String[] split = string.split(":");
Short.parseShort(split[0]); Short.parseShort(split[0]);
Short.parseShort(split[1]); Short.parseShort(split[1]);
} } else {
else {
Short.parseShort(string); Short.parseShort(string);
} }
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }
@ -166,8 +158,7 @@ public class Configuration {
if (string.contains(":")) { if (string.contains(":")) {
final String[] split = string.split(":"); final String[] split = string.split(":");
return new PlotBlock(Short.parseShort(split[0]), Byte.parseByte(split[1])); return new PlotBlock(Short.parseShort(split[0]), Byte.parseByte(split[1]));
} } else {
else {
return new PlotBlock(Short.parseShort(string), (byte) 0); return new PlotBlock(Short.parseShort(string), (byte) 0);
} }
} }
@ -177,7 +168,7 @@ public class Configuration {
return ((PlotBlock) object).id + ":" + ((PlotBlock) object).data; return ((PlotBlock) object).id + ":" + ((PlotBlock) object).data;
} }
}; };
public static final SettingValue BLOCKLIST = new SettingValue("BLOCKLIST") { public static final SettingValue BLOCKLIST = new SettingValue("BLOCKLIST") {
@Override @Override
public boolean validateValue(final String string) { public boolean validateValue(final String string) {
try { try {
@ -191,14 +182,12 @@ public class Configuration {
final String[] split = block.split(":"); final String[] split = block.split(":");
Short.parseShort(split[0]); Short.parseShort(split[0]);
Short.parseShort(split[1]); Short.parseShort(split[1]);
} } else {
else {
Short.parseShort(block); Short.parseShort(block);
} }
} }
return true; return true;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }
@ -220,8 +209,7 @@ public class Configuration {
if (value < min) { if (value < min) {
min = value; min = value;
} }
} } else {
else {
counts[i] = 1; counts[i] = 1;
if (1 < min) { if (1 < min) {
min = 1; min = 1;
@ -230,8 +218,7 @@ public class Configuration {
if (blocks[i].contains(":")) { if (blocks[i].contains(":")) {
final String[] split = blocks[i].split(":"); final String[] split = blocks[i].split(":");
values[i] = new PlotBlock(Short.parseShort(split[0]), Byte.parseByte(split[1])); values[i] = new PlotBlock(Short.parseShort(split[0]), Byte.parseByte(split[1]));
} } else {
else {
values[i] = new PlotBlock(Short.parseShort(blocks[i]), (byte) 0); values[i] = new PlotBlock(Short.parseShort(blocks[i]), (byte) 0);
} }
} }
@ -272,8 +259,7 @@ public class Configuration {
} }
/** /**
* Create your own SettingValue object to make the management of plotworld * Create your own SettingValue object to make the management of plotworld configuration easier
* configuration easier
*/ */
public static abstract class SettingValue { public static abstract class SettingValue {
private final String type; private final String type;

View File

@ -21,11 +21,10 @@
package com.intellectualcrafters.plot.config; package com.intellectualcrafters.plot.config;
import java.util.Arrays; import com.intellectualcrafters.plot.config.Configuration.SettingValue;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import com.intellectualcrafters.plot.config.Configuration.SettingValue; import java.util.Arrays;
/** /**
* Configuration Node * Configuration Node
@ -33,11 +32,11 @@ import com.intellectualcrafters.plot.config.Configuration.SettingValue;
* @author Empire92 * @author Empire92
*/ */
public class ConfigurationNode { public class ConfigurationNode {
private final String constant; private final String constant;
private final Object default_value; private final Object default_value;
private final String description; private final String description;
private final SettingValue type; private final SettingValue type;
private Object value; private Object value;
public ConfigurationNode(final String constant, final Object default_value, final String description, final SettingValue type, final boolean required) { public ConfigurationNode(final String constant, final Object default_value, final String description, final SettingValue type, final boolean required) {
this.constant = constant; this.constant = constant;
@ -55,8 +54,7 @@ public class ConfigurationNode {
try { try {
final Object result = this.type.parseString(string); final Object result = this.type.parseString(string);
return result != null; return result != null;
} } catch (final Exception e) {
catch (final Exception e) {
return false; return false;
} }
} }

View File

@ -31,97 +31,97 @@ public class Settings {
/** /**
* *
*/ */
public static int MAX_AUTO_SIZE = 4; public static int MAX_AUTO_SIZE = 4;
/** /**
* Default worldedit-require-selection-in-mask: false * Default worldedit-require-selection-in-mask: false
*/ */
public static boolean REQUIRE_SELECTION = true; public static boolean REQUIRE_SELECTION = true;
/** /**
* Default kill road mobs: true * Default kill road mobs: true
*/ */
public final static boolean KILL_ROAD_MOBS_DEFAULT = true; public final static boolean KILL_ROAD_MOBS_DEFAULT = true;
/** /**
* Default mob pathfinding: true * Default mob pathfinding: true
*/ */
public final static boolean MOB_PATHFINDING_DEFAULT = true; public final static boolean MOB_PATHFINDING_DEFAULT = true;
/** /**
* Teleport to path on login * Teleport to path on login
*/ */
public static boolean TELEPORT_ON_LOGIN = false; public static boolean TELEPORT_ON_LOGIN = false;
/** /**
* Mob Cap Enabled * Mob Cap Enabled
*/ */
public static boolean MOB_CAP_ENABLED = false; public static boolean MOB_CAP_ENABLED = false;
/** /**
* The Mob Cap * The Mob Cap
*/ */
public static int MOB_CAP = 20; public static int MOB_CAP = 20;
/** /**
* Display titles * Display titles
*/ */
public static boolean TITLES = true; public static boolean TITLES = true;
/** /**
* Schematic Save Path * Schematic Save Path
*/ */
public static String SCHEMATIC_SAVE_PATH = "/var/www/schematics"; public static String SCHEMATIC_SAVE_PATH = "/var/www/schematics";
/** /**
* Max allowed plots * Max allowed plots
*/ */
public static int MAX_PLOTS = 20; public static int MAX_PLOTS = 20;
/** /**
* WorldGuard region on claimed plots * WorldGuard region on claimed plots
*/ */
public static boolean WORLDGUARD = false; public static boolean WORLDGUARD = false;
/** /**
* metrics * metrics
*/ */
public static boolean METRICS = true; public static boolean METRICS = true;
/** /**
* plot specific resource pack * plot specific resource pack
*/ */
public static String PLOT_SPECIFIC_RESOURCE_PACK = ""; public static String PLOT_SPECIFIC_RESOURCE_PACK = "";
/** /**
* Kill road mobs? * Kill road mobs?
*/ */
public static boolean KILL_ROAD_MOBS; public static boolean KILL_ROAD_MOBS;
/** /**
* mob pathfinding? * mob pathfinding?
*/ */
public static boolean MOB_PATHFINDING; public static boolean MOB_PATHFINDING;
/** /**
* Delete plots on ban? * Delete plots on ban?
*/ */
public static boolean DELETE_PLOTS_ON_BAN = false; public static boolean DELETE_PLOTS_ON_BAN = false;
/** /**
* Verbose? * Verbose?
*/ */
public static boolean DEBUG = true; public static boolean DEBUG = true;
/** /**
* Auto clear enabled * Auto clear enabled
*/ */
public static boolean AUTO_CLEAR = false; public static boolean AUTO_CLEAR = false;
/** /**
* Days until a plot gets cleared * Days until a plot gets cleared
*/ */
public static int AUTO_CLEAR_DAYS = 365; public static int AUTO_CLEAR_DAYS = 365;
/** /**
* API Location * API Location
*/ */
public static String API_URL = "http://www.intellectualsites.com/minecraft.php"; public static String API_URL = "http://www.intellectualsites.com/minecraft.php";
/** /**
* Use the custom API * Use the custom API
*/ */
public static boolean CUSTOM_API = true; public static boolean CUSTOM_API = true;
/** /**
* Use offline mode storage * Use offline mode storage
*/ */
public static boolean OFFLINE_MODE = false; public static boolean OFFLINE_MODE = false;
/** /**
* Database settings * Database settings
@ -132,7 +132,7 @@ public class Settings {
/** /**
* MongoDB enabled? * MongoDB enabled?
*/ */
public static boolean USE_MONGO = false; /* public static boolean USE_MONGO = false; /*
* TODO: Implement Mongo * TODO: Implement Mongo
* @Brandon * @Brandon
*/ */
@ -143,34 +143,34 @@ public class Settings {
/** /**
* MySQL Enabled? * MySQL Enabled?
*/ */
public static boolean USE_MYSQL = true; /* NOTE: Fixed connector */ public static boolean USE_MYSQL = true; /* NOTE: Fixed connector */
/** /**
* SQLite Database name * SQLite Database name
*/ */
public static String SQLITE_DB = "storage"; public static String SQLITE_DB = "storage";
/** /**
* MySQL Host name * MySQL Host name
*/ */
public static String HOST_NAME = "localhost"; public static String HOST_NAME = "localhost";
/** /**
* MySQL Port * MySQL Port
*/ */
public static String PORT = "3306"; public static String PORT = "3306";
/** /**
* MySQL DB * MySQL DB
*/ */
public static String DATABASE = "plot_db"; public static String DATABASE = "plot_db";
/** /**
* MySQL User * MySQL User
*/ */
public static String USER = "root"; public static String USER = "root";
/** /**
* MySQL Password * MySQL Password
*/ */
public static String PASSWORD = "password"; public static String PASSWORD = "password";
/** /**
* MySQL Prefix * MySQL Prefix
*/ */
public static String PREFIX = ""; public static String PREFIX = "";
} }
} }

View File

@ -21,19 +21,18 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotComment;
import com.intellectualcrafters.plot.object.PlotId;
import org.bukkit.OfflinePlayer;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.UUID; import java.util.UUID;
import org.bukkit.OfflinePlayer;
import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotComment;
import com.intellectualcrafters.plot.object.PlotId;
/** /**
* @author Citymonstret * @author Citymonstret
* @author Empire92 * @author Empire92
@ -50,73 +49,62 @@ public interface AbstractDB {
/** /**
* Set Plot owner * Set Plot owner
* *
* @param plot * @param plot Plot in which the owner should be set
* Plot in which the owner should be set * @param uuid The uuid of the new owner
* @param uuid
* The uuid of the new owner
*/ */
public void setOwner(final Plot plot, final UUID uuid); public void setOwner(final Plot plot, final UUID uuid);
/** /**
* Create all settings, and create default helpers, trusted + denied lists * Create all settings, and create default helpers, trusted + denied lists
* *
* @param plots * @param plots Plots for which the default table entries should be created
* Plots for which the default table entries should be created
*/ */
public void createAllSettingsAndHelpers(final ArrayList<Plot> plots); public void createAllSettingsAndHelpers(final ArrayList<Plot> plots);
/** /**
* Create a plot * Create a plot
* *
* @param plots * @param plots Plots that should be created
* Plots that should be created
*/ */
public void createPlots(final ArrayList<Plot> plots); public void createPlots(final ArrayList<Plot> plots);
/** /**
* Create a plot * Create a plot
* *
* @param plot * @param plot That should be created
* That should be created
*/ */
public void createPlot(final Plot plot); public void createPlot(final Plot plot);
/** /**
* Create tables * Create tables
* *
* @param database * @param database Database in which the tables will be created
* Database in which the tables will be created
* *
* @throws SQLException * @throws SQLException If the database manager is unable to create the tables
* If the database manager is unable to create the tables
*/ */
public void createTables(final String database, final boolean add_constraint) throws Exception; public void createTables(final String database, final boolean add_constraint) throws Exception;
/** /**
* Delete a plot * Delete a plot
* *
* @param plot * @param plot Plot that should be deleted
* Plot that should be deleted
*/ */
public void delete(final String world, final Plot plot); public void delete(final String world, final Plot plot);
/** /**
* Create plot settings * Create plot settings
* *
* @param id * @param id Plot Entry ID
* Plot Entry ID * @param plot Plot Object
* @param plot
* Plot Object
*/ */
public void createPlotSettings(final int id, final Plot plot); public void createPlotSettings(final int id, final Plot plot);
/** /**
* Get the table entry ID * Get the table entry ID
* *
* @param world * @param world Which the plot is located in
* Which the plot is located in * @param id2 Plot ID
* @param id2 *
* Plot ID
* @return Integer = Plot Entry Id * @return Integer = Plot Entry Id
*/ */
public int getId(final String world, final PlotId id2); public int getId(final String world, final PlotId id2);
@ -129,125 +117,100 @@ public interface AbstractDB {
/** /**
* Set the merged status for a plot * Set the merged status for a plot
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param plot Plot Object
* @param plot * @param merged boolean[]
* Plot Object
* @param merged
* boolean[]
*/ */
public void setMerged(final String world, final Plot plot, final boolean[] merged); public void setMerged(final String world, final Plot plot, final boolean[] merged);
/** /**
* Set plot flags * Set plot flags
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param plot Plot Object
* @param plot * @param flags flags to set (flag[])
* Plot Object
* @param flags
* flags to set (flag[])
*/ */
public void setFlags(final String world, final Plot plot, final Flag[] flags); public void setFlags(final String world, final Plot plot, final Flag[] flags);
/** /**
* Set the plot alias * Set the plot alias
* *
* @param plot * @param plot Plot for which the alias should be set
* Plot for which the alias should be set * @param alias Plot Alias
* @param alias
* Plot Alias
*/ */
public void setAlias(final String world, final Plot plot, final String alias); public void setAlias(final String world, final Plot plot, final String alias);
/** /**
* Purgle a plot * Purgle a plot
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param id Plot ID
* @param id
* Plot ID
*/ */
public void purge(final String world, final PlotId id); public void purge(final String world, final PlotId id);
/** /**
* Purge a whole world * Purge a whole world
* *
* @param world * @param world World in which the plots should be purged
* World in which the plots should be purged
*/ */
public void purge(final String world); public void purge(final String world);
/** /**
* Set Plot Home Position * Set Plot Home Position
* *
* @param plot * @param plot Plot Object
* Plot Object * @param position Plot Home Position
* @param position
* Plot Home Position
*/ */
public void setPosition(final String world, final Plot plot, final String position); public void setPosition(final String world, final Plot plot, final String position);
/** /**
* @param id * @param id Plot Entry ID
* Plot Entry ID *
* @return Plot Settings * @return Plot Settings
*/ */
public HashMap<String, Object> getSettings(final int id); public HashMap<String, Object> getSettings(final int id);
/** /**
* @param plot * @param plot Plot Object
* Plot Object * @param player Player that should be removed
* @param player
* Player that should be removed
*/ */
public void removeHelper(final String world, final Plot plot, final OfflinePlayer player); public void removeHelper(final String world, final Plot plot, final OfflinePlayer player);
/** /**
* @param plot * @param plot Plot Object
* Plot Object * @param player Player that should be removed
* @param player
* Player that should be removed
*/ */
public void removeTrusted(final String world, final Plot plot, final OfflinePlayer player); public void removeTrusted(final String world, final Plot plot, final OfflinePlayer player);
/** /**
* @param plot * @param plot Plot Object
* Plot Object * @param player Player that should be removed
* @param player
* Player that should be removed
*/ */
public void setHelper(final String world, final Plot plot, final OfflinePlayer player); public void setHelper(final String world, final Plot plot, final OfflinePlayer player);
/** /**
* @param plot * @param plot Plot Object
* Plot Object * @param player Player that should be added
* @param player
* Player that should be added
*/ */
public void setTrusted(final String world, final Plot plot, final OfflinePlayer player); public void setTrusted(final String world, final Plot plot, final OfflinePlayer player);
/** /**
* @param plot * @param plot Plot Object
* Plot Object * @param player Player that should be added
* @param player
* Player that should be added
*/ */
public void removeDenied(final String world, final Plot plot, final OfflinePlayer player); public void removeDenied(final String world, final Plot plot, final OfflinePlayer player);
/** /**
* @param plot * @param plot Plot Object
* Plot Object * @param player Player that should be added
* @param player
* Player that should be added
*/ */
public void setDenied(final String world, final Plot plot, final OfflinePlayer player); public void setDenied(final String world, final Plot plot, final OfflinePlayer player);
/** /**
* Get Plots ratings * Get Plots ratings
* *
* @param plot * @param plot Plot Object
* Plot Object *
* @return Plot Ratings (pre-calculated) * @return Plot Ratings (pre-calculated)
*/ */
public double getRatings(final Plot plot); public double getRatings(final Plot plot);
@ -255,36 +218,28 @@ public interface AbstractDB {
/** /**
* Remove a plot comment * Remove a plot comment
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param plot Plot Object
* @param plot * @param comment Comment to remove
* Plot Object
* @param comment
* Comment to remove
*/ */
public void removeComment(final String world, final Plot plot, final PlotComment comment); public void removeComment(final String world, final Plot plot, final PlotComment comment);
/** /**
* Set a plot comment * Set a plot comment
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param plot Plot Object
* @param plot * @param comment Comment to add
* Plot Object
* @param comment
* Comment to add
*/ */
public void setComment(final String world, final Plot plot, final PlotComment comment); public void setComment(final String world, final Plot plot, final PlotComment comment);
/** /**
* Get Plot Comments * Get Plot Comments
* *
* @param world * @param world World in which the plot is located
* World in which the plot is located * @param plot Plot Object
* @param plot * @param tier Comment Tier
* Plot Object *
* @param tier
* Comment Tier
* @return Plot Comments within the specified tier * @return Plot Comments within the specified tier
*/ */
public ArrayList<PlotComment> getComments(final String world, final Plot plot, final int tier); public ArrayList<PlotComment> getComments(final String world, final Plot plot, final int tier);

View File

@ -21,17 +21,16 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotComment; import com.intellectualcrafters.plot.object.PlotComment;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import org.bukkit.OfflinePlayer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.UUID;
/** /**
* DB Functions * DB Functions
@ -53,10 +52,8 @@ public class DBFunc {
/** /**
* Set the owner of a plot * Set the owner of a plot
* *
* @param plot * @param plot Plot Object
* Plot Object * @param uuid New Owner
* @param uuid
* New Owner
*/ */
public static void setOwner(final Plot plot, final UUID uuid) { public static void setOwner(final Plot plot, final UUID uuid) {
dbManager.setOwner(plot, uuid); dbManager.setOwner(plot, uuid);
@ -65,8 +62,7 @@ public class DBFunc {
/** /**
* Create all settings + (helpers, denied, trusted) * Create all settings + (helpers, denied, trusted)
* *
* @param plots * @param plots List containing all plot objects
* List containing all plot objects
*/ */
public static void createAllSettingsAndHelpers(final ArrayList<Plot> plots) { public static void createAllSettingsAndHelpers(final ArrayList<Plot> plots) {
dbManager.createAllSettingsAndHelpers(plots); dbManager.createAllSettingsAndHelpers(plots);
@ -75,8 +71,7 @@ public class DBFunc {
/** /**
* Create all plots * Create all plots
* *
* @param plots * @param plots A list containing plot objects
* A list containing plot objects
*/ */
public static void createPlots(final ArrayList<Plot> plots) { public static void createPlots(final ArrayList<Plot> plots) {
dbManager.createPlots(plots); dbManager.createPlots(plots);
@ -85,8 +80,7 @@ public class DBFunc {
/** /**
* Create a plot * Create a plot
* *
* @param plot * @param plot Plot to create
* Plot to create
*/ */
public static void createPlot(final Plot plot) { public static void createPlot(final Plot plot) {
dbManager.createPlot(plot); dbManager.createPlot(plot);
@ -104,8 +98,7 @@ public class DBFunc {
/** /**
* Delete a plot * Delete a plot
* *
* @param plot * @param plot Plot to delete
* Plot to delete
*/ */
public static void delete(final String world, final Plot plot) { public static void delete(final String world, final Plot plot) {
dbManager.delete(world, plot); dbManager.delete(world, plot);
@ -114,10 +107,8 @@ public class DBFunc {
/** /**
* Create plot settings * Create plot settings
* *
* @param id * @param id Plot ID
* Plot ID * @param plot Plot Object
* @param plot
* Plot Object
*/ */
public static void createPlotSettings(final int id, final Plot plot) { public static void createPlotSettings(final int id, final Plot plot) {
dbManager.createPlotSettings(id, plot); dbManager.createPlotSettings(id, plot);
@ -126,10 +117,9 @@ public class DBFunc {
/** /**
* Get a plot id * Get a plot id
* *
* @param world * @param world World
* World * @param id2 Plot ID
* @param id2 *
* Plot ID
* @return ID * @return ID
*/ */
/* /*
@ -187,6 +177,7 @@ public class DBFunc {
/** /**
* @param id * @param id
*
* @return * @return
*/ */
public static HashMap<String, Object> getSettings(final int id) { public static HashMap<String, Object> getSettings(final int id) {

View File

@ -21,15 +21,14 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import org.bukkit.plugin.Plugin;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import org.bukkit.plugin.Plugin;
/** /**
* Abstract Database class, serves as a base for any connection method (MySQL, * Abstract Database class, serves as a base for any connection method (MySQL, SQLite, etc.)
* SQLite, etc.)
* *
* @author -_Husky_- * @author -_Husky_-
* @author tips48 * @author tips48
@ -44,8 +43,7 @@ public abstract class Database {
/** /**
* Creates a new Database * Creates a new Database
* *
* @param plugin * @param plugin Plugin instance
* Plugin instance
*/ */
protected Database(final Plugin plugin) { protected Database(final Plugin plugin) {
this.plugin = plugin; this.plugin = plugin;
@ -55,10 +53,9 @@ public abstract class Database {
* Opens a connection with the database * Opens a connection with the database
* *
* @return Opened connection * @return Opened connection
* @throws SQLException *
* if the connection can not be opened * @throws SQLException if the connection can not be opened
* @throws ClassNotFoundException * @throws ClassNotFoundException if the driver cannot be found
* if the driver cannot be found
*/ */
public abstract Connection openConnection() throws SQLException, ClassNotFoundException; public abstract Connection openConnection() throws SQLException, ClassNotFoundException;
@ -66,8 +63,8 @@ public abstract class Database {
* Checks if a connection is open with the database * Checks if a connection is open with the database
* *
* @return true if the connection is open * @return true if the connection is open
* @throws SQLException *
* if the connection cannot be checked * @throws SQLException if the connection cannot be checked
*/ */
public abstract boolean checkConnection() throws SQLException; public abstract boolean checkConnection() throws SQLException;
@ -82,37 +79,33 @@ public abstract class Database {
* Closes the connection with the database * Closes the connection with the database
* *
* @return true if successful * @return true if successful
* @throws SQLException *
* if the connection cannot be closed * @throws SQLException if the connection cannot be closed
*/ */
public abstract boolean closeConnection() throws SQLException; public abstract boolean closeConnection() throws SQLException;
/** /**
* Executes a SQL Query<br> * Executes a SQL Query<br> If the connection is closed, it will be opened
* If the connection is closed, it will be opened *
* @param query Query to be run
* *
* @param query
* Query to be run
* @return the results of the query * @return the results of the query
* @throws SQLException *
* If the query cannot be executed * @throws SQLException If the query cannot be executed
* @throws ClassNotFoundException * @throws ClassNotFoundException If the driver cannot be found; see {@link #openConnection()}
* If the driver cannot be found; see {@link #openConnection()}
*/ */
public abstract ResultSet querySQL(final String query) throws SQLException, ClassNotFoundException; public abstract ResultSet querySQL(final String query) throws SQLException, ClassNotFoundException;
/** /**
* Executes an Update SQL Query<br> * Executes an Update SQL Query<br> See {@link java.sql.Statement#executeUpdate(String)}<br> If the connection is
* See {@link java.sql.Statement#executeUpdate(String)}<br> * closed, it will be opened
* If the connection is closed, it will be opened *
* @param query Query to be run
* *
* @param query
* Query to be run
* @return Result Code, see {@link java.sql.Statement#executeUpdate(String)} * @return Result Code, see {@link java.sql.Statement#executeUpdate(String)}
* @throws SQLException *
* If the query cannot be executed * @throws SQLException If the query cannot be executed
* @throws ClassNotFoundException * @throws ClassNotFoundException If the driver cannot be found; see {@link #openConnection()}
* If the driver cannot be found; see {@link #openConnection()}
*/ */
public abstract int updateSQL(final String query) throws SQLException, ClassNotFoundException; public abstract int updateSQL(final String query) throws SQLException, ClassNotFoundException;
} }

View File

@ -21,14 +21,10 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import java.sql.*;
/** /**
* Connects to and uses a MySQL database * Connects to and uses a MySQL database
* *
@ -42,23 +38,17 @@ public class MySQL extends Database {
private final String port; private final String port;
private final String hostname; private final String hostname;
private Connection connection; private Connection connection;
/** /**
* Creates a new MySQL instance * Creates a new MySQL instance
* *
* @param plugin * @param plugin Plugin instance
* Plugin instance * @param hostname Name of the host
* @param hostname * @param port Port number
* Name of the host * @param database Database name
* @param port * @param username Username
* Port number * @param password Password
* @param database
* Database name
* @param username
* Username
* @param password
* Password
*/ */
public MySQL(final Plugin plugin, final String hostname, final String port, final String database, final String username, final String password) { public MySQL(final Plugin plugin, final String hostname, final String port, final String database, final String username, final String password) {
super(plugin); super(plugin);

View File

@ -21,22 +21,6 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.Plugin;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.config.Settings;
@ -46,6 +30,15 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.worldcretornica.plotme.PlayerList; import com.worldcretornica.plotme.PlayerList;
import com.worldcretornica.plotme.Plot; import com.worldcretornica.plotme.Plot;
import com.worldcretornica.plotme.PlotManager; import com.worldcretornica.plotme.PlotManager;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.Plugin;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*;
/** /**
* Created 2014-08-17 for PlotSquared * Created 2014-08-17 for PlotSquared
@ -63,8 +56,7 @@ public class PlotMeConverter {
/** /**
* Constructor * Constructor
* *
* @param plugin * @param plugin Plugin Used to run the converter
* Plugin Used to run the converter
*/ */
public PlotMeConverter(final PlotMain plugin) { public PlotMeConverter(final PlotMain plugin) {
this.plugin = plugin; this.plugin = plugin;
@ -127,8 +119,7 @@ public class PlotMeConverter {
final Boolean auto_link = plotConfig.getBoolean("worlds." + world.getName() + ".AutoLinkPlots"); // final Boolean auto_link = plotConfig.getBoolean("worlds." + world.getName() + ".AutoLinkPlots"); //
PlotMain.config.set("worlds." + world.getName() + ".plot.auto_merge", auto_link); PlotMain.config.set("worlds." + world.getName() + ".plot.auto_merge", auto_link);
} } catch (final Exception e) {
catch (final Exception e) {
sendMessage("&c-- &lFailed to save configuration for world '" + world.getName() + "'\nThis will need to be done using the setup command, or manually"); sendMessage("&c-- &lFailed to save configuration for world '" + world.getName() + "'\nThis will need to be done using the setup command, or manually");
} }
@ -173,13 +164,11 @@ public class PlotMeConverter {
psDenied.add(set.getValue()); psDenied.add(set.getValue());
} }
} }
} } else {
else {
for (final String user : plot.getAllowed().split(",")) { for (final String user : plot.getAllowed().split(",")) {
if (user.equals("*")) { if (user.equals("*")) {
psAdded.add(DBFunc.everyone); psAdded.add(DBFunc.everyone);
} } else {
else {
final UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + user).getBytes(Charsets.UTF_8)); final UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + user).getBytes(Charsets.UTF_8));
psAdded.add(uuid); psAdded.add(uuid);
} }
@ -188,19 +177,16 @@ public class PlotMeConverter {
for (final String user : plot.getDenied().split(",")) { for (final String user : plot.getDenied().split(",")) {
if (user.equals("*")) { if (user.equals("*")) {
psDenied.add(DBFunc.everyone); psDenied.add(DBFunc.everyone);
} } else {
else {
final UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + user).getBytes(Charsets.UTF_8)); final UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + user).getBytes(Charsets.UTF_8));
psDenied.add(uuid); psDenied.add(uuid);
} }
} }
} } catch (final Throwable e) {
catch (final Throwable e) {
// Okay, this is evil. // Okay, this is evil.
} }
} }
} } catch (final Throwable e) {
catch (final Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
final PlotId id = new PlotId(Integer.parseInt(plot.id.split(";")[0]), Integer.parseInt(plot.id.split(";")[1])); final PlotId id = new PlotId(Integer.parseInt(plot.id.split(";")[0]), Integer.parseInt(plot.id.split(";")[1]));
@ -208,20 +194,18 @@ public class PlotMeConverter {
if (online) { if (online) {
pl = new com.intellectualcrafters.plot.object.Plot(id, plot.getOwnerId(), psAdded, psTrusted, psDenied, pl = new com.intellectualcrafters.plot.object.Plot(id, plot.getOwnerId(), psAdded, psTrusted, psDenied,
"", PlotHomePosition.DEFAULT, null, world.getName(), new boolean[] { false, false, false, false }); "", PlotHomePosition.DEFAULT, null, world.getName(), new boolean[]{false, false, false, false});
} } else {
else {
final String owner = plot.getOwner(); final String owner = plot.getOwner();
pl = new com.intellectualcrafters.plot.object.Plot(id, UUID.nameUUIDFromBytes(("OfflinePlayer:" + owner).getBytes(Charsets.UTF_8)), psAdded, psTrusted, psDenied, pl = new com.intellectualcrafters.plot.object.Plot(id, UUID.nameUUIDFromBytes(("OfflinePlayer:" + owner).getBytes(Charsets.UTF_8)), psAdded, psTrusted, psDenied,
"", PlotHomePosition.DEFAULT, null, world.getName(), new boolean[] { false, false, false, false }); "", PlotHomePosition.DEFAULT, null, world.getName(), new boolean[]{false, false, false, false});
} }
if (pl != null) { if (pl != null) {
if (!PlotMain.getPlots(world).containsKey(id)) { if (!PlotMain.getPlots(world).containsKey(id)) {
createdPlots.add(pl); createdPlots.add(pl);
} } else {
else {
duplicate++; duplicate++;
} }
} }
@ -240,8 +224,7 @@ public class PlotMeConverter {
PlotMain.sendConsoleSenderMessage("&3PlotMe&8->&3PlotSquared&8:&7 Saving configuration..."); PlotMain.sendConsoleSenderMessage("&3PlotMe&8->&3PlotSquared&8:&7 Saving configuration...");
try { try {
PlotMain.config.save(PlotMain.configFile); PlotMain.config.save(PlotMain.configFile);
} } catch (final IOException e) {
catch (final IOException e) {
PlotMain.sendConsoleSenderMessage(" - &cFailed to save configuration."); PlotMain.sendConsoleSenderMessage(" - &cFailed to save configuration.");
} }
@ -250,8 +233,7 @@ public class PlotMeConverter {
if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) {
MV = true; MV = true;
} } else if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) {
else if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) {
MW = true; MW = true;
} }
@ -266,26 +248,22 @@ public class PlotMeConverter {
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv unload " + worldname); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv unload " + worldname);
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} } catch (final InterruptedException ex) {
catch (final InterruptedException ex) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
// load // load
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv import " + worldname + " normal -g PlotSquared"); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv import " + worldname + " normal -g PlotSquared");
} } else if (MW) {
else if (MW) {
// unload // unload
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw unload " + worldname); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw unload " + worldname);
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} } catch (final InterruptedException ex) {
catch (final InterruptedException ex) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
// load // load
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + worldname + " plugin:PlotSquared"); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + worldname + " plugin:PlotSquared");
} } else {
else {
Bukkit.getServer().unloadWorld(world, true); Bukkit.getServer().unloadWorld(world, true);
final World myworld = WorldCreator.name(worldname).generator(new WorldGenerator(worldname)).createWorld(); final World myworld = WorldCreator.name(worldname).generator(new WorldGenerator(worldname)).createWorld();
myworld.save(); myworld.save();

View File

@ -21,24 +21,6 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Set;
import java.util.UUID;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.block.Biome;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.flag.FlagManager;
@ -49,6 +31,13 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.Logger; import com.intellectualcrafters.plot.util.Logger;
import com.intellectualcrafters.plot.util.Logger.LogLevel; import com.intellectualcrafters.plot.util.Logger.LogLevel;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.block.Biome;
import java.sql.*;
import java.util.*;
/** /**
* @author Citymonstret * @author Citymonstret
@ -56,23 +45,21 @@ import com.intellectualcrafters.plot.util.UUIDHandler;
public class SQLManager implements AbstractDB { public class SQLManager implements AbstractDB {
// Public final // Public final
public final String SET_OWNER; public final String SET_OWNER;
public final String GET_ALL_PLOTS; public final String GET_ALL_PLOTS;
public final String CREATE_PLOTS; public final String CREATE_PLOTS;
public final String CREATE_SETTINGS; public final String CREATE_SETTINGS;
public final String CREATE_HELPERS; public final String CREATE_HELPERS;
public final String CREATE_PLOT; public final String CREATE_PLOT;
// Private Final // Private Final
private Connection connection; private Connection connection;
private final String prefix; private final String prefix;
/** /**
* Constructor * Constructor
* *
* @param c * @param c connection
* connection * @param p prefix
* @param p
* prefix
*/ */
public SQLManager(final Connection c, final String p) { public SQLManager(final Connection c, final String p) {
// Private final // Private final
@ -96,8 +83,7 @@ public class SQLManager implements AbstractDB {
public void run() { public void run() {
try { try {
SQLManager.this.connection = PlotMain.getMySQL().forceConnection(); SQLManager.this.connection = PlotMain.getMySQL().forceConnection();
} } catch (final Exception e) {
catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -127,10 +113,8 @@ public class SQLManager implements AbstractDB {
/** /**
* Set Plot owner * Set Plot owner
* *
* @param plot * @param plot Plot Object
* Plot Object * @param uuid Owner UUID
* @param uuid
* Owner UUID
*/ */
@Override @Override
public void setOwner(final Plot plot, final UUID uuid) { public void setOwner(final Plot plot, final UUID uuid) {
@ -144,8 +128,7 @@ public class SQLManager implements AbstractDB {
statement.setInt(3, plot.id.y); statement.setInt(3, plot.id.y);
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.DANGER, "Could not set owner for plot " + plot.id); Logger.add(LogLevel.DANGER, "Could not set owner for plot " + plot.id);
} }
@ -175,8 +158,7 @@ public class SQLManager implements AbstractDB {
} }
stored.get(world).put(new PlotId(idx, idz), id); stored.get(world).put(new PlotId(idx, idz), id);
} }
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -209,8 +191,7 @@ public class SQLManager implements AbstractDB {
} }
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -239,8 +220,7 @@ public class SQLManager implements AbstractDB {
} }
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to set helper for plots"); Logger.add(LogLevel.WARNING, "Failed to set helper for plots");
e.printStackTrace(); e.printStackTrace();
} }
@ -279,8 +259,7 @@ public class SQLManager implements AbstractDB {
} }
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.DANGER, "Failed to save plots!"); Logger.add(LogLevel.DANGER, "Failed to save plots!");
} }
@ -302,8 +281,7 @@ public class SQLManager implements AbstractDB {
stmt.setString(4, plot.world); stmt.setString(4, plot.world);
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.DANGER, "Failed to save plot " + plot.id); Logger.add(LogLevel.DANGER, "Failed to save plot " + plot.id);
} }
@ -331,8 +309,7 @@ public class SQLManager implements AbstractDB {
stmt.addBatch("ALTER TABLE `" + this.prefix + "plot_settings` ADD CONSTRAINT `" + this.prefix + "plot_settings_ibfk_1` FOREIGN KEY (`plot_plot_id`) REFERENCES `" + this.prefix + "plot` (`id`) ON DELETE CASCADE"); stmt.addBatch("ALTER TABLE `" + this.prefix + "plot_settings` ADD CONSTRAINT `" + this.prefix + "plot_settings_ibfk_1` FOREIGN KEY (`plot_plot_id`) REFERENCES `" + this.prefix + "plot` (`id`) ON DELETE CASCADE");
} }
} } else {
else {
stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot` (" + "`id` INTEGER PRIMARY KEY AUTOINCREMENT," + "`plot_id_x` INT(11) NOT NULL," + "`plot_id_z` INT(11) NOT NULL," + "`owner` VARCHAR(45) NOT NULL," + "`world` VARCHAR(45) NOT NULL," + "`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP)"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot` (" + "`id` INTEGER PRIMARY KEY AUTOINCREMENT," + "`plot_id_x` INT(11) NOT NULL," + "`plot_id_z` INT(11) NOT NULL," + "`owner` VARCHAR(45) NOT NULL," + "`world` VARCHAR(45) NOT NULL," + "`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP)");
stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_denied` (" + "`plot_plot_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_denied` (" + "`plot_plot_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")");
stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_helpers` (" + "`plot_plot_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_helpers` (" + "`plot_plot_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")");
@ -379,8 +356,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(1, id); stmt.setInt(1, id);
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.DANGER, "Failed to delete plot " + plot.id); Logger.add(LogLevel.DANGER, "Failed to delete plot " + plot.id);
} }
@ -405,8 +381,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(1, id); stmt.setInt(1, id);
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -429,8 +404,7 @@ public class SQLManager implements AbstractDB {
} }
stmt.close(); stmt.close();
return id; return id;
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
return Integer.MAX_VALUE; return Integer.MAX_VALUE;
@ -463,8 +437,7 @@ public class SQLManager implements AbstractDB {
statement.executeBatch(); statement.executeBatch();
statement.close(); statement.close();
} }
} } catch (final Exception e) {
catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
final HashMap<Integer, Plot> plots = new HashMap<>(); final HashMap<Integer, Plot> plots = new HashMap<>();
@ -497,8 +470,7 @@ public class SQLManager implements AbstractDB {
if (!worlds.contains(worldname)) { if (!worlds.contains(worldname)) {
if (noExist.containsKey(worldname)) { if (noExist.containsKey(worldname)) {
noExist.put(worldname, noExist.get(worldname) + 1); noExist.put(worldname, noExist.get(worldname) + 1);
} } else {
else {
noExist.put(worldname, 1); noExist.put(worldname, 1);
} }
} }
@ -508,7 +480,7 @@ public class SQLManager implements AbstractDB {
user = UUID.fromString(o); user = UUID.fromString(o);
uuids.put(o, user); uuids.put(o, user);
} }
p = new Plot(plot_id, user, new ArrayList<UUID>(), new ArrayList<UUID>(), new ArrayList<UUID>(), "", PlotHomePosition.DEFAULT, null, worldname, new boolean[] { false, false, false, false }); p = new Plot(plot_id, user, new ArrayList<UUID>(), new ArrayList<UUID>(), new ArrayList<UUID>(), "", PlotHomePosition.DEFAULT, null, worldname, new boolean[]{false, false, false, false});
plots.put(id, p); plots.put(id, p);
} }
// stmt.close(); // stmt.close();
@ -528,8 +500,7 @@ public class SQLManager implements AbstractDB {
final Plot plot = plots.get(id); final Plot plot = plots.get(id);
if (plot != null) { if (plot != null) {
plot.addHelper(user); plot.addHelper(user);
} } else {
else {
PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_helpers does not exist. Please create the plot or remove this entry."); PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_helpers does not exist. Please create the plot or remove this entry.");
} }
} }
@ -551,8 +522,7 @@ public class SQLManager implements AbstractDB {
final Plot plot = plots.get(id); final Plot plot = plots.get(id);
if (plot != null) { if (plot != null) {
plot.addTrusted(user); plot.addTrusted(user);
} } else {
else {
PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_trusted does not exist. Please create the plot or remove this entry."); PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_trusted does not exist. Please create the plot or remove this entry.");
} }
} }
@ -574,8 +544,7 @@ public class SQLManager implements AbstractDB {
final Plot plot = plots.get(id); final Plot plot = plots.get(id);
if (plot != null) { if (plot != null) {
plot.addDenied(user); plot.addDenied(user);
} } else {
else {
PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_denied does not exist. Please create the plot or remove this entry."); PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_denied does not exist. Please create the plot or remove this entry.");
} }
} }
@ -620,17 +589,15 @@ public class SQLManager implements AbstractDB {
merged[3 - i] = ((m) & (1 << i)) != 0; merged[3 - i] = ((m) & (1 << i)) != 0;
} }
plot.settings.setMerged(merged); plot.settings.setMerged(merged);
} } else {
else { plot.settings.setMerged(new boolean[]{false, false, false, false});
plot.settings.setMerged(new boolean[] { false, false, false, false });
} }
String[] flags_string; String[] flags_string;
final String myflags = r.getString("flags"); final String myflags = r.getString("flags");
if (myflags == null) { if (myflags == null) {
flags_string = new String[] {}; flags_string = new String[]{};
} } else {
else {
flags_string = myflags.split(","); flags_string = myflags.split(",");
} }
final ArrayList<Flag> flags = new ArrayList<Flag>(); final ArrayList<Flag> flags = new ArrayList<Flag>();
@ -640,12 +607,10 @@ public class SQLManager implements AbstractDB {
final String[] split = element.split(":"); final String[] split = element.split(":");
try { try {
flags.add(new Flag(FlagManager.getFlag(split[0], true), split[1].replaceAll("\u00AF", ":").replaceAll("<EFBFBD>", ","))); flags.add(new Flag(FlagManager.getFlag(split[0], true), split[1].replaceAll("\u00AF", ":").replaceAll("<EFBFBD>", ",")));
} } catch (final Exception e) {
catch (final Exception e) {
exception = true; exception = true;
} }
} } else {
else {
flags.add(new Flag(FlagManager.getFlag(element, true), "")); flags.add(new Flag(FlagManager.getFlag(element, true), ""));
} }
} }
@ -654,8 +619,7 @@ public class SQLManager implements AbstractDB {
setFlags(id, flags.toArray(new Flag[0])); setFlags(id, flags.toArray(new Flag[0]));
} }
plot.settings.setFlags(flags.toArray(new Flag[0])); plot.settings.setFlags(flags.toArray(new Flag[0]));
} } else {
else {
PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_settings does not exist. Please create the plot or remove this entry."); PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_settings does not exist. Please create the plot or remove this entry.");
} }
} }
@ -675,8 +639,7 @@ public class SQLManager implements AbstractDB {
if (invalidPlot) { if (invalidPlot) {
PlotMain.sendConsoleSenderMessage("&c[WARNING] - Please create the world/s or remove the plots using the purge command"); PlotMain.sendConsoleSenderMessage("&c[WARNING] - Please create the world/s or remove the plots using the purge command");
} }
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to load plots."); Logger.add(LogLevel.WARNING, "Failed to load plots.");
e.printStackTrace(); e.printStackTrace();
} }
@ -699,8 +662,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(2, getId(world, plot.id)); stmt.setInt(2, getId(world, plot.id));
stmt.execute(); stmt.execute();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Could not set merged for plot " + plot.id); Logger.add(LogLevel.WARNING, "Could not set merged for plot " + plot.id);
} }
@ -729,8 +691,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(2, getId(world, plot.id)); stmt.setInt(2, getId(world, plot.id));
stmt.execute(); stmt.execute();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Could not set flag for plot " + plot.id); Logger.add(LogLevel.WARNING, "Could not set flag for plot " + plot.id);
} }
@ -755,8 +716,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(2, id); stmt.setInt(2, id);
stmt.execute(); stmt.execute();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Could not set flag for plot " + id); Logger.add(LogLevel.WARNING, "Could not set flag for plot " + id);
} }
@ -781,8 +741,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(2, getId(world, plot.id)); stmt.setInt(2, getId(world, plot.id));
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to set alias for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to set alias for plot " + plot.id);
e.printStackTrace(); e.printStackTrace();
} }
@ -816,8 +775,7 @@ public class SQLManager implements AbstractDB {
final int id = result.getInt("id"); final int id = result.getInt("id");
ids.add(id); ids.add(id);
} }
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "FAILED TO PURGE WORLD '" + world + "'!"); Logger.add(LogLevel.WARNING, "FAILED TO PURGE WORLD '" + world + "'!");
return; return;
@ -853,8 +811,7 @@ public class SQLManager implements AbstractDB {
stmt.setString(1, world); stmt.setString(1, world);
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.DANGER, "FAILED TO PURGE PLOT FROM DB '" + world + "' , '" + id + "' !"); Logger.add(LogLevel.DANGER, "FAILED TO PURGE PLOT FROM DB '" + world + "' , '" + id + "' !");
return; return;
@ -881,8 +838,7 @@ public class SQLManager implements AbstractDB {
final int id = result.getInt("id"); final int id = result.getInt("id");
ids.add(id); ids.add(id);
} }
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "FAILED TO PURGE WORLD '" + world + "'!"); Logger.add(LogLevel.WARNING, "FAILED TO PURGE WORLD '" + world + "'!");
return; return;
@ -918,8 +874,7 @@ public class SQLManager implements AbstractDB {
stmt.setString(1, world); stmt.setString(1, world);
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.DANGER, "FAILED TO PURGE WORLD '" + world + "'!"); Logger.add(LogLevel.DANGER, "FAILED TO PURGE WORLD '" + world + "'!");
return; return;
@ -947,8 +902,7 @@ public class SQLManager implements AbstractDB {
stmt.setInt(2, getId(world, plot.id)); stmt.setInt(2, getId(world, plot.id));
stmt.executeUpdate(); stmt.executeUpdate();
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to set position for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to set position for plot " + plot.id);
e.printStackTrace(); e.printStackTrace();
} }
@ -958,6 +912,7 @@ public class SQLManager implements AbstractDB {
/** /**
* @param id * @param id
*
* @return * @return
*/ */
@Override @Override
@ -1000,8 +955,7 @@ public class SQLManager implements AbstractDB {
h.put(var, val); h.put(var, val);
} }
stmt.close(); stmt.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to load settings for plot: " + id); Logger.add(LogLevel.WARNING, "Failed to load settings for plot: " + id);
e.printStackTrace(); e.printStackTrace();
} }
@ -1021,8 +975,7 @@ public class SQLManager implements AbstractDB {
statement.setString(4, comment.senderName); statement.setString(4, comment.senderName);
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id);
} }
@ -1046,8 +999,7 @@ public class SQLManager implements AbstractDB {
comments.add(comment); comments.add(comment);
} }
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to fetch rating for plot " + plot.getId().toString()); Logger.add(LogLevel.WARNING, "Failed to fetch rating for plot " + plot.getId().toString());
e.printStackTrace(); e.printStackTrace();
} }
@ -1067,8 +1019,7 @@ public class SQLManager implements AbstractDB {
statement.setString(4, comment.senderName); statement.setString(4, comment.senderName);
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id);
} }
@ -1092,8 +1043,7 @@ public class SQLManager implements AbstractDB {
statement.setString(2, UUIDHandler.getUUID(player).toString()); statement.setString(2, UUIDHandler.getUUID(player).toString());
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to remove helper for plot " + plot.id);
} }
@ -1116,8 +1066,7 @@ public class SQLManager implements AbstractDB {
statement.setString(2, UUIDHandler.getUUID(player).toString()); statement.setString(2, UUIDHandler.getUUID(player).toString());
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Failed to remove trusted user for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to remove trusted user for plot " + plot.id);
} }
@ -1140,8 +1089,7 @@ public class SQLManager implements AbstractDB {
statement.setString(2, UUIDHandler.getUUID(player).toString()); statement.setString(2, UUIDHandler.getUUID(player).toString());
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to set helper for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to set helper for plot " + plot.id);
e.printStackTrace(); e.printStackTrace();
} }
@ -1164,8 +1112,7 @@ public class SQLManager implements AbstractDB {
statement.setString(2, UUIDHandler.getUUID(player).toString()); statement.setString(2, UUIDHandler.getUUID(player).toString());
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to set plot trusted for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to set plot trusted for plot " + plot.id);
e.printStackTrace(); e.printStackTrace();
} }
@ -1188,8 +1135,7 @@ public class SQLManager implements AbstractDB {
statement.setString(2, UUIDHandler.getUUID(player).toString()); statement.setString(2, UUIDHandler.getUUID(player).toString());
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
e.printStackTrace(); e.printStackTrace();
Logger.add(LogLevel.WARNING, "Failed to remove denied for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to remove denied for plot " + plot.id);
} }
@ -1212,8 +1158,7 @@ public class SQLManager implements AbstractDB {
statement.setString(2, UUIDHandler.getUUID(player).toString()); statement.setString(2, UUIDHandler.getUUID(player).toString());
statement.executeUpdate(); statement.executeUpdate();
statement.close(); statement.close();
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to set denied for plot " + plot.id); Logger.add(LogLevel.WARNING, "Failed to set denied for plot " + plot.id);
e.printStackTrace(); e.printStackTrace();
} }
@ -1233,8 +1178,7 @@ public class SQLManager implements AbstractDB {
} }
statement.close(); statement.close();
return rating; return rating;
} } catch (final SQLException e) {
catch (final SQLException e) {
Logger.add(LogLevel.WARNING, "Failed to fetch rating for plot " + plot.getId().toString()); Logger.add(LogLevel.WARNING, "Failed to fetch rating for plot " + plot.getId().toString());
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -21,17 +21,13 @@
package com.intellectualcrafters.plot.database; package com.intellectualcrafters.plot.database;
import org.bukkit.plugin.Plugin;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.sql.Connection; import java.sql.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level; import java.util.logging.Level;
import org.bukkit.plugin.Plugin;
/** /**
* Connects to and uses a SQLite database * Connects to and uses a SQLite database
* *
@ -41,15 +37,13 @@ import org.bukkit.plugin.Plugin;
public class SQLite extends Database { public class SQLite extends Database {
private final String dbLocation; private final String dbLocation;
private Connection connection; private Connection connection;
/** /**
* Creates a new SQLite instance * Creates a new SQLite instance
* *
* @param plugin * @param plugin Plugin instance
* Plugin instance * @param dbLocation Location of the Database (Must end in .db)
* @param dbLocation
* Location of the Database (Must end in .db)
*/ */
public SQLite(final Plugin plugin, final String dbLocation) { public SQLite(final Plugin plugin, final String dbLocation) {
super(plugin); super(plugin);
@ -68,8 +62,7 @@ public class SQLite extends Database {
if (!(file.exists())) { if (!(file.exists())) {
try { try {
file.createNewFile(); file.createNewFile();
} } catch (final IOException e) {
catch (final IOException e) {
this.plugin.getLogger().log(Level.SEVERE, "Unable to create database!"); this.plugin.getLogger().log(Level.SEVERE, "Unable to create database!");
} }
} }

View File

@ -21,31 +21,27 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import com.intellectualcrafters.plot.object.Plot;
/** /**
* @author Citymonstret * @author Citymonstret
* @author Empire92 * @author Empire92
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused") public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable {
public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable {
private static HandlerList handlers = new HandlerList(); private static HandlerList handlers = new HandlerList();
private final Plot plot; private final Plot plot;
private final boolean auto; private final boolean auto;
private boolean cancelled; private boolean cancelled;
/** /**
* PlayerClaimPlotEvent: Called when a plot is claimed * PlayerClaimPlotEvent: Called when a plot is claimed
* *
* @param player * @param player Player that claimed the plot
* Player that claimed the plot * @param plot Plot that was claimed
* @param plot
* Plot that was claimed
*/ */
public PlayerClaimPlotEvent(final Player player, final Plot plot, final boolean auto) { public PlayerClaimPlotEvent(final Player player, final Plot plot, final boolean auto) {
super(player); super(player);

View File

@ -21,12 +21,11 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import com.intellectualcrafters.plot.object.Plot;
/** /**
* @author Citymonstret * @author Citymonstret
* @author Empire92 * @author Empire92
@ -35,15 +34,13 @@ public class PlayerEnterPlotEvent extends PlayerEvent {
private static HandlerList handlers = new HandlerList(); private static HandlerList handlers = new HandlerList();
private final Plot plot; private final Plot plot;
/** /**
* PlayerEnterPlotEvent: Called when a player leaves a plot * PlayerEnterPlotEvent: Called when a player leaves a plot
* *
* @param player * @param player Player that entered the plot
* Player that entered the plot * @param plot Plot that was entered
* @param plot
* Plot that was entered
*/ */
public PlayerEnterPlotEvent(final Player player, final Plot plot) { public PlayerEnterPlotEvent(final Player player, final Plot plot) {
super(player); super(player);

View File

@ -21,12 +21,11 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import com.intellectualcrafters.plot.object.Plot;
/** /**
* @author Citymonstret * @author Citymonstret
* @author Empire92 * @author Empire92
@ -34,15 +33,13 @@ import com.intellectualcrafters.plot.object.Plot;
public class PlayerLeavePlotEvent extends PlayerEvent { public class PlayerLeavePlotEvent extends PlayerEvent {
private static HandlerList handlers = new HandlerList(); private static HandlerList handlers = new HandlerList();
private final Plot plot; private final Plot plot;
/** /**
* PlayerLeavePlotEvent: Called when a player leaves a plot * PlayerLeavePlotEvent: Called when a player leaves a plot
* *
* @param player * @param player Player that left the plot
* Player that left the plot * @param plot Plot that was left
* @param plot
* Plot that was left
*/ */
public PlayerLeavePlotEvent(final Player player, final Plot plot) { public PlayerLeavePlotEvent(final Player player, final Plot plot) {
super(player); super(player);

View File

@ -21,13 +21,12 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import java.util.UUID; import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import com.intellectualcrafters.plot.object.Plot; import java.util.UUID;
/** /**
* @author Citymonstret * @author Citymonstret
@ -36,23 +35,18 @@ import com.intellectualcrafters.plot.object.Plot;
public class PlayerPlotDeniedEvent extends Event { public class PlayerPlotDeniedEvent extends Event {
private static HandlerList handlers = new HandlerList(); private static HandlerList handlers = new HandlerList();
private final Plot plot; private final Plot plot;
private final Player initiator; private final Player initiator;
private final boolean added; private final boolean added;
private final UUID player; private final UUID player;
/** /**
* PlayerPlotDeniedEvent: Called when the denied UUID list is modified for a * PlayerPlotDeniedEvent: Called when the denied UUID list is modified for a plot
* plot
* *
* @param initiator * @param initiator Player that initiated the event
* Player that initiated the event * @param plot Plot in which the event occurred
* @param plot * @param player Player that was denied/un-denied
* Plot in which the event occurred * @param added true of add to deny list, false if removed
* @param player
* Player that was denied/un-denied
* @param added
* true of add to deny list, false if removed
*/ */
public PlayerPlotDeniedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) { public PlayerPlotDeniedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
this.initiator = initiator; this.initiator = initiator;

View File

@ -21,13 +21,12 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import java.util.UUID; import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import com.intellectualcrafters.plot.object.Plot; import java.util.UUID;
/** /**
* @author Empire92 * @author Empire92
@ -36,22 +35,18 @@ import com.intellectualcrafters.plot.object.Plot;
public class PlayerPlotHelperEvent extends Event { public class PlayerPlotHelperEvent extends Event {
private static HandlerList handlers = new HandlerList(); private static HandlerList handlers = new HandlerList();
private final Plot plot; private final Plot plot;
private final Player initiator; private final Player initiator;
private final boolean added; private final boolean added;
private final UUID player; private final UUID player;
/** /**
* PlayerPlotHelperEvent: Called when a plot helper is added/removed * PlayerPlotHelperEvent: Called when a plot helper is added/removed
* *
* @param initiator * @param initiator Player that initiated the event
* Player that initiated the event * @param plot Plot in which the event occurred
* @param plot * @param player Player that was added/removed from the helper list
* Plot in which the event occurred * @param added true of the player was added, false if the player was removed
* @param player
* Player that was added/removed from the helper list
* @param added
* true of the player was added, false if the player was removed
*/ */
public PlayerPlotHelperEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) { public PlayerPlotHelperEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
this.initiator = initiator; this.initiator = initiator;

View File

@ -21,13 +21,12 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import java.util.UUID; import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import com.intellectualcrafters.plot.object.Plot; import java.util.UUID;
/** /**
* @author Citymonstret * @author Citymonstret
@ -36,22 +35,18 @@ import com.intellectualcrafters.plot.object.Plot;
public class PlayerPlotTrustedEvent extends Event { public class PlayerPlotTrustedEvent extends Event {
private static HandlerList handlers = new HandlerList(); private static HandlerList handlers = new HandlerList();
private final Plot plot; private final Plot plot;
private final Player initiator; private final Player initiator;
private final boolean added; private final boolean added;
private final UUID player; private final UUID player;
/** /**
* PlayerPlotTrustedEvent: Called when a plot trusted user is added/removed * PlayerPlotTrustedEvent: Called when a plot trusted user is added/removed
* *
* @param initiator * @param initiator Player that initiated the event
* Player that initiated the event * @param plot Plot in which the event occurred
* @param plot * @param player Player that was added/removed from the trusted list
* Plot in which the event occurred * @param added true of the player was added, false if the player was removed
* @param player
* Player that was added/removed from the trusted list
* @param added
* true of the player was added, false if the player was removed
*/ */
public PlayerPlotTrustedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) { public PlayerPlotTrustedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
this.initiator = initiator; this.initiator = initiator;

View File

@ -21,14 +21,13 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import com.intellectualcrafters.plot.object.Plot;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import com.intellectualcrafters.plot.object.Plot;
/** /**
* Called when a player teleports to a plot * Called when a player teleports to a plot
* *
@ -38,20 +37,17 @@ import com.intellectualcrafters.plot.object.Plot;
public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellable { public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellable {
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
private final Location from; private final Location from;
private final Plot plot; private final Plot plot;
private boolean cancelled; private boolean cancelled;
/** /**
* PlayerTeleportToPlotEvent: Called when a player teleports to a plot * PlayerTeleportToPlotEvent: Called when a player teleports to a plot
* *
* @param player * @param player That was teleported
* That was teleported * @param from Start location
* @param from * @param plot Plot to which the player was teleported
* Start location
* @param plot
* Plot to which the player was teleported
*/ */
public PlayerTeleportToPlotEvent(final Player player, final Location from, final Plot plot) { public PlayerTeleportToPlotEvent(final Player player, final Location from, final Plot plot) {
super(player); super(player);

Some files were not shown because too many files have changed in this diff Show More