diff --git a/.gitignore b/.gitignore index 9ead3a473..71dadcdda 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +PlotSquared/.project # Created by https://www.gitignore.io ### Intellij ### @@ -48,6 +49,8 @@ com_crashlytics_export_strings.xml ### Eclipse ### +.classpath +.project *.pydevproject .metadata .gradle @@ -93,8 +96,6 @@ local.properties # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* -.classpath -.project /target /plotsquared/target *.MF \ No newline at end of file diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteArrayTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteArrayTag.java index 32cdf131b..a73ecb9ba 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteArrayTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteArrayTag.java @@ -4,9 +4,8 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_Byte_Array} tag. */ public final class ByteArrayTag extends Tag { - private final byte[] value; - + /** * Creates the tag with an empty name. * @@ -16,7 +15,7 @@ public final class ByteArrayTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -27,12 +26,12 @@ public final class ByteArrayTag extends Tag { super(name); this.value = value; } - + @Override public byte[] getValue() { return this.value; } - + @Override public String toString() { final StringBuilder hex = new StringBuilder(); @@ -50,5 +49,4 @@ public final class ByteArrayTag extends Tag { } return "TAG_Byte_Array" + append + ": " + hex; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteTag.java index 8e2ad5638..388ed82e2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ByteTag.java @@ -4,9 +4,8 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_Byte} tag. */ public final class ByteTag extends Tag { - private final byte value; - + /** * Creates the tag with an empty name. * @@ -16,7 +15,7 @@ public final class ByteTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -27,12 +26,12 @@ public final class ByteTag extends Tag { super(name); this.value = value; } - + @Override public Byte getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -42,5 +41,4 @@ public final class ByteTag extends Tag { } return "TAG_Byte" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTag.java index a8d0b052b..10c11b32c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTag.java @@ -9,9 +9,8 @@ import java.util.Map; * The {@code TAG_Compound} tag. */ public final class CompoundTag extends Tag { - private final Map value; - + /** * Creates the tag with an empty name. * @@ -21,7 +20,7 @@ public final class CompoundTag extends Tag { super(); this.value = Collections.unmodifiableMap(value); } - + /** * Creates the tag. * @@ -32,7 +31,7 @@ public final class CompoundTag extends Tag { super(name); this.value = Collections.unmodifiableMap(value); } - + /** * Returns whether this compound tag contains the given key. * @@ -43,12 +42,12 @@ public final class CompoundTag extends Tag { public boolean containsKey(final String key) { return this.value.containsKey(key); } - + @Override public Map getValue() { return this.value; } - + /** * Return a new compound tag with the given values. * @@ -59,7 +58,7 @@ public final class CompoundTag extends Tag { public CompoundTag setValue(final Map value) { return new CompoundTag(getName(), value); } - + /** * Create a compound tag builder. * @@ -68,7 +67,7 @@ public final class CompoundTag extends Tag { public CompoundTagBuilder createBuilder() { return new CompoundTagBuilder(new HashMap(this.value)); } - + /** * Get a byte array named with the given key.

If the key does not exist or its value is not a byte array * tag, then an empty byte array will be returned.

@@ -85,7 +84,7 @@ public final class CompoundTag extends Tag { return new byte[0]; } } - + /** * Get a byte named with the given key.

If the key does not exist or its value is not a byte tag, then * {@code 0} will be returned.

@@ -102,7 +101,7 @@ public final class CompoundTag extends Tag { return (byte) 0; } } - + /** * Get a double named with the given key.

If the key does not exist or its value is not a double tag, then * {@code 0} will be returned.

@@ -119,7 +118,7 @@ public final class CompoundTag extends Tag { return 0; } } - + /** * Get a double named with the given key, even if it's another type of number.

If the key does not exist or * its value is not a number, then {@code 0} will be returned.

@@ -132,27 +131,21 @@ public final class CompoundTag extends Tag { final Tag tag = this.value.get(key); if (tag instanceof ByteTag) { return ((ByteTag) tag).getValue(); - } else if (tag instanceof ShortTag) { return ((ShortTag) tag).getValue(); - } else if (tag instanceof IntTag) { return ((IntTag) tag).getValue(); - } else if (tag instanceof LongTag) { return ((LongTag) tag).getValue(); - } else if (tag instanceof FloatTag) { return ((FloatTag) tag).getValue(); - } else if (tag instanceof DoubleTag) { return ((DoubleTag) tag).getValue(); - } else { return 0; } } - + /** * Get a float named with the given key.

If the key does not exist or its value is not a float tag, then * {@code 0} will be returned.

@@ -169,7 +162,7 @@ public final class CompoundTag extends Tag { return 0; } } - + /** * Get a {@code int[]} named with the given key.

If the key does not exist or its value is not an int array * tag, then an empty array will be returned.

@@ -186,7 +179,7 @@ public final class CompoundTag extends Tag { return new int[0]; } } - + /** * Get an int named with the given key.

If the key does not exist or its value is not an int tag, then * {@code 0} will be returned.

@@ -203,7 +196,7 @@ public final class CompoundTag extends Tag { return 0; } } - + /** * Get an int named with the given key, even if it's another type of number.

If the key does not exist or * its value is not a number, then {@code 0} will be returned.

@@ -216,27 +209,21 @@ public final class CompoundTag extends Tag { final Tag tag = this.value.get(key); if (tag instanceof ByteTag) { return ((ByteTag) tag).getValue(); - } else if (tag instanceof ShortTag) { return ((ShortTag) tag).getValue(); - } else if (tag instanceof IntTag) { return ((IntTag) tag).getValue(); - } else if (tag instanceof LongTag) { return ((LongTag) tag).getValue().intValue(); - } else if (tag instanceof FloatTag) { return ((FloatTag) tag).getValue().intValue(); - } else if (tag instanceof DoubleTag) { return ((DoubleTag) tag).getValue().intValue(); - } else { return 0; } } - + /** * Get a list of tags named with the given key.

If the key does not exist or its value is not a list tag, * then an empty list will be returned.

@@ -253,7 +240,7 @@ public final class CompoundTag extends Tag { return Collections.emptyList(); } } - + /** * Get a {@code TagList} named with the given key.

If the key does not exist or its value is not a list * tag, then an empty tag list will be returned.

@@ -267,10 +254,10 @@ public final class CompoundTag extends Tag { if (tag instanceof ListTag) { return (ListTag) tag; } else { - return new ListTag(key, StringTag.class, Collections.emptyList()); + return new ListTag(key, StringTag.class, Collections. emptyList()); } } - + /** * Get a list of tags named with the given key.

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 of a different type, then @@ -296,7 +283,7 @@ public final class CompoundTag extends Tag { return Collections.emptyList(); } } - + /** * Get a long named with the given key.

If the key does not exist or its value is not a long tag, then * {@code 0} will be returned.

@@ -313,7 +300,7 @@ public final class CompoundTag extends Tag { return 0L; } } - + /** * Get a long named with the given key, even if it's another type of number.

If the key does not exist or * its value is not a number, then {@code 0} will be returned.

@@ -326,27 +313,21 @@ public final class CompoundTag extends Tag { final Tag tag = this.value.get(key); if (tag instanceof ByteTag) { return ((ByteTag) tag).getValue(); - } else if (tag instanceof ShortTag) { return ((ShortTag) tag).getValue(); - } else if (tag instanceof IntTag) { return ((IntTag) tag).getValue(); - } else if (tag instanceof LongTag) { return ((LongTag) tag).getValue(); - } else if (tag instanceof FloatTag) { return ((FloatTag) tag).getValue().longValue(); - } else if (tag instanceof DoubleTag) { return ((DoubleTag) tag).getValue().longValue(); - } else { return 0L; } } - + /** * Get a short named with the given key.

If the key does not exist or its value is not a short tag, then * {@code 0} will be returned.

@@ -363,7 +344,7 @@ public final class CompoundTag extends Tag { return 0; } } - + /** * Get a string named with the given key.

If the key does not exist or its value is not a string tag, then * {@code ""} will be returned.

@@ -380,7 +361,7 @@ public final class CompoundTag extends Tag { return ""; } } - + @Override public String toString() { final String name = getName(); @@ -396,5 +377,4 @@ public final class CompoundTag extends Tag { bldr.append("}"); return bldr.toString(); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTagBuilder.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTagBuilder.java index 365b7322a..86e04e2fd 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTagBuilder.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/CompoundTagBuilder.java @@ -9,16 +9,15 @@ import java.util.Map; * Helps create compound tags. */ public class CompoundTagBuilder { - private final Map entries; - + /** * Create a new instance. */ CompoundTagBuilder() { this.entries = new HashMap(); } - + /** * Create a new instance and use the given map (which will be modified). * @@ -28,7 +27,7 @@ public class CompoundTagBuilder { checkNotNull(value); this.entries = value; } - + /** * Create a new builder instance. * @@ -37,7 +36,7 @@ public class CompoundTagBuilder { public static CompoundTagBuilder create() { return new CompoundTagBuilder(); } - + /** * Put the given key and tag into the compound tag. * @@ -52,7 +51,7 @@ public class CompoundTagBuilder { this.entries.put(key, value); return this; } - + /** * Put the given key and value into the compound tag as a {@code ByteArrayTag}. * @@ -64,7 +63,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putByteArray(final String key, final byte[] value) { return put(key, new ByteArrayTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code ByteTag}. * @@ -76,7 +75,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putByte(final String key, final byte value) { return put(key, new ByteTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code DoubleTag}. * @@ -88,7 +87,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putDouble(final String key, final double value) { return put(key, new DoubleTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code FloatTag}. * @@ -100,7 +99,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putFloat(final String key, final float value) { return put(key, new FloatTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code IntArrayTag}. * @@ -112,7 +111,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putIntArray(final String key, final int[] value) { return put(key, new IntArrayTag(key, value)); } - + /** * Put the given key and value into the compound tag as an {@code IntTag}. * @@ -124,7 +123,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putInt(final String key, final int value) { return put(key, new IntTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code LongTag}. * @@ -136,7 +135,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putLong(final String key, final long value) { return put(key, new LongTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code ShortTag}. * @@ -148,7 +147,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putShort(final String key, final short value) { return put(key, new ShortTag(key, value)); } - + /** * Put the given key and value into the compound tag as a {@code StringTag}. * @@ -160,7 +159,7 @@ public class CompoundTagBuilder { public CompoundTagBuilder putString(final String key, final String value) { return put(key, new StringTag(key, value)); } - + /** * Put all the entries from the given map into this map. * @@ -175,7 +174,7 @@ public class CompoundTagBuilder { } return this; } - + /** * Build an unnamed compound tag with this builder's entries. * @@ -184,7 +183,7 @@ public class CompoundTagBuilder { public CompoundTag build() { return new CompoundTag(new HashMap(this.entries)); } - + /** * Build a new compound tag with this builder's entries. * @@ -195,5 +194,4 @@ public class CompoundTagBuilder { public CompoundTag build(final String name) { return new CompoundTag(name, new HashMap(this.entries)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/DoubleTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/DoubleTag.java index 2a4c52448..d85fd6135 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/DoubleTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/DoubleTag.java @@ -4,9 +4,8 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_Double} tag. */ public final class DoubleTag extends Tag { - private final double value; - + /** * Creates the tag with an empty name. * @@ -16,7 +15,7 @@ public final class DoubleTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -27,12 +26,12 @@ public final class DoubleTag extends Tag { super(name); this.value = value; } - + @Override public Double getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -42,5 +41,4 @@ public final class DoubleTag extends Tag { } return "TAG_Double" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/EndTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/EndTag.java index 408206b1b..981925184 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/EndTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/EndTag.java @@ -4,22 +4,20 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_End} tag. */ public final class EndTag extends Tag { - /** * Creates the tag. */ public EndTag() { super(); } - + @Override public Object getValue() { return null; } - + @Override public String toString() { return "TAG_End"; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/FloatTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/FloatTag.java index a9701340a..2dea1766f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/FloatTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/FloatTag.java @@ -4,9 +4,8 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_Float} tag. */ public final class FloatTag extends Tag { - private final float value; - + /** * Creates the tag with an empty name. * @@ -16,7 +15,7 @@ public final class FloatTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -27,12 +26,12 @@ public final class FloatTag extends Tag { super(name); this.value = value; } - + @Override public Float getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -42,5 +41,4 @@ public final class FloatTag extends Tag { } return "TAG_Float" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntArrayTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntArrayTag.java index 9439f051b..c4349f89e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntArrayTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntArrayTag.java @@ -6,9 +6,8 @@ import static com.google.common.base.Preconditions.checkNotNull; * The {@code TAG_Int_Array} tag. */ public final class IntArrayTag extends Tag { - private final int[] value; - + /** * Creates the tag with an empty name. * @@ -19,7 +18,7 @@ public final class IntArrayTag extends Tag { checkNotNull(value); this.value = value; } - + /** * Creates the tag. * @@ -31,12 +30,12 @@ public final class IntArrayTag extends Tag { checkNotNull(value); this.value = value; } - + @Override public int[] getValue() { return this.value; } - + @Override public String toString() { final StringBuilder hex = new StringBuilder(); @@ -54,5 +53,4 @@ public final class IntArrayTag extends Tag { } return "TAG_Int_Array" + append + ": " + hex; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntTag.java index 7e5328f37..bee6eb7d7 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/IntTag.java @@ -4,9 +4,8 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_Int} tag. */ public final class IntTag extends Tag { - private final int value; - + /** * Creates the tag with an empty name. * @@ -16,7 +15,7 @@ public final class IntTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -27,12 +26,12 @@ public final class IntTag extends Tag { super(name); this.value = value; } - + @Override public Integer getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -42,5 +41,4 @@ public final class IntTag extends Tag { } return "TAG_Int" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTag.java index 434f1a95a..415721c30 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTag.java @@ -12,10 +12,9 @@ import javax.annotation.Nullable; * The {@code TAG_List} tag. */ public final class ListTag extends Tag { - private final Class type; private final List value; - + /** * Creates the tag with an empty name. * @@ -28,7 +27,7 @@ public final class ListTag extends Tag { this.type = type; this.value = Collections.unmodifiableList(value); } - + /** * Creates the tag. * @@ -42,7 +41,7 @@ public final class ListTag extends Tag { this.type = type; this.value = Collections.unmodifiableList(value); } - + /** * Gets the type of item in this list. * @@ -51,12 +50,12 @@ public final class ListTag extends Tag { public Class getType() { return this.type; } - + @Override public List getValue() { return this.value; } - + /** * Create a new list tag with this tag's name and type. * @@ -67,7 +66,7 @@ public final class ListTag extends Tag { public ListTag setValue(final List list) { return new ListTag(getName(), getType(), list); } - + /** * Get the tag if it exists at the given index. * @@ -83,7 +82,7 @@ public final class ListTag extends Tag { return null; } } - + /** * Get a byte array named with the given index.

If the index does not exist or its value is not a byte * array tag, then an empty byte array will be returned.

@@ -100,7 +99,7 @@ public final class ListTag extends Tag { return new byte[0]; } } - + /** * Get a byte named with the given index.

If the index does not exist or its value is not a byte tag, then * {@code 0} will be returned.

@@ -117,7 +116,7 @@ public final class ListTag extends Tag { return (byte) 0; } } - + /** * Get a double named with the given index.

If the index does not exist or its value is not a double tag, * then {@code 0} will be returned.

@@ -134,7 +133,7 @@ public final class ListTag extends Tag { return 0; } } - + /** * Get a double named with the given index, even if it's another type of number.

If the index does not * exist or its value is not a number, then {@code 0} will be returned.

@@ -147,27 +146,21 @@ public final class ListTag extends Tag { final Tag tag = getIfExists(index); if (tag instanceof ByteTag) { return ((ByteTag) tag).getValue(); - } else if (tag instanceof ShortTag) { return ((ShortTag) tag).getValue(); - } else if (tag instanceof IntTag) { return ((IntTag) tag).getValue(); - } else if (tag instanceof LongTag) { return ((LongTag) tag).getValue(); - } else if (tag instanceof FloatTag) { return ((FloatTag) tag).getValue(); - } else if (tag instanceof DoubleTag) { return ((DoubleTag) tag).getValue(); - } else { return 0; } } - + /** * Get a float named with the given index.

If the index does not exist or its value is not a float tag, * then {@code 0} will be returned.

@@ -184,7 +177,7 @@ public final class ListTag extends Tag { return 0; } } - + /** * Get a {@code int[]} named with the given index.

If the index does not exist or its value is not an int * array tag, then an empty array will be returned.

@@ -201,7 +194,7 @@ public final class ListTag extends Tag { return new int[0]; } } - + /** * Get an int named with the given index.

If the index does not exist or its value is not an int tag, then * {@code 0} will be returned.

@@ -218,7 +211,7 @@ public final class ListTag extends Tag { return 0; } } - + /** * Get an int named with the given index, even if it's another type of number.

If the index does not exist * or its value is not a number, then {@code 0} will be returned.

@@ -231,27 +224,21 @@ public final class ListTag extends Tag { final Tag tag = getIfExists(index); if (tag instanceof ByteTag) { return ((ByteTag) tag).getValue(); - } else if (tag instanceof ShortTag) { return ((ShortTag) tag).getValue(); - } else if (tag instanceof IntTag) { return ((IntTag) tag).getValue(); - } else if (tag instanceof LongTag) { return ((LongTag) tag).getValue().intValue(); - } else if (tag instanceof FloatTag) { return ((FloatTag) tag).getValue().intValue(); - } else if (tag instanceof DoubleTag) { return ((DoubleTag) tag).getValue().intValue(); - } else { return 0; } } - + /** * Get a list of tags named with the given index.

If the index does not exist or its value is not a list * tag, then an empty list will be returned.

@@ -268,7 +255,7 @@ public final class ListTag extends Tag { return Collections.emptyList(); } } - + /** * Get a {@code TagList} named with the given index.

If the index does not exist or its value is not a list * tag, then an empty tag list will be returned.

@@ -282,10 +269,10 @@ public final class ListTag extends Tag { if (tag instanceof ListTag) { return (ListTag) tag; } else { - return new ListTag(StringTag.class, Collections.emptyList()); + return new ListTag(StringTag.class, Collections. emptyList()); } } - + /** * Get a list of tags named with the given index.

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 of of a different @@ -311,7 +298,7 @@ public final class ListTag extends Tag { return Collections.emptyList(); } } - + /** * Get a long named with the given index.

If the index does not exist or its value is not a long tag, then * {@code 0} will be returned.

@@ -328,7 +315,7 @@ public final class ListTag extends Tag { return 0L; } } - + /** * Get a long named with the given index, even if it's another type of number.

If the index does not exist * or its value is not a number, then {@code 0} will be returned.

@@ -341,27 +328,21 @@ public final class ListTag extends Tag { final Tag tag = getIfExists(index); if (tag instanceof ByteTag) { return ((ByteTag) tag).getValue(); - } else if (tag instanceof ShortTag) { return ((ShortTag) tag).getValue(); - } else if (tag instanceof IntTag) { return ((IntTag) tag).getValue(); - } else if (tag instanceof LongTag) { return ((LongTag) tag).getValue(); - } else if (tag instanceof FloatTag) { return ((FloatTag) tag).getValue().longValue(); - } else if (tag instanceof DoubleTag) { return ((DoubleTag) tag).getValue().longValue(); - } else { return 0; } } - + /** * Get a short named with the given index.

If the index does not exist or its value is not a short tag, * then {@code 0} will be returned.

@@ -378,7 +359,7 @@ public final class ListTag extends Tag { return 0; } } - + /** * Get a string named with the given index.

If the index does not exist or its value is not a string tag, * then {@code ""} will be returned.

@@ -395,7 +376,7 @@ public final class ListTag extends Tag { return ""; } } - + @Override public String toString() { final String name = getName(); @@ -411,5 +392,4 @@ public final class ListTag extends Tag { bldr.append("}"); return bldr.toString(); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTagBuilder.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTagBuilder.java index 42992d2e6..a050599c5 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTagBuilder.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ListTagBuilder.java @@ -11,10 +11,9 @@ import java.util.List; * Helps create list tags. */ public class ListTagBuilder { - private final Class type; private final List entries; - + /** * Create a new instance. * @@ -25,7 +24,7 @@ public class ListTagBuilder { this.type = type; this.entries = new ArrayList(); } - + /** * Create a new builder instance. * @@ -34,7 +33,7 @@ public class ListTagBuilder { public static ListTagBuilder create(final Class type) { return new ListTagBuilder(type); } - + /** * Create a new builder instance. * @@ -43,23 +42,20 @@ public class ListTagBuilder { @SafeVarargs public static ListTagBuilder createWith(final T... entries) { checkNotNull(entries); - if (entries.length == 0) { throw new IllegalArgumentException("This method needs an array of at least one entry"); } - final Class type = entries[0].getClass(); for (int i = 1; i < entries.length; i++) { if (!type.isInstance(entries[i])) { throw new IllegalArgumentException("An array of different tag types was provided"); } } - final ListTagBuilder builder = new ListTagBuilder(type); builder.addAll(Arrays.asList(entries)); return builder; } - + /** * Add the given tag. * @@ -75,7 +71,7 @@ public class ListTagBuilder { this.entries.add(value); return this; } - + /** * Add all the tags in the given list. * @@ -90,7 +86,7 @@ public class ListTagBuilder { } return this; } - + /** * Build an unnamed list tag with this builder's entries. * @@ -99,7 +95,7 @@ public class ListTagBuilder { public ListTag build() { return new ListTag(this.type, new ArrayList(this.entries)); } - + /** * Build a new list tag with this builder's entries. * @@ -110,5 +106,4 @@ public class ListTagBuilder { public ListTag build(final String name) { return new ListTag(name, this.type, new ArrayList(this.entries)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/LongTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/LongTag.java index a8d22218c..974a4d199 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/LongTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/LongTag.java @@ -4,9 +4,8 @@ package com.intellectualcrafters.jnbt; * The {@code TAG_Long} tag. */ public final class LongTag extends Tag { - private final long value; - + /** * Creates the tag with an empty name. * @@ -16,7 +15,7 @@ public final class LongTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -27,12 +26,12 @@ public final class LongTag extends Tag { super(name); this.value = value; } - + @Override public Long getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -42,5 +41,4 @@ public final class LongTag extends Tag { } return "TAG_Long" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTConstants.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTConstants.java index 65a13f4ec..604859fff 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTConstants.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTConstants.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.jnbt; import java.nio.charset.Charset; @@ -27,18 +26,15 @@ import java.nio.charset.Charset; * A class which holds constant values. */ public final class NBTConstants { - 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; - + /** * Default private constructor. */ private NBTConstants() { - } - + /** * Convert a type ID to its corresponding {@link Tag} class. * @@ -78,5 +74,4 @@ public final class NBTConstants { throw new IllegalArgumentException("Unknown tag type ID of " + id); } } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTInputStream.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTInputStream.java index 7aa319759..2c9a6610d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTInputStream.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTInputStream.java @@ -15,9 +15,8 @@ import java.util.Map; * may be found at http://www.minecraft.net/docs/NBT.txt.

*/ public final class NBTInputStream implements Closeable { - private final DataInputStream is; - + /** * Creates a new {@code NBTInputStream}, which will source its data from the specified input stream. * @@ -28,7 +27,7 @@ public final class NBTInputStream implements Closeable { public NBTInputStream(final InputStream is) throws IOException { this.is = new DataInputStream(is); } - + /** * Reads an NBT tag from the stream. * @@ -39,7 +38,7 @@ public final class NBTInputStream implements Closeable { public Tag readTag() throws IOException { return readTag(0); } - + /** * Reads an NBT from the stream. * @@ -51,7 +50,6 @@ public final class NBTInputStream implements Closeable { */ private Tag readTag(final int depth) throws IOException { final int type = this.is.readByte() & 0xFF; - String name; if (type != NBTConstants.TYPE_END) { final int nameLength = this.is.readShort() & 0xFFFF; @@ -61,10 +59,9 @@ public final class NBTInputStream implements Closeable { } else { name = ""; } - return readTagPayload(type, name, depth); } - + /** * Reads the payload of a tag, given the name and type. * @@ -109,7 +106,6 @@ public final class NBTInputStream implements Closeable { case NBTConstants.TYPE_LIST: final int childType = this.is.readByte(); length = this.is.readInt(); - final List tagList = new ArrayList(); for (int i = 0; i < length; ++i) { final Tag tag = readTagPayload(childType, "", depth + 1); @@ -118,7 +114,6 @@ public final class NBTInputStream implements Closeable { } tagList.add(tag); } - return new ListTag(name, NBTUtils.getTypeClass(childType), tagList); case NBTConstants.TYPE_COMPOUND: final Map tagMap = new HashMap(); @@ -130,7 +125,6 @@ public final class NBTInputStream implements Closeable { tagMap.put(tag.getName(), tag); } } - return new CompoundTag(name, tagMap); case NBTConstants.TYPE_INT_ARRAY: length = this.is.readInt(); @@ -143,10 +137,9 @@ public final class NBTInputStream implements Closeable { throw new IOException("Invalid tag type: " + type + "."); } } - + @Override public void close() throws IOException { this.is.close(); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTOutputStream.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTOutputStream.java index 65e3426e5..a4deec5a3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTOutputStream.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTOutputStream.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.jnbt; import java.io.Closeable; @@ -36,12 +35,11 @@ import java.util.List; * @author Graham Edgecombe */ public final class NBTOutputStream implements Closeable { - /** * The output stream. */ private final DataOutputStream os; - + /** * Creates a new NBTOutputStream, which will write data to the specified underlying output stream. * @@ -52,7 +50,7 @@ public final class NBTOutputStream implements Closeable { public NBTOutputStream(final OutputStream os) throws IOException { this.os = new DataOutputStream(os); } - + /** * Writes a tag. * @@ -64,18 +62,15 @@ public final class NBTOutputStream implements Closeable { final int type = NBTUtils.getTypeCode(tag.getClass()); final String name = tag.getName(); final byte[] nameBytes = name.getBytes(NBTConstants.CHARSET); - this.os.writeByte(type); this.os.writeShort(nameBytes.length); this.os.write(nameBytes); - if (type == NBTConstants.TYPE_END) { throw new IOException("Named TAG_End not permitted."); } - writeTagPayload(tag); } - + /** * Writes tag payload. * @@ -126,7 +121,7 @@ public final class NBTOutputStream implements Closeable { throw new IOException("Invalid tag type: " + type + "."); } } - + /** * Writes a TAG_Byte tag. * @@ -137,7 +132,7 @@ public final class NBTOutputStream implements Closeable { private void writeByteTagPayload(final ByteTag tag) throws IOException { this.os.writeByte(tag.getValue()); } - + /** * Writes a TAG_Byte_Array tag. * @@ -150,7 +145,7 @@ public final class NBTOutputStream implements Closeable { this.os.writeInt(bytes.length); this.os.write(bytes); } - + /** * Writes a TAG_Compound tag. * @@ -164,7 +159,7 @@ public final class NBTOutputStream implements Closeable { } this.os.writeByte((byte) 0); // end tag - better way? } - + /** * Writes a TAG_List tag. * @@ -176,14 +171,13 @@ public final class NBTOutputStream implements Closeable { final Class clazz = tag.getType(); final List tags = tag.getValue(); final int size = tags.size(); - this.os.writeByte(NBTUtils.getTypeCode(clazz)); this.os.writeInt(size); for (final Tag tag1 : tags) { writeTagPayload(tag1); } } - + /** * Writes a TAG_String tag. * @@ -196,7 +190,7 @@ public final class NBTOutputStream implements Closeable { this.os.writeShort(bytes.length); this.os.write(bytes); } - + /** * Writes a TAG_Double tag. * @@ -207,7 +201,7 @@ public final class NBTOutputStream implements Closeable { private void writeDoubleTagPayload(final DoubleTag tag) throws IOException { this.os.writeDouble(tag.getValue()); } - + /** * Writes a TAG_Float tag. * @@ -218,7 +212,7 @@ public final class NBTOutputStream implements Closeable { private void writeFloatTagPayload(final FloatTag tag) throws IOException { this.os.writeFloat(tag.getValue()); } - + /** * Writes a TAG_Long tag. * @@ -229,7 +223,7 @@ public final class NBTOutputStream implements Closeable { private void writeLongTagPayload(final LongTag tag) throws IOException { this.os.writeLong(tag.getValue()); } - + /** * Writes a TAG_Int tag. * @@ -240,7 +234,7 @@ public final class NBTOutputStream implements Closeable { private void writeIntTagPayload(final IntTag tag) throws IOException { this.os.writeInt(tag.getValue()); } - + /** * Writes a TAG_Short tag. * @@ -251,7 +245,7 @@ public final class NBTOutputStream implements Closeable { private void writeShortTagPayload(final ShortTag tag) throws IOException { this.os.writeShort(tag.getValue()); } - + /** * Writes a TAG_Empty tag. * @@ -262,7 +256,7 @@ public final class NBTOutputStream implements Closeable { private void writeEndTagPayload(final EndTag tag) { /* empty */ } - + private void writeIntArrayTagPayload(final IntArrayTag tag) throws IOException { final int[] data = tag.getValue(); this.os.writeInt(data.length); @@ -270,10 +264,9 @@ public final class NBTOutputStream implements Closeable { this.os.writeInt(element); } } - + @Override public void close() throws IOException { this.os.close(); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTUtils.java index fb7b85698..741fdf2ac 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/NBTUtils.java @@ -6,13 +6,12 @@ import java.util.Map; * A class which contains NBT-related utility methods. */ public final class NBTUtils { - /** * Default private constructor. */ private NBTUtils() { } - + /** * Gets the type name of a tag. * @@ -49,7 +48,7 @@ public final class NBTUtils { throw new IllegalArgumentException("Invalid tag classs (" + clazz.getName() + ")."); } } - + /** * Gets the type code of a tag class. * @@ -88,7 +87,7 @@ public final class NBTUtils { throw new IllegalArgumentException("Invalid tag classs (" + clazz.getName() + ")."); } } - + /** * Gets the class of a type of tag. * @@ -128,7 +127,7 @@ public final class NBTUtils { throw new IllegalArgumentException("Invalid tag type : " + type + "."); } } - + /** * Get child tag of a NBT structure. * @@ -148,5 +147,4 @@ public final class NBTUtils { } return expected.cast(tag); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ShortTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ShortTag.java index b4fb7e2a8..df4ceb57e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ShortTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/ShortTag.java @@ -18,16 +18,14 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.jnbt; /** * The {@code TAG_Short} tag. */ public final class ShortTag extends Tag { - private final short value; - + /** * Creates the tag with an empty name. * @@ -37,7 +35,7 @@ public final class ShortTag extends Tag { super(); this.value = value; } - + /** * Creates the tag. * @@ -48,12 +46,12 @@ public final class ShortTag extends Tag { super(name); this.value = value; } - + @Override public Short getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -63,5 +61,4 @@ public final class ShortTag extends Tag { } return "TAG_Short" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/StringTag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/StringTag.java index 708331cec..8c0756e63 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/StringTag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/StringTag.java @@ -6,9 +6,8 @@ import static com.google.common.base.Preconditions.checkNotNull; * The {@code TAG_String} tag. */ public final class StringTag extends Tag { - private final String value; - + /** * Creates the tag with an empty name. * @@ -19,7 +18,7 @@ public final class StringTag extends Tag { checkNotNull(value); this.value = value; } - + /** * Creates the tag. * @@ -31,12 +30,12 @@ public final class StringTag extends Tag { checkNotNull(value); this.value = value; } - + @Override public String getValue() { return this.value; } - + @Override public String toString() { final String name = getName(); @@ -46,5 +45,4 @@ public final class StringTag extends Tag { } return "TAG_String" + append + ": " + this.value; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/Tag.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/Tag.java index aa060c18e..395333e13 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/Tag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/Tag.java @@ -18,23 +18,21 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.jnbt; /** * Represents a NBT tag. */ public abstract class Tag { - private final String name; - + /** * Create a new tag with an empty name. */ Tag() { this(""); } - + /** * Creates the tag with the specified name. * @@ -46,7 +44,7 @@ public abstract class Tag { } this.name = name; } - + /** * Gets the name of this tag. * @@ -55,12 +53,11 @@ public abstract class Tag { public final String getName() { return this.name; } - + /** * Gets the value of this tag. * * @return the value */ public abstract Object getValue(); - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/WorldEditUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/WorldEditUtils.java index 30123a5ac..3f86f897a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/WorldEditUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/jnbt/WorldEditUtils.java @@ -4,11 +4,8 @@ import org.bukkit.World; public class WorldEditUtils { public static void setNBT(final World world, final short id, final byte data, final int x, final int y, final int z, final com.intellectualcrafters.jnbt.CompoundTag tag) { - // final LocalWorld bukkitWorld = BukkitUtil.getLocalWorld(world); - // I need to somehow convert our CompoundTag to WorldEdit's - // final BaseBlock block = new BaseBlock(5, 5, (CompoundTag) tag); // final Vector vector = new Vector(x, y, z); // try { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/CDL.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/CDL.java index 7e2f3f847..9514eea56 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/CDL.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/CDL.java @@ -18,7 +18,6 @@ package com.intellectualcrafters.json; * @version 2014-05-03 */ public class CDL { - /** * Get the next value. The value can be wrapped in quotes. The value can be empty. * @@ -42,7 +41,7 @@ public class CDL { case '\'': q = c; sb = new StringBuffer(); - for (; ; ) { + for (;;) { c = x.next(); if (c == q) { break; @@ -61,7 +60,7 @@ public class CDL { return x.nextTo(','); } } - + /** * Produce a JSONArray of strings from a row of comma delimited values. * @@ -73,14 +72,14 @@ public class CDL { */ public static JSONArray rowToJSONArray(final JSONTokener x) throws JSONException { final JSONArray ja = new JSONArray(); - for (; ; ) { + for (;;) { final String value = getValue(x); char c = x.next(); if ((value == null) || ((ja.length() == 0) && (value.length() == 0) && (c != ','))) { return null; } ja.put(value); - for (; ; ) { + for (;;) { if (c == ',') { break; } @@ -94,7 +93,7 @@ public class CDL { } } } - + /** * Produce a JSONObject from a row of comma delimited text, using a parallel JSONArray of strings to provides the * names of the elements. @@ -111,7 +110,7 @@ public class CDL { final JSONArray ja = rowToJSONArray(x); return ja != null ? ja.toJSONObject(names) : null; } - + /** * Produce a comma delimited text row from a JSONArray. Values containing the comma character will be quoted. * Troublesome characters may be removed. @@ -147,7 +146,7 @@ public class CDL { sb.append('\n'); return sb.toString(); } - + /** * Produce a JSONArray of JSONObjects from a comma delimited text string, using the first row as a source of names. * @@ -160,7 +159,7 @@ public class CDL { public static JSONArray toJSONArray(final String string) throws JSONException { return toJSONArray(new JSONTokener(string)); } - + /** * Produce a JSONArray of JSONObjects from a comma delimited text string, using the first row as a source of names. * @@ -173,7 +172,7 @@ public class CDL { public static JSONArray toJSONArray(final JSONTokener x) throws JSONException { return toJSONArray(rowToJSONArray(x), x); } - + /** * Produce a JSONArray of JSONObjects from a comma delimited text string using a supplied JSONArray as the source of * element names. @@ -188,7 +187,7 @@ public class CDL { public static JSONArray toJSONArray(final JSONArray names, final String string) throws JSONException { return toJSONArray(names, new JSONTokener(string)); } - + /** * Produce a JSONArray of JSONObjects from a comma delimited text string using a supplied JSONArray as the source of * element names. @@ -205,7 +204,7 @@ public class CDL { return null; } final JSONArray ja = new JSONArray(); - for (; ; ) { + for (;;) { final JSONObject jo = rowToJSONObject(names, x); if (jo == null) { break; @@ -217,7 +216,7 @@ public class CDL { } return ja; } - + /** * Produce a comma delimited text from a JSONArray of JSONObjects. The first row will be a list of names obtained by * inspecting the first JSONObject. @@ -238,7 +237,7 @@ public class CDL { } return null; } - + /** * Produce a comma delimited text from a JSONArray of JSONObjects using a provided list of names. The list of names * is not included in the output. diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/Cookie.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/Cookie.java index b5efcbd2d..ee4def328 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/Cookie.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/Cookie.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.json; /** @@ -29,7 +28,6 @@ package com.intellectualcrafters.json; * @version 2014-05-03 */ public class Cookie { - /** * Produce a copy of a string in which the characters '+', '%', '=', ';' and control characters are replaced with * "%hh". This is a gentle form of URL encoding, attempting to cause as little distortion to the string as possible. @@ -58,7 +56,7 @@ public class Cookie { } return sb.toString(); } - + /** * Convert a cookie specification string into a JSONObject. The string will contain a name value pair separated by * '='. The name and the value will be unescaped, possibly converting '+' and '%' sequences. The cookie properties @@ -98,7 +96,7 @@ public class Cookie { } return jo; } - + /** * Convert a JSONObject into a cookie specification string. The JSONObject must contain "name" and "value" members. * If the JSONObject contains "expires", "domain", "path", or "secure" members, they will be appended to the cookie @@ -112,7 +110,6 @@ public class Cookie { */ public static String toString(final JSONObject jo) throws JSONException { final StringBuilder sb = new StringBuilder(); - sb.append(escape(jo.getString("name"))); sb.append("="); sb.append(escape(jo.getString("value"))); @@ -133,7 +130,7 @@ public class Cookie { } return sb.toString(); } - + /** * Convert %hh sequences to single characters, and convert plus to space. * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/CookieList.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/CookieList.java index 99437329f..01eba0b85 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/CookieList.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/CookieList.java @@ -9,7 +9,6 @@ import java.util.Iterator; * @version 2014-05-03 */ public class CookieList { - /** * Convert a cookie list into a JSONObject. A cookie list is a sequence of name/value pairs. The names are separated * from the values by '='. The pairs are separated by ';'. The names and the values will be unescaped, possibly @@ -35,7 +34,7 @@ public class CookieList { } return jo; } - + /** * Convert a JSONObject into a cookie list. A cookie list is a sequence of name/value pairs. The names are separated * from the values by '='. The pairs are separated by ';'. The characters '%', '+', '=', and ';' in the names and diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTP.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTP.java index 786fbf38e..8bc44d340 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTP.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTP.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.json; import java.util.Iterator; @@ -30,12 +29,11 @@ import java.util.Iterator; * @version 2014-05-03 */ public class HTTP { - /** * Carriage return/line feed. */ public static final String CRLF = "\r\n"; - + /** * Convert an HTTP header string into a JSONObject. It can be a request header or a response header. A request * header will contain @@ -93,28 +91,20 @@ public class HTTP { final JSONObject jo = new JSONObject(); final HTTPTokener x = new HTTPTokener(string); String token; - token = x.nextToken(); if (token.toUpperCase().startsWith("HTTP")) { - // Response - jo.put("HTTP-Version", token); jo.put("Status-Code", x.nextToken()); jo.put("Reason-Phrase", x.nextTo('\0')); x.next(); - } else { - // Request - jo.put("Method", token); jo.put("Request-URI", x.nextToken()); jo.put("HTTP-Version", x.nextToken()); } - // Fields - while (x.more()) { final String name = x.nextTo(':'); x.next(':'); @@ -123,7 +113,7 @@ public class HTTP { } return jo; } - + /** * Convert a JSONObject into an HTTP header. A request header must contain *

diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTPTokener.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTPTokener.java index 09cc1af60..5a3fb1e56 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTPTokener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/HTTPTokener.java @@ -7,7 +7,6 @@ package com.intellectualcrafters.json; * @version 2014-05-03 */ public class HTTPTokener extends JSONTokener { - /** * Construct an HTTPTokener from a string. * @@ -16,7 +15,7 @@ public class HTTPTokener extends JSONTokener { public HTTPTokener(final String string) { super(string); } - + /** * Get the next token or string. This is used in parsing HTTP headers. * @@ -33,7 +32,7 @@ public class HTTPTokener extends JSONTokener { } while (Character.isWhitespace(c)); if ((c == '"') || (c == '\'')) { q = c; - for (; ; ) { + for (;;) { c = next(); if (c < ' ') { throw syntaxError("Unterminated string."); @@ -44,7 +43,7 @@ public class HTTPTokener extends JSONTokener { sb.append(c); } } - for (; ; ) { + for (;;) { if ((c == 0) || Character.isWhitespace(c)) { return sb.toString(); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONArray.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONArray.java index d82e9c6a8..4725eec68 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONArray.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONArray.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.json; import java.io.IOException; @@ -58,19 +57,18 @@ import java.util.Map; * @version 2014-05-03 */ public class JSONArray { - /** * The arrayList where the JSONArray's properties are kept. */ private final ArrayList myArrayList; - + /** * Construct an empty JSONArray. */ public JSONArray() { this.myArrayList = new ArrayList(); } - + /** * Construct a JSONArray from a JSONTokener. * @@ -85,7 +83,7 @@ public class JSONArray { } if (x.nextClean() != ']') { x.back(); - for (; ; ) { + for (;;) { if (x.nextClean() == ',') { x.back(); this.myArrayList.add(JSONObject.NULL); @@ -108,7 +106,7 @@ public class JSONArray { } } } - + /** * Construct a JSONArray from a source JSON text. * @@ -120,7 +118,7 @@ public class JSONArray { public JSONArray(final String source) throws JSONException { this(new JSONTokener(source)); } - + /** * Construct a JSONArray from a Collection. * @@ -134,7 +132,7 @@ public class JSONArray { } } } - + /** * Construct a JSONArray from an array * @@ -151,7 +149,7 @@ public class JSONArray { throw new JSONException("JSONArray initial value should be a string or collection or array."); } } - + /** * Get the object value associated with an index. * @@ -168,7 +166,7 @@ public class JSONArray { } return object; } - + /** * Get the boolean value associated with an index. The string values "true" and "false" are converted to boolean. * @@ -187,7 +185,7 @@ public class JSONArray { } throw new JSONException("JSONArray[" + index + "] is not a boolean."); } - + /** * Get the double value associated with an index. * @@ -205,7 +203,7 @@ public class JSONArray { throw new JSONException("JSONArray[" + index + "] is not a number."); } } - + /** * Get the int value associated with an index. * @@ -223,7 +221,7 @@ public class JSONArray { throw new JSONException("JSONArray[" + index + "] is not a number."); } } - + /** * Get the JSONArray associated with an index. * @@ -240,7 +238,7 @@ public class JSONArray { } throw new JSONException("JSONArray[" + index + "] is not a JSONArray."); } - + /** * Get the JSONObject associated with an index. * @@ -257,7 +255,7 @@ public class JSONArray { } throw new JSONException("JSONArray[" + index + "] is not a JSONObject."); } - + /** * Get the long value associated with an index. * @@ -275,7 +273,7 @@ public class JSONArray { throw new JSONException("JSONArray[" + index + "] is not a number."); } } - + /** * Get the string associated with an index. * @@ -292,7 +290,7 @@ public class JSONArray { } throw new JSONException("JSONArray[" + index + "] not a string."); } - + /** * Determine if the value is null. * @@ -303,7 +301,7 @@ public class JSONArray { public boolean isNull(final int index) { return JSONObject.NULL.equals(this.opt(index)); } - + /** * Make a string from the contents of this JSONArray. The separator string is inserted between each * element. Warning: This method assumes that the data structure is acyclical. @@ -317,7 +315,6 @@ public class JSONArray { public String join(final String separator) throws JSONException { final int len = this.length(); final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < len; i += 1) { if (i > 0) { sb.append(separator); @@ -326,7 +323,7 @@ public class JSONArray { } return sb.toString(); } - + /** * Get the number of elements in the JSONArray, included nulls. * @@ -335,7 +332,7 @@ public class JSONArray { public int length() { return this.myArrayList.size(); } - + /** * Get the optional object value associated with an index. * @@ -346,7 +343,7 @@ public class JSONArray { public Object opt(final int index) { return ((index < 0) || (index >= this.length())) ? null : this.myArrayList.get(index); } - + /** * Get the optional boolean value associated with an index. It returns false if there is no value at that index, or * if the value is not Boolean.TRUE or the String "true". @@ -358,7 +355,7 @@ public class JSONArray { public boolean optBoolean(final int index) { return this.optBoolean(index, false); } - + /** * Get the optional boolean value associated with an index. It returns the defaultValue if there is no value at that * index or if it is not a Boolean or the String "true" or "false" (case insensitive). @@ -375,7 +372,7 @@ public class JSONArray { return defaultValue; } } - + /** * Get the optional double value associated with an index. NaN is returned if there is no value for the index, or if * the value is not a number and cannot be converted to a number. @@ -387,7 +384,7 @@ public class JSONArray { public double optDouble(final int index) { return this.optDouble(index, Double.NaN); } - + /** * Get the optional double value associated with an index. The defaultValue is returned if there is no value for the * index, or if the value is not a number and cannot be converted to a number. @@ -404,7 +401,7 @@ public class JSONArray { return defaultValue; } } - + /** * Get the optional int value associated with an index. Zero is returned if there is no value for the index, or if * the value is not a number and cannot be converted to a number. @@ -416,7 +413,7 @@ public class JSONArray { public int optInt(final int index) { return this.optInt(index, 0); } - + /** * Get the optional int value associated with an index. The defaultValue is returned if there is no value for the * index, or if the value is not a number and cannot be converted to a number. @@ -433,7 +430,7 @@ public class JSONArray { return defaultValue; } } - + /** * Get the optional JSONArray associated with an index. * @@ -445,7 +442,7 @@ public class JSONArray { final Object o = this.opt(index); return o instanceof JSONArray ? (JSONArray) o : null; } - + /** * Get the optional JSONObject associated with an index. Null is returned if the key is not found, or null if the * index has no value, or if the value is not a JSONObject. @@ -458,7 +455,7 @@ public class JSONArray { final Object o = this.opt(index); return o instanceof JSONObject ? (JSONObject) o : null; } - + /** * Get the optional long value associated with an index. Zero is returned if there is no value for the index, or if * the value is not a number and cannot be converted to a number. @@ -470,7 +467,7 @@ public class JSONArray { public long optLong(final int index) { return this.optLong(index, 0); } - + /** * Get the optional long value associated with an index. The defaultValue is returned if there is no value for the * index, or if the value is not a number and cannot be converted to a number. @@ -487,7 +484,7 @@ public class JSONArray { return defaultValue; } } - + /** * Get the optional string value associated with an index. It returns an empty string if there is no value at that * index. If the value is not a string and is not null, then it is coverted to a string. @@ -499,7 +496,7 @@ public class JSONArray { public String optString(final int index) { return this.optString(index, ""); } - + /** * Get the optional string associated with an index. The defaultValue is returned if the key is not found. * @@ -512,7 +509,7 @@ public class JSONArray { final Object object = this.opt(index); return JSONObject.NULL.equals(object) ? defaultValue : object.toString(); } - + /** * Append a boolean value. This increases the array's length by one. * @@ -524,7 +521,7 @@ public class JSONArray { this.put(value ? Boolean.TRUE : Boolean.FALSE); return this; } - + /** * Put a value in the JSONArray, where the value will be a JSONArray which is produced from a Collection. * @@ -536,7 +533,7 @@ public class JSONArray { this.put(new JSONArray(value)); return this; } - + /** * Append a double value. This increases the array's length by one. * @@ -552,7 +549,7 @@ public class JSONArray { this.put(d); return this; } - + /** * Append an int value. This increases the array's length by one. * @@ -564,7 +561,7 @@ public class JSONArray { this.put(new Integer(value)); return this; } - + /** * Append an long value. This increases the array's length by one. * @@ -576,7 +573,7 @@ public class JSONArray { this.put(new Long(value)); return this; } - + /** * Put a value in the JSONArray, where the value will be a JSONObject which is produced from a Map. * @@ -588,7 +585,7 @@ public class JSONArray { this.put(new JSONObject(value)); return this; } - + /** * Append an object value. This increases the array's length by one. * @@ -601,7 +598,7 @@ public class JSONArray { this.myArrayList.add(value); return this; } - + /** * Put or replace a boolean value in the JSONArray. If the index is greater than the length of the JSONArray, then * null elements will be added as necessary to pad it out. @@ -617,7 +614,7 @@ public class JSONArray { this.put(index, value ? Boolean.TRUE : Boolean.FALSE); return this; } - + /** * Put a value in the JSONArray, where the value will be a JSONArray which is produced from a Collection. * @@ -632,7 +629,7 @@ public class JSONArray { this.put(index, new JSONArray(value)); return this; } - + /** * Put or replace a double value. If the index is greater than the length of the JSONArray, then null elements will * be added as necessary to pad it out. @@ -648,7 +645,7 @@ public class JSONArray { this.put(index, new Double(value)); return this; } - + /** * Put or replace an int value. If the index is greater than the length of the JSONArray, then null elements will be * added as necessary to pad it out. @@ -664,7 +661,7 @@ public class JSONArray { this.put(index, new Integer(value)); return this; } - + /** * Put or replace a long value. If the index is greater than the length of the JSONArray, then null elements will be * added as necessary to pad it out. @@ -680,7 +677,7 @@ public class JSONArray { this.put(index, new Long(value)); return this; } - + /** * Put a value in the JSONArray, where the value will be a JSONObject that is produced from a Map. * @@ -695,7 +692,7 @@ public class JSONArray { this.put(index, new JSONObject(value)); return this; } - + /** * Put or replace an object value in the JSONArray. If the index is greater than the length of the JSONArray, then * null elements will be added as necessary to pad it out. @@ -723,7 +720,7 @@ public class JSONArray { } return this; } - + /** * Remove an index and close the hole. * @@ -734,7 +731,7 @@ public class JSONArray { public Object remove(final int index) { return (index >= 0) && (index < this.length()) ? this.myArrayList.remove(index) : null; } - + /** * Determine if two JSONArrays are similar. They must contain similar sequences. * @@ -767,7 +764,7 @@ public class JSONArray { } return true; } - + /** * Produce a JSONObject by combining a JSONArray of names with the values of this JSONArray. * @@ -787,7 +784,7 @@ public class JSONArray { } return jo; } - + /** * Make a JSON text of this JSONArray. For compactness, no unnecessary whitespace is added. If it is not possible to * produce a syntactically correct JSON text then null will be returned instead. This could occur if the array @@ -805,7 +802,7 @@ public class JSONArray { return null; } } - + /** * Make a prettyprinted JSON text of this JSONArray. Warning: This method assumes that the data structure is * acyclical. @@ -824,7 +821,7 @@ public class JSONArray { return this.write(sw, indentFactor, 0).toString(); } } - + /** * Write the contents of the JSONArray as JSON text to a writer. For compactness, no whitespace is added. *

@@ -837,7 +834,7 @@ public class JSONArray { public Writer write(final Writer writer) throws JSONException { return this.write(writer, 0, 0); } - + /** * Write the contents of the JSONArray as JSON text to a writer. For compactness, no whitespace is added. *

@@ -855,12 +852,10 @@ public class JSONArray { boolean commanate = false; final int length = this.length(); writer.write('['); - if (length == 1) { JSONObject.writeValue(writer, this.myArrayList.get(0), indentFactor, indent); } else if (length != 0) { final int newindent = indent + indentFactor; - for (int i = 0; i < length; i += 1) { if (commanate) { writer.write(','); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONException.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONException.java index 090d4e4f7..d15aae6d9 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONException.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONException.java @@ -9,7 +9,7 @@ package com.intellectualcrafters.json; public class JSONException extends RuntimeException { private static final long serialVersionUID = 0; private Throwable cause; - + /** * Constructs a JSONException with an explanatory message. * @@ -18,7 +18,7 @@ public class JSONException extends RuntimeException { public JSONException(final String message) { super(message); } - + /** * Constructs a new JSONException with the specified cause. * @@ -28,7 +28,7 @@ public class JSONException extends RuntimeException { super(cause.getMessage()); this.cause = cause; } - + /** * Returns the cause of this exception or null if the cause is nonexistent or unknown. * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONML.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONML.java index 307ac1bef..8d92ddf10 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONML.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONML.java @@ -10,7 +10,6 @@ import java.util.Iterator; * @version 2014-05-03 */ public class JSONML { - /** * Parse XML values and store them in a JSONArray. * @@ -31,13 +30,11 @@ public class JSONML { JSONObject newjo = null; Object token; String tagName = null; - // Test for and skip past these forms: // // // // - while (true) { if (!x.more()) { throw x.syntaxError("Bad XML"); @@ -47,9 +44,7 @@ public class JSONML { token = x.nextToken(); if (token instanceof Character) { if (token == XML.SLASH) { - // Close tag 0); } } else if (token == XML.QUEST) { - // "); } else { throw x.syntaxError("Misshaped tag"); } - // Open tag < - } else { if (!(token instanceof String)) { throw x.syntaxError("Bad tagName '" + token + "'."); @@ -121,7 +110,7 @@ public class JSONML { } } token = null; - for (; ; ) { + for (;;) { if (token == null) { token = x.nextToken(); } @@ -131,9 +120,7 @@ public class JSONML { if (!(token instanceof String)) { break; } - // attribute = value - attribute = (String) token; if (!arrayForm && ("tagName".equals(attribute) || "childNode".equals(attribute))) { throw x.syntaxError("Reserved attribute."); @@ -153,9 +140,7 @@ public class JSONML { if (arrayForm && (newjo.length() > 0)) { newja.put(newjo); } - // Empty tag <.../> - if (token == XML.SLASH) { if (x.nextToken() != XML.GT) { throw x.syntaxError("Misshaped tag"); @@ -167,9 +152,7 @@ public class JSONML { return newjo; } } - // Content, between <...> and - } else { if (token != XML.GT) { throw x.syntaxError("Misshaped tag"); @@ -200,7 +183,7 @@ public class JSONML { } } } - + /** * Convert a well-formed (but not necessarily valid) XML string into a JSONArray using the JsonML transform. Each * XML tag is represented as a JSONArray in which the first element is the tag name. If the tag has attributes, then @@ -216,7 +199,7 @@ public class JSONML { public static JSONArray toJSONArray(final String string) throws JSONException { return toJSONArray(new XMLTokener(string)); } - + /** * Convert a well-formed (but not necessarily valid) XML string into a JSONArray using the JsonML transform. Each * XML tag is represented as a JSONArray in which the first element is the tag name. If the tag has attributes, then @@ -233,7 +216,7 @@ public class JSONML { public static JSONArray toJSONArray(final XMLTokener x) throws JSONException { return (JSONArray) parse(x, true, null); } - + /** * Convert a well-formed (but not necessarily valid) XML string into a JSONObject using the JsonML transform. Each * XML tag is represented as a JSONObject with a "tagName" property. If the tag has attributes, then the attributes @@ -251,7 +234,7 @@ public class JSONML { public static JSONObject toJSONObject(final XMLTokener x) throws JSONException { return (JSONObject) parse(x, false, null); } - + /** * Convert a well-formed (but not necessarily valid) XML string into a JSONObject using the JsonML transform. Each * XML tag is represented as a JSONObject with a "tagName" property. If the tag has attributes, then the attributes @@ -269,7 +252,7 @@ public class JSONML { public static JSONObject toJSONObject(final String string) throws JSONException { return toJSONObject(new XMLTokener(string)); } - + /** * Reverse the JSONML transformation, making an XML text from a JSONArray. * @@ -289,22 +272,17 @@ public class JSONML { final StringBuilder sb = new StringBuilder(); String tagName; String value; - // Emit = length) { sb.append('/'); @@ -351,7 +327,7 @@ public class JSONML { } return sb.toString(); } - + /** * Reverse the JSONML transformation, making an XML text from a JSONObject. The JSONObject must contain a "tagName" * property. If it has children, then it must have a "childNodes" property containing an array of objects. The other @@ -373,9 +349,7 @@ public class JSONML { Object object; String tagName; String value; - // Emit map; - + /** * Construct an empty JSONObject. */ public JSONObject() { this.map = new HashMap(); } - + /** * Construct a JSONObject from a subset of another JSONObject. An array of strings is used to identify the keys that * should be copied. Missing keys are ignored. @@ -91,7 +91,7 @@ public class JSONObject { } } } - + /** * Construct a JSONObject from a JSONTokener. * @@ -103,11 +103,10 @@ public class JSONObject { this(); char c; String key; - if (x.nextClean() != '{') { throw x.syntaxError("A JSONObject text must begin with '{'"); } - for (; ; ) { + for (;;) { c = x.nextClean(); switch (c) { case 0: @@ -118,17 +117,13 @@ public class JSONObject { x.back(); key = x.nextValue().toString(); } - // The key is followed by ':'. - c = x.nextClean(); if (c != ':') { throw x.syntaxError("Expected a ':' after a key"); } this.putOnce(key, x.nextValue()); - // Pairs are separated by ','. - switch (x.nextClean()) { case ';': case ',': @@ -144,7 +139,7 @@ public class JSONObject { } } } - + /** * Construct a JSONObject from a Map. * @@ -163,7 +158,7 @@ public class JSONObject { } } } - + /** * Construct a JSONObject from an Object using bean getters. It reflects on all of the public methods of the object. * For each of the methods with no parameters and a name starting with "get" or "is" @@ -183,7 +178,7 @@ public class JSONObject { this(); this.populateMap(bean); } - + /** * Construct a JSONObject from an Object, using reflection to find the public members. The resulting JSONObject's * keys will be the strings from the names array, and the values will be the field values associated with those keys @@ -202,7 +197,7 @@ public class JSONObject { } } } - + /** * Construct a JSONObject from a source JSON text string. This is the most commonly used JSONObject constructor. * @@ -214,7 +209,7 @@ public class JSONObject { public JSONObject(final String source) throws JSONException { this(new JSONTokener(source)); } - + /** * Construct a JSONObject from a ResourceBundle. * @@ -226,20 +221,16 @@ public class JSONObject { public JSONObject(final String baseName, final Locale locale) throws JSONException { this(); final ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, Thread.currentThread().getContextClassLoader()); - // Iterate through the keys in the bundle. - final Enumeration keys = bundle.getKeys(); while (keys.hasMoreElements()) { final Object key = keys.nextElement(); if (key != null) { - // Go through the path, ensuring that there is a nested // JSONObject for each // segment except the last. Add the value using the last // segment's name into // the deepest nested JSONObject. - final String[] path = ((String) key).split("\\."); final int last = path.length - 1; JSONObject target = this; @@ -256,7 +247,7 @@ public class JSONObject { } } } - + /** * Produce a string from a double. The string "null" will be returned if the number is not finite. * @@ -268,9 +259,7 @@ public class JSONObject { if (Double.isInfinite(d) || Double.isNaN(d)) { return "null"; } - // Shave off trailing zeros and decimal point, if possible. - String string = Double.toString(d); if ((string.indexOf('.') > 0) && (string.indexOf('e') < 0) && (string.indexOf('E') < 0)) { while (string.endsWith("0")) { @@ -282,7 +271,7 @@ public class JSONObject { } return string; } - + /** * Get an array of field names from a JSONObject. * @@ -302,7 +291,7 @@ public class JSONObject { } return names; } - + /** * Get an array of field names from an Object. * @@ -324,7 +313,7 @@ public class JSONObject { } return names; } - + /** * Produce a string from a Number. * @@ -339,9 +328,7 @@ public class JSONObject { throw new JSONException("Null pointer"); } testValidity(number); - // Shave off trailing zeros and decimal point, if possible. - String string = number.toString(); if ((string.indexOf('.') > 0) && (string.indexOf('e') < 0) && (string.indexOf('E') < 0)) { while (string.endsWith("0")) { @@ -353,7 +340,7 @@ public class JSONObject { } return string; } - + /** * Produce a string in double quotes with backslash sequences in all the right places. A backslash will be inserted * within = '0') && (b <= '9')) || (b == '-')) { try { @@ -483,7 +466,7 @@ public class JSONObject { } return string; } - + /** * Throw an exception if the object is a NaN or infinite number. * @@ -504,7 +487,7 @@ public class JSONObject { } } } - + /** * Make a JSON text of an Object value. If the object has an value.toJSONString() method, then that method will be * used to produce the JSON text. The method is required to produce a strictly conforming text. If the object does @@ -557,7 +540,7 @@ public class JSONObject { } return quote(value.toString()); } - + /** * Wrap an object, if necessary. If the object is null, return the NULL object. If it is an array or collection, * wrap it in a JSONArray. If it is a map, wrap it in a JSONObject. If it is a standard property (Double, String, et @@ -576,7 +559,6 @@ public class JSONObject { if ((object instanceof JSONObject) || (object instanceof JSONArray) || NULL.equals(object) || (object instanceof JSONString) || (object instanceof Byte) || (object instanceof Character) || (object instanceof Short) || (object instanceof Integer) || (object instanceof Long) || (object instanceof Boolean) || (object instanceof Float) || (object instanceof Double) || (object instanceof String)) { return object; } - if (object instanceof Collection) { return new JSONArray((Collection) object); } @@ -596,7 +578,7 @@ public class JSONObject { return null; } } - + static final Writer writeValue(final Writer writer, final Object value, final int indentFactor, final int indent) throws JSONException, IOException { if ((value == null) || value.equals(null)) { writer.write("null"); @@ -627,13 +609,13 @@ public class JSONObject { } return writer; } - + static final void indent(final Writer writer, final int indent) throws IOException { for (int i = 0; i < indent; i += 1) { writer.write(' '); } } - + /** * Accumulate values under a key. It is similar to the put method except that if there is already an object stored * under the key then a JSONArray is stored under the key to hold all of the accumulated values. If there is already @@ -661,7 +643,7 @@ public class JSONObject { } return this; } - + /** * Append values to the array under a key. If the key does not exist in the JSONObject, then the key is put in the * JSONObject with its value being a JSONArray containing the value parameter. If the key was already associated @@ -686,7 +668,7 @@ public class JSONObject { } return this; } - + /** * Get the value object associated with a key. * @@ -706,7 +688,7 @@ public class JSONObject { } return object; } - + /** * Get the boolean value associated with a key. * @@ -725,7 +707,7 @@ public class JSONObject { } throw new JSONException("JSONObject[" + quote(key) + "] is not a Boolean."); } - + /** * Get the double value associated with a key. * @@ -744,7 +726,7 @@ public class JSONObject { throw new JSONException("JSONObject[" + quote(key) + "] is not a number."); } } - + /** * Get the int value associated with a key. * @@ -762,7 +744,7 @@ public class JSONObject { throw new JSONException("JSONObject[" + quote(key) + "] is not an int."); } } - + /** * Get the JSONArray value associated with a key. * @@ -779,7 +761,7 @@ public class JSONObject { } throw new JSONException("JSONObject[" + quote(key) + "] is not a JSONArray."); } - + /** * Get the JSONObject value associated with a key. * @@ -796,7 +778,7 @@ public class JSONObject { } throw new JSONException("JSONObject[" + quote(key) + "] is not a JSONObject."); } - + /** * Get the long value associated with a key. * @@ -814,7 +796,7 @@ public class JSONObject { throw new JSONException("JSONObject[" + quote(key) + "] is not a long."); } } - + /** * Get the string associated with a key. * @@ -831,7 +813,7 @@ public class JSONObject { } throw new JSONException("JSONObject[" + quote(key) + "] not a string."); } - + /** * Determine if the JSONObject contains a specific key. * @@ -842,7 +824,7 @@ public class JSONObject { public boolean has(final String key) { return this.map.containsKey(key); } - + /** * Increment a property of a JSONObject. If there is no such property, create one with a value of 1. If there is * such a property, and if it is an Integer, Long, Double, or Float, then add one to it. @@ -871,7 +853,7 @@ public class JSONObject { } return this; } - + /** * Determine if the value associated with the key is null or if there is no value. * @@ -882,7 +864,7 @@ public class JSONObject { public boolean isNull(final String key) { return JSONObject.NULL.equals(this.opt(key)); } - + /** * Get an enumeration of the keys of the JSONObject. * @@ -891,7 +873,7 @@ public class JSONObject { public Iterator keys() { return this.keySet().iterator(); } - + /** * Get a set of keys of the JSONObject. * @@ -900,7 +882,7 @@ public class JSONObject { public Set keySet() { return this.map.keySet(); } - + /** * Get the number of keys stored in the JSONObject. * @@ -909,7 +891,7 @@ public class JSONObject { public int length() { return this.map.size(); } - + /** * Produce a JSONArray containing the names of the elements of this JSONObject. * @@ -923,7 +905,7 @@ public class JSONObject { } return ja.length() == 0 ? null : ja; } - + /** * Get an optional value associated with a key. * @@ -934,7 +916,7 @@ public class JSONObject { public Object opt(final String key) { return key == null ? null : this.map.get(key); } - + /** * Get an optional boolean associated with a key. It returns false if there is no such key, or if the value is not * Boolean.TRUE or the String "true". @@ -946,7 +928,7 @@ public class JSONObject { public boolean optBoolean(final String key) { return this.optBoolean(key, false); } - + /** * Get an optional boolean associated with a key. It returns the defaultValue if there is no such key, or if it is * not a Boolean or the String "true" or "false" (case insensitive). @@ -963,7 +945,7 @@ public class JSONObject { return defaultValue; } } - + /** * Get an optional double associated with a key, or NaN if there is no such key or if its value is not a number. If * the value is a string, an attempt will be made to evaluate it as a number. @@ -975,7 +957,7 @@ public class JSONObject { public double optDouble(final String key) { return this.optDouble(key, Double.NaN); } - + /** * Get an optional double associated with a key, or the defaultValue if there is no such key or if its value is not * a number. If the value is a string, an attempt will be made to evaluate it as a number. @@ -992,7 +974,7 @@ public class JSONObject { return defaultValue; } } - + /** * Get an optional int value associated with a key, or zero if there is no such key or if the value is not a number. * If the value is a string, an attempt will be made to evaluate it as a number. @@ -1004,7 +986,7 @@ public class JSONObject { public int optInt(final String key) { return this.optInt(key, 0); } - + /** * Get an optional int value associated with a key, or the default if there is no such key or if the value is not a * number. If the value is a string, an attempt will be made to evaluate it as a number. @@ -1021,7 +1003,7 @@ public class JSONObject { return defaultValue; } } - + /** * Get an optional JSONArray associated with a key. It returns null if there is no such key, or if its value is not * a JSONArray. @@ -1034,7 +1016,7 @@ public class JSONObject { final Object o = this.opt(key); return o instanceof JSONArray ? (JSONArray) o : null; } - + /** * Get an optional JSONObject associated with a key. It returns null if there is no such key, or if its value is not * a JSONObject. @@ -1047,7 +1029,7 @@ public class JSONObject { final Object object = this.opt(key); return object instanceof JSONObject ? (JSONObject) object : null; } - + /** * Get an optional long value associated with a key, or zero if there is no such key or if the value is not a * number. If the value is a string, an attempt will be made to evaluate it as a number. @@ -1059,7 +1041,7 @@ public class JSONObject { public long optLong(final String key) { return this.optLong(key, 0); } - + /** * Get an optional long value associated with a key, or the default if there is no such key or if the value is not a * number. If the value is a string, an attempt will be made to evaluate it as a number. @@ -1076,7 +1058,7 @@ public class JSONObject { return defaultValue; } } - + /** * Get an optional string associated with a key. It returns an empty string if there is no such key. If the value is * not a string and is not null, then it is converted to a string. @@ -1088,7 +1070,7 @@ public class JSONObject { public String optString(final String key) { return this.optString(key, ""); } - + /** * Get an optional string associated with a key. It returns the defaultValue if there is no such key. * @@ -1101,14 +1083,11 @@ public class JSONObject { final Object object = this.opt(key); return NULL.equals(object) ? defaultValue : object.toString(); } - + private void populateMap(final Object bean) { final Class klass = bean.getClass(); - // If klass is a System class then set includeSuperClass to false. - final boolean includeSuperClass = klass.getClassLoader() != null; - final Method[] methods = includeSuperClass ? klass.getMethods() : klass.getDeclaredMethods(); for (final Method method : methods) { try { @@ -1130,7 +1109,6 @@ public class JSONObject { } else if (!Character.isUpperCase(key.charAt(1))) { key = key.substring(0, 1).toLowerCase() + key.substring(1); } - final Object result = method.invoke(bean, (Object[]) null); if (result != null) { this.map.put(key, wrap(result)); @@ -1141,7 +1119,7 @@ public class JSONObject { } } } - + /** * Put a key/boolean pair in the JSONObject. * @@ -1156,7 +1134,7 @@ public class JSONObject { this.put(key, value ? Boolean.TRUE : Boolean.FALSE); return this; } - + /** * Put a key/value pair in the JSONObject, where the value will be a JSONArray which is produced from a Collection. * @@ -1171,7 +1149,7 @@ public class JSONObject { this.put(key, new JSONArray(value)); return this; } - + /** * Put a key/double pair in the JSONObject. * @@ -1186,7 +1164,7 @@ public class JSONObject { this.put(key, new Double(value)); return this; } - + /** * Put a key/int pair in the JSONObject. * @@ -1201,7 +1179,7 @@ public class JSONObject { this.put(key, new Integer(value)); return this; } - + /** * Put a key/long pair in the JSONObject. * @@ -1216,7 +1194,7 @@ public class JSONObject { this.put(key, new Long(value)); return this; } - + /** * Put a key/value pair in the JSONObject, where the value will be a JSONObject which is produced from a Map. * @@ -1231,7 +1209,7 @@ public class JSONObject { this.put(key, new JSONObject(value)); return this; } - + /** * Put a key/value pair in the JSONObject. If the value is null, then the key will be removed from the JSONObject if * it is present. @@ -1256,7 +1234,7 @@ public class JSONObject { } return this; } - + /** * Put a key/value pair in the JSONObject, but only if the key and the value are both non-null, and only if there is * not already a member with that name. @@ -1277,7 +1255,7 @@ public class JSONObject { } return this; } - + /** * Put a key/value pair in the JSONObject, but only if the key and the value are both non-null. * @@ -1295,7 +1273,7 @@ public class JSONObject { } return this; } - + /** * Remove a name and its value, if present. * @@ -1306,7 +1284,7 @@ public class JSONObject { public Object remove(final String key) { return this.map.remove(key); } - + /** * Determine if two JSONObjects are similar. They must contain the same set of names which must be associated with * similar values. @@ -1344,7 +1322,7 @@ public class JSONObject { return false; } } - + /** * Produce a JSONArray containing the values of the members of this JSONObject. * @@ -1365,7 +1343,7 @@ public class JSONObject { } return ja; } - + /** * Make a JSON text of this JSONObject. For compactness, no whitespace is added. If this would not result in a * syntactically correct JSON text, then null will be returned instead. @@ -1384,7 +1362,7 @@ public class JSONObject { return null; } } - + /** * Make a prettyprinted JSON text of this JSONObject. *

@@ -1404,7 +1382,7 @@ public class JSONObject { return this.write(w, indentFactor, 0).toString(); } } - + /** * Write the contents of the JSONObject as JSON text to a writer. For compactness, no whitespace is added. *

@@ -1417,7 +1395,7 @@ public class JSONObject { public Writer write(final Writer writer) throws JSONException { return this.write(writer, 0, 0); } - + /** * Write the contents of the JSONObject as JSON text to a writer. For compactness, no whitespace is added. *

@@ -1433,7 +1411,6 @@ public class JSONObject { final int length = this.length(); final Iterator keys = this.keys(); writer.write('{'); - if (length == 1) { final Object key = keys.next(); writer.write(quote(key.toString())); @@ -1472,13 +1449,12 @@ public class JSONObject { throw new JSONException(exception); } } - + /** * JSONObject.NULL is equivalent to the value that JavaScript calls null, whilst Java's null is equivalent to the * value that JavaScript calls undefined. */ private static final class Null { - /** * There is only intended to be a single instance of the NULL object, so the clone method returns itself. * @@ -1492,7 +1468,7 @@ public class JSONObject { return this; } } - + /** * A Null object is equal to the null value and to itself. * @@ -1504,7 +1480,7 @@ public class JSONObject { public boolean equals(final Object object) { return (object == null) || (object == this); } - + /** * Get the "null" string value. * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONStringer.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONStringer.java index 053001408..d29ae0e46 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONStringer.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONStringer.java @@ -40,7 +40,7 @@ public class JSONStringer extends JSONWriter { public JSONStringer() { super(new StringWriter()); } - + /** * Return the JSON text. This method is used to obtain the product of the JSONStringer instance. It will return * null if there was a problem in the construction of the JSON text (such as the calls to diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONTokener.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONTokener.java index 7c465319a..62f0fa135 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONTokener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONTokener.java @@ -15,7 +15,6 @@ import java.io.StringReader; * @version 2014-05-03 */ public class JSONTokener { - private final Reader reader; private long character; private boolean eof; @@ -23,7 +22,7 @@ public class JSONTokener { private long line; private char previous; private boolean usePrevious; - + /** * Construct a JSONTokener from a Reader. * @@ -38,7 +37,7 @@ public class JSONTokener { this.character = 1; this.line = 1; } - + /** * Construct a JSONTokener from an InputStream. * @@ -47,7 +46,7 @@ public class JSONTokener { public JSONTokener(final InputStream inputStream) throws JSONException { this(new InputStreamReader(inputStream)); } - + /** * Construct a JSONTokener from a string. * @@ -56,7 +55,7 @@ public class JSONTokener { public JSONTokener(final String s) { this(new StringReader(s)); } - + /** * Get the hex value of a character (base16). * @@ -76,7 +75,7 @@ public class JSONTokener { } return -1; } - + /** * Back up one character. This provides a sort of lookahead capability, so that you can test for a digit or letter * before attempting to parse the next number or identifier. @@ -90,11 +89,11 @@ public class JSONTokener { this.usePrevious = true; this.eof = false; } - + public boolean end() { return this.eof && !this.usePrevious; } - + /** * Determine if the source string still contains characters that next() can consume. * @@ -108,7 +107,7 @@ public class JSONTokener { this.back(); return true; } - + /** * Get the next character in the source string. * @@ -125,7 +124,6 @@ public class JSONTokener { } catch (final IOException exception) { throw new JSONException(exception); } - if (c <= 0) { // End of stream this.eof = true; c = 0; @@ -144,7 +142,7 @@ public class JSONTokener { this.previous = (char) c; return this.previous; } - + /** * Consume the next character, and check that it matches a specified character. * @@ -161,7 +159,7 @@ public class JSONTokener { } return n; } - + /** * Get the next n characters. * @@ -175,10 +173,8 @@ public class JSONTokener { if (n == 0) { return ""; } - final char[] chars = new char[n]; int pos = 0; - while (pos < n) { chars[pos] = this.next(); if (this.end()) { @@ -188,7 +184,7 @@ public class JSONTokener { } return new String(chars); } - + /** * Get the next char in the string, skipping whitespace. * @@ -197,14 +193,14 @@ public class JSONTokener { * @throws JSONException */ public char nextClean() throws JSONException { - for (; ; ) { + for (;;) { final char c = this.next(); if ((c == 0) || (c > ' ')) { return c; } } } - + /** * Return the characters up to the next close quote character. Backslash processing is done. The formal JSON format * does not allow strings in single quotes, but an implementation is allowed to accept them. @@ -219,7 +215,7 @@ public class JSONTokener { public String nextString(final char quote) throws JSONException { char c; final StringBuilder sb = new StringBuilder(); - for (; ; ) { + for (;;) { c = this.next(); switch (c) { case 0: @@ -265,7 +261,7 @@ public class JSONTokener { } } } - + /** * Get the text up but not including the specified character or the end of line, whichever comes first. * @@ -275,7 +271,7 @@ public class JSONTokener { */ public String nextTo(final char delimiter) throws JSONException { final StringBuilder sb = new StringBuilder(); - for (; ; ) { + for (;;) { final char c = this.next(); if ((c == delimiter) || (c == 0) || (c == '\n') || (c == '\r')) { if (c != 0) { @@ -286,7 +282,7 @@ public class JSONTokener { sb.append(c); } } - + /** * Get the text up but not including one of the specified delimiter characters or the end of line, whichever comes * first. @@ -298,7 +294,7 @@ public class JSONTokener { public String nextTo(final String delimiters) throws JSONException { char c; final StringBuilder sb = new StringBuilder(); - for (; ; ) { + for (;;) { c = this.next(); if ((delimiters.indexOf(c) >= 0) || (c == 0) || (c == '\n') || (c == '\r')) { if (c != 0) { @@ -309,7 +305,7 @@ public class JSONTokener { sb.append(c); } } - + /** * Get the next value. The value can be a Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the * JSONObject.NULL object. @@ -321,7 +317,6 @@ public class JSONTokener { public Object nextValue() throws JSONException { char c = this.nextClean(); String string; - switch (c) { case '"': case '\'': @@ -333,7 +328,6 @@ public class JSONTokener { this.back(); return new JSONArray(this); } - /* * Handle unquoted text. This could be the values true, false, or * null, or it can be a number. An implementation (such as this one) @@ -341,21 +335,19 @@ public class JSONTokener { * Accumulate characters until we reach the end of the text or a * formatting character. */ - final StringBuilder sb = new StringBuilder(); while ((c >= ' ') && (",:]}/\\\"[{;=#".indexOf(c) < 0)) { sb.append(c); c = this.next(); } this.back(); - string = sb.toString().trim(); if ("".equals(string)) { throw this.syntaxError("Missing value"); } return JSONObject.stringToValue(string); } - + /** * Skip characters until the next character is the requested character. If the requested character is not found, no * characters are skipped. @@ -387,7 +379,7 @@ public class JSONTokener { this.back(); return c; } - + /** * Make a JSONException to signal a syntax error. * @@ -398,7 +390,7 @@ public class JSONTokener { public JSONException syntaxError(final String message) { return new JSONException(message + this.toString()); } - + /** * Make a printable string of this JSONTokener. * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONWriter.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONWriter.java index 7017db3d5..a332af1f8 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONWriter.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/JSONWriter.java @@ -55,7 +55,7 @@ public class JSONWriter { * The stack top index. A value of 0 indicates that the stack is empty. */ private int top; - + /** * Make a fresh JSONWriter. It can be used to build one JSON text. */ @@ -66,7 +66,7 @@ public class JSONWriter { this.top = 0; this.writer = w; } - + /** * Append a value. * @@ -97,7 +97,7 @@ public class JSONWriter { } throw new JSONException("Value out of sequence."); } - + /** * Begin appending a new array. All values until the balancing endArray will be appended to this array. * The endArray method must be called to mark the array's end. @@ -116,7 +116,7 @@ public class JSONWriter { } throw new JSONException("Misplaced array."); } - + /** * End something. * @@ -140,7 +140,7 @@ public class JSONWriter { this.comma = true; return this; } - + /** * End an array. This method most be called to balance calls to array. * @@ -151,7 +151,7 @@ public class JSONWriter { public JSONWriter endArray() throws JSONException { return this.end('a', ']'); } - + /** * End an object. This method most be called to balance calls to object. * @@ -162,7 +162,7 @@ public class JSONWriter { public JSONWriter endObject() throws JSONException { return this.end('k', '}'); } - + /** * Append a key. The key will be associated with the next value. In an object, every value must be preceded by a * key. @@ -195,7 +195,7 @@ public class JSONWriter { } throw new JSONException("Misplaced key."); } - + /** * Begin appending a new object. All keys and values until the balancing endObject will be appended to * this object. The endObject method must be called to mark the object's end. @@ -216,9 +216,8 @@ public class JSONWriter { return this; } throw new JSONException("Misplaced object."); - } - + /** * Pop an array or object scope. * @@ -237,7 +236,7 @@ public class JSONWriter { this.top -= 1; this.mode = this.top == 0 ? 'd' : this.stack[this.top - 1] == null ? 'a' : 'k'; } - + /** * Push an array or object scope. * @@ -253,7 +252,7 @@ public class JSONWriter { this.mode = jo == null ? 'a' : 'k'; this.top += 1; } - + /** * Append either the value true or the value false . * @@ -266,7 +265,7 @@ public class JSONWriter { public JSONWriter value(final boolean b) throws JSONException { return this.append(b ? "true" : "false"); } - + /** * Append a double value. * @@ -279,7 +278,7 @@ public class JSONWriter { public JSONWriter value(final double d) throws JSONException { return this.value(new Double(d)); } - + /** * Append a long value. * @@ -292,7 +291,7 @@ public class JSONWriter { public JSONWriter value(final long l) throws JSONException { return this.append(Long.toString(l)); } - + /** * Append an object value. * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/Kim.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/Kim.java index 332b0083e..03520de0d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/Kim.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/Kim.java @@ -27,7 +27,6 @@ package com.intellectualcrafters.json; * @version 2013-04-18 */ public class Kim { - /** * The number of bytes in the kim. The number of bytes can be as much as three times the number of characters. */ @@ -44,7 +43,7 @@ public class Kim { * The memoization of toString(). */ private String string = null; - + /** * Make a kim from a portion of a byte array. * @@ -53,11 +52,9 @@ public class Kim { * @param thru The index of the last byte plus one. */ public Kim(final byte[] bytes, final int from, final int thru) { - // As the bytes are copied into the new kim, a hashcode is computed // using a // modified Fletcher code. - int sum = 1; int value; this.hashcode = 0; @@ -73,7 +70,7 @@ public class Kim { this.hashcode += sum << 16; } } - + /** * Make a kim from a byte array. * @@ -83,7 +80,7 @@ public class Kim { public Kim(final byte[] bytes, final int length) { this(bytes, 0, length); } - + /** * Make a new kim from a substring of an existing kim. The coordinates are in byte units, not character units. * @@ -94,7 +91,7 @@ public class Kim { public Kim(final Kim kim, final int from, final int thru) { this(kim.bytes, from, thru); } - + /** * Make a kim from a string. * @@ -106,10 +103,8 @@ public class Kim { final int stringLength = string.length(); this.hashcode = 0; this.length = 0; - // First pass: Determine the length of the kim, allowing for the UTF-16 // to UTF-32 conversion, and then the UTF-32 to Kim conversion. - if (stringLength > 0) { for (int i = 0; i < stringLength; i += 1) { final int c = string.charAt(i); @@ -128,11 +123,9 @@ public class Kim { this.length += 3; } } - // Second pass: Allocate a byte array and fill that array with the // conversion // while computing the hashcode. - this.bytes = new byte[this.length]; int at = 0; int b; @@ -180,7 +173,7 @@ public class Kim { this.hashcode += sum << 16; } } - + /** * Returns the number of bytes needed to contain the character in Kim format. * @@ -196,7 +189,7 @@ public class Kim { } return character <= 0x7F ? 1 : character <= 0x3FFF ? 2 : 3; } - + /** * Returns the character at the specified index. The index refers to byte values and ranges from 0 to length - 1. * The index of the next character is at index + Kim.characterSize(kim.characterAt(index)). @@ -227,7 +220,7 @@ public class Kim { } throw new JSONException("Bad character at " + at); } - + /** * Copy the contents of this kim to a byte array. * @@ -240,7 +233,7 @@ public class Kim { System.arraycopy(this.bytes, 0, bytes, at, this.length); return at + this.length; } - + /** * Two kim objects containing exactly the same bytes in the same order are equal to each other. * @@ -262,7 +255,7 @@ public class Kim { } return java.util.Arrays.equals(this.bytes, that.bytes); } - + /** * Get a byte from a kim. * @@ -278,7 +271,7 @@ public class Kim { } return (this.bytes[at]) & 0xFF; } - + /** * Returns a hash code value for the kim. */ @@ -286,7 +279,7 @@ public class Kim { public int hashCode() { return this.hashcode; } - + /** * Produce a UTF-16 String from this kim. The number of codepoints in the string will not be greater than the number * of bytes in the kim, although it could be less. diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/Property.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/Property.java index d846ff117..a177df954 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/Property.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/Property.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.json; import java.util.Enumeration; @@ -52,7 +51,7 @@ public class Property { } return jo; } - + /** * Converts the JSONObject into a property file object. * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/XML.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/XML.java index cd6ce153f..c14748a1c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/XML.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/XML.java @@ -9,52 +9,43 @@ import java.util.Iterator; * @version 2014-05-03 */ public class XML { - /** * The Character '&'. */ public static final Character AMP = '&'; - /** * The Character '''. */ public static final Character APOS = '\''; - /** * The Character '!'. */ public static final Character BANG = '!'; - /** * The Character '='. */ public static final Character EQ = '='; - /** * The Character '>'. */ public static final Character GT = '>'; - /** * The Character '<'. */ public static final Character LT = '<'; - /** * The Character '?'. */ public static final Character QUEST = '?'; - /** * The Character '"'. */ public static final Character QUOT = '"'; - /** * The Character '/'. */ public static final Character SLASH = '/'; - + /** * Replace special characters with XML escapes: *

@@ -96,7 +87,7 @@ public class XML { } return sb.toString(); } - + /** * Throw an exception if the string contains whitespace. Whitespace is not allowed in tagNames and attributes. * @@ -116,7 +107,7 @@ public class XML { } } } - + /** * Scan the content following the named tag, attaching it to the context. * @@ -135,7 +126,6 @@ public class XML { String string; String tagName; Object token; - // Test for and skip past these forms: // // @@ -145,11 +135,8 @@ public class XML { // <> // <= // << - token = x.nextToken(); - // 0); return false; } else if (token == QUEST) { - // "); return false; } else if (token == SLASH) { - // Close tag - } else if (token == SLASH) { if (x.nextToken() != GT) { throw x.syntaxError("Misshaped tag"); @@ -247,11 +223,9 @@ public class XML { context.accumulate(tagName, ""); } return false; - // Content, between <...> and - } else if (token == GT) { - for (; ; ) { + for (;;) { token = x.nextContent(); if (token == null) { if (tagName != null) { @@ -263,9 +237,7 @@ public class XML { if (string.length() > 0) { jsonobject.accumulate("content", XML.stringToValue(string)); } - // Nested element - } else if (token == LT) { if (parse(x, jsonobject, tagName)) { if (jsonobject.length() == 0) { @@ -285,7 +257,7 @@ public class XML { } } } - + /** * Try to convert a string into a number, boolean, or null. If the string can't be converted, return the string. * This is much less ambitious than JSONObject.stringToValue, especially because it does not attempt to convert plus @@ -305,11 +277,9 @@ public class XML { if ("null".equalsIgnoreCase(string)) { return JSONObject.NULL; } - // If it might be a number, try converting it, first as a Long, and then // as a // Double. If that doesn't work, return the string. - try { final char initial = string.charAt(0); if ((initial == '-') || ((initial >= '0') && (initial <= '9'))) { @@ -329,7 +299,7 @@ public class XML { } return string; } - + /** * Convert a well-formed (but not necessarily valid) XML string into a JSONObject. Some information may be lost in * this transformation because JSON is a data format and XML is a document format. XML uses elements, attributes, @@ -352,7 +322,7 @@ public class XML { } return jo; } - + /** * Convert a JSONObject into a well-formed, element-normal XML string. * @@ -365,7 +335,7 @@ public class XML { public static String toString(final Object object) throws JSONException { return toString(object, null); } - + /** * Convert a JSONObject into a well-formed, element-normal XML string. * @@ -387,17 +357,13 @@ public class XML { String string; Object value; if (object instanceof JSONObject) { - // Emit - if (tagName != null) { sb.append('<'); sb.append(tagName); sb.append('>'); } - // Loop thru the keys. - jo = (JSONObject) object; keys = jo.keys(); while (keys.hasNext()) { @@ -407,9 +373,7 @@ public class XML { value = ""; } string = value instanceof String ? (String) value : null; - // Emit content in body - if ("content".equals(key)) { if (value instanceof JSONArray) { ja = (JSONArray) value; @@ -423,9 +387,7 @@ public class XML { } else { sb.append(escape(value.toString())); } - // Emit an array of similar keys - } else if (value instanceof JSONArray) { ja = (JSONArray) value; length = ja.length(); @@ -447,27 +409,21 @@ public class XML { sb.append('<'); sb.append(key); sb.append("/>"); - // Emit a new tag - } else { sb.append(toString(value, key)); } } if (tagName != null) { - // Emit the close tag - sb.append("'); } return sb.toString(); - // XML does not have good support for arrays. If an array appears in // a place // where XML is lacking, synthesize an element. - } else { if (object.getClass().isArray()) { object = new JSONArray(object); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/json/XMLTokener.java b/PlotSquared/src/main/java/com/intellectualcrafters/json/XMLTokener.java index ab1513a72..1431939c7 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/json/XMLTokener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/json/XMLTokener.java @@ -7,12 +7,10 @@ package com.intellectualcrafters.json; * @version 2014-05-03 */ public class XMLTokener extends JSONTokener { - /** * The table of entity values. It initially contains Character values for amp, apos, gt, lt, quot. */ public static final java.util.HashMap entity; - static { entity = new java.util.HashMap(8); entity.put("amp", XML.AMP); @@ -21,7 +19,7 @@ public class XMLTokener extends JSONTokener { entity.put("lt", XML.LT); entity.put("quot", XML.QUOT); } - + /** * Construct an XMLTokener from a string. * @@ -30,7 +28,7 @@ public class XMLTokener extends JSONTokener { public XMLTokener(final String s) { super(s); } - + /** * Get the text in the CDATA block. * @@ -42,7 +40,7 @@ public class XMLTokener extends JSONTokener { char c; int i; final StringBuilder sb = new StringBuilder(); - for (; ; ) { + for (;;) { c = next(); if (end()) { throw syntaxError("Unclosed CDATA"); @@ -55,7 +53,7 @@ public class XMLTokener extends JSONTokener { } } } - + /** * Get the next XML outer token, trimming whitespace. There are two kinds of tokens: the '<' character which begins * a markup tag, and the content text between markup tags. @@ -77,7 +75,7 @@ public class XMLTokener extends JSONTokener { return XML.LT; } sb = new StringBuilder(); - for (; ; ) { + for (;;) { if ((c == '<') || (c == 0)) { back(); return sb.toString().trim(); @@ -90,7 +88,7 @@ public class XMLTokener extends JSONTokener { c = next(); } } - + /** * Return the next entity. These entities are translated to Characters: & ' > < * ". @@ -103,7 +101,7 @@ public class XMLTokener extends JSONTokener { */ public Object nextEntity(final char ampersand) throws JSONException { final StringBuilder sb = new StringBuilder(); - for (; ; ) { + for (;;) { final char c = next(); if (Character.isLetterOrDigit(c) || (c == '#')) { sb.append(Character.toLowerCase(c)); @@ -117,7 +115,7 @@ public class XMLTokener extends JSONTokener { final Object object = entity.get(string); return object != null ? object : ampersand + string + ";"; } - + /** * Returns the next XML meta token. This is used for skipping over and structures. * @@ -150,7 +148,7 @@ public class XMLTokener extends JSONTokener { case '"': case '\'': q = c; - for (; ; ) { + for (;;) { c = next(); if (c == 0) { throw syntaxError("Unterminated string"); @@ -160,7 +158,7 @@ public class XMLTokener extends JSONTokener { } } default: - for (; ; ) { + for (;;) { c = next(); if (Character.isWhitespace(c)) { return Boolean.TRUE; @@ -181,7 +179,7 @@ public class XMLTokener extends JSONTokener { } } } - + /** * Get the next XML Token. These tokens are found inside of angle brackets. It may be one of these characters: * / > = ! ? or it may be a string wrapped in single quotes or double quotes, or it may be a name. @@ -212,14 +210,12 @@ public class XMLTokener extends JSONTokener { return XML.BANG; case '?': return XML.QUEST; - - // Quoted string - + // Quoted string case '"': case '\'': q = c; sb = new StringBuilder(); - for (; ; ) { + for (;;) { c = next(); if (c == 0) { throw syntaxError("Unterminated string"); @@ -234,11 +230,9 @@ public class XMLTokener extends JSONTokener { } } default: - // Name - sb = new StringBuilder(); - for (; ; ) { + for (;;) { sb.append(c); c = next(); if (Character.isWhitespace(c)) { @@ -264,7 +258,7 @@ public class XMLTokener extends JSONTokener { } } } - + /** * Skip characters until past the requested string. If it is not found, we are left at the end of the source with a * result of false. @@ -281,12 +275,10 @@ public class XMLTokener extends JSONTokener { int offset = 0; final int length = to.length(); final char[] circle = new char[length]; - /* * First fill the circle buffer with as many characters as are in the * to string. If we reach an early end, bail. */ - for (i = 0; i < length; i += 1) { c = next(); if (c == 0) { @@ -294,15 +286,11 @@ public class XMLTokener extends JSONTokener { } circle[i] = c; } - /* We will loop, possibly for all of the remaining characters. */ - - for (; ; ) { + for (;;) { j = offset; b = true; - /* Compare the circle buffer with the to string. */ - for (i = 0; i < length; i += 1) { if (circle[j] != to.charAt(i)) { b = false; @@ -313,15 +301,11 @@ public class XMLTokener extends JSONTokener { j -= length; } } - /* If we exit the loop with b intact, then victory is ours. */ - if (b) { return true; } - /* Get the next character. If there isn't one, then defeat is ours. */ - c = next(); if (c == 0) { return false; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java new file mode 100644 index 000000000..1d5b63dea --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/BukkitMain.java @@ -0,0 +1,340 @@ +package com.intellectualcrafters.plot; + +import java.io.File; +import java.util.Arrays; + +import net.milkbowl.vault.economy.Economy; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.command.PluginCommand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.generator.ChunkGenerator; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.java.JavaPlugin; + +import com.intellectualcrafters.plot.commands.BukkitCommand; +import com.intellectualcrafters.plot.commands.Buy; +import com.intellectualcrafters.plot.commands.MainCommand; +import com.intellectualcrafters.plot.commands.WE_Anywhere; +import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.config.Settings; +import com.intellectualcrafters.plot.database.PlotMeConverter; +import com.intellectualcrafters.plot.events.PlotDeleteEvent; +import com.intellectualcrafters.plot.generator.BukkitHybridUtils; +import com.intellectualcrafters.plot.generator.HybridGen; +import com.intellectualcrafters.plot.generator.HybridUtils; +import com.intellectualcrafters.plot.listeners.ForceFieldListener; +import com.intellectualcrafters.plot.listeners.InventoryListener; +import com.intellectualcrafters.plot.listeners.PlayerEvents; +import com.intellectualcrafters.plot.listeners.PlayerEvents_1_8; +import com.intellectualcrafters.plot.listeners.PlotPlusListener; +import com.intellectualcrafters.plot.listeners.WorldEditListener; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ConsoleColors; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.SetupUtils; +import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.BukkitSetupUtils; +import com.intellectualcrafters.plot.util.bukkit.BukkitTaskManager; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.Metrics; +import com.intellectualcrafters.plot.util.bukkit.SendChunk; +import com.intellectualcrafters.plot.util.bukkit.SetBlockFast; +import com.intellectualcrafters.plot.util.bukkit.SetBlockFast_1_8; +import com.intellectualcrafters.plot.util.bukkit.SetBlockManager; +import com.intellectualcrafters.plot.util.bukkit.SetBlockSlow; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; + +public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { + public static BukkitMain THIS = null; + public static PlotSquared MAIN = null; + + @EventHandler + public static void worldLoad(final WorldLoadEvent event) { + UUIDHandler.cacheAll(event.getWorld().getName()); + } + + public static boolean checkVersion(final int major, final int minor, final int minor2) { + try { + final String[] version = Bukkit.getBukkitVersion().split("-")[0].split("\\."); + final int a = Integer.parseInt(version[0]); + final int b = Integer.parseInt(version[1]); + int c = 0; + if (version.length == 3) { + c = Integer.parseInt(version[2]); + } + if ((a > major) || ((a == major) && (b > minor)) || ((a == major) && (b == minor) && (c >= minor2))) { + return true; + } + return false; + } catch (final Exception e) { + return false; + } + } + + @EventHandler + public void PlayerCommand(final PlayerCommandPreprocessEvent event) { + final String message = event.getMessage(); + if (message.toLowerCase().startsWith("/plotme")) { + final Plugin plotme = Bukkit.getPluginManager().getPlugin("PlotMe"); + if (plotme == null) { + final Player player = event.getPlayer(); + if (Settings.USE_PLOTME_ALIAS) { + player.performCommand(message.replace("/plotme", "plots")); + } else { + MainUtil.sendMessage(BukkitUtil.getPlayer(player), C.NOT_USING_PLOTME); + } + event.setCancelled(true); + } + } + } + + @Override + public void onEnable() { + MAIN = new PlotSquared(this); + THIS = this; + if (Settings.METRICS) { + try { + final Metrics metrics = new Metrics(this); + metrics.start(); + log(C.PREFIX.s() + "&6Metrics enabled."); + } catch (final Exception e) { + log(C.PREFIX.s() + "&cFailed to load up metrics."); + } + } else { + log("&dUsing metrics will allow us to improve the plugin, please consider it :)"); + } + getServer().getPluginManager().registerEvents(this, this); + } + + @Override + public void onDisable() { + MAIN.disable(); + MAIN = null; + THIS = null; + } + + @Override + public void log(String message) { + if ((THIS == null) || (Bukkit.getServer().getConsoleSender() == null)) { + System.out.println(ChatColor.stripColor(ConsoleColors.fromString(message))); + } else { + message = ChatColor.translateAlternateColorCodes('&', message); + if (!Settings.CONSOLE_COLOR) { + message = ChatColor.stripColor(message); + } + Bukkit.getServer().getConsoleSender().sendMessage(message); + } + } + + @Override + public void disable() { + onDisable(); + } + + @Override + public String getVersion() { + return this.getDescription().getVersion(); + } + + @Override + public void registerCommands() { + final MainCommand command = new MainCommand(); + final BukkitCommand bcmd = new BukkitCommand(); + final PluginCommand plotCommand = getCommand("plots"); + plotCommand.setExecutor(bcmd); + plotCommand.setAliases(Arrays.asList("p", "ps", "plotme", "plot")); + plotCommand.setTabCompleter(bcmd); + } + + @Override + public File getDirectory() { + return getDataFolder(); + } + + @Override + public TaskManager getTaskManager() { + return new BukkitTaskManager(); + } + + @Override + public void runEntityTask() { + log(C.PREFIX.s() + "KillAllEntities started."); + TaskManager.runTaskRepeat(new Runnable() { + long ticked = 0l; + long error = 0l; + @Override + public void run() { + if (this.ticked > 36_000L) { + this.ticked = 0l; + if (this.error > 0) { + log(C.PREFIX.s() + "KillAllEntities has been running for 6 hours. Errors: " + this.error); + } + this.error = 0l; + } + World world; + for (final String w : PlotSquared.getPlotWorlds()) { + world = Bukkit.getWorld(w); + try { + if (world.getLoadedChunks().length < 1) { + continue; + } + for (final Chunk chunk : world.getLoadedChunks()) { + final Entity[] entities = chunk.getEntities(); + Entity entity; + for (int i = entities.length - 1; i >= 0; i--) { + if (!((entity = entities[i]) instanceof Player) && (MainUtil.getPlot(BukkitUtil.getLocation(entity)) == null)) { + entity.remove(); + } + } + } + } catch (final Throwable e) { + ++this.error; + } finally { + ++this.ticked; + } + } + } + }, 20); + } + + @Override + final public ChunkGenerator getDefaultWorldGenerator(final String world, final String id) { + if (!PlotSquared.setupPlotWorld(world, id)) { + return null; + } + return new HybridGen(world); + } + + @Override + public void registerPlayerEvents() { + getServer().getPluginManager().registerEvents(new PlayerEvents(), this); + if (checkVersion(1, 8, 0)) { + getServer().getPluginManager().registerEvents(new PlayerEvents_1_8(), this); + } + } + + @Override + public void registerInventoryEvents() { + getServer().getPluginManager().registerEvents(new InventoryListener(), this); + } + + @Override + public void registerPlotPlusEvents() { + PlotPlusListener.startRunnable(this); + getServer().getPluginManager().registerEvents(new PlotPlusListener(), this); + } + + @Override + public void registerForceFieldEvents() { + getServer().getPluginManager().registerEvents(new ForceFieldListener(), this); + } + + @Override + public void registerWorldEditEvents() { + if (getServer().getPluginManager().getPlugin("WorldEdit") != null) { + PlotSquared.worldEdit = (WorldEditPlugin) getServer().getPluginManager().getPlugin("WorldEdit"); + final String version = PlotSquared.worldEdit.getDescription().getVersion(); + if ((version != null) && version.startsWith("5.")) { + log("&cThis version of WorldEdit does not support PlotSquared."); + log("&cPlease use WorldEdit 6+ for masking support"); + log("&c - http://builds.enginehub.org/job/worldedit"); + } else { + getServer().getPluginManager().registerEvents(new WorldEditListener(), this); + MainCommand.subCommands.add(new WE_Anywhere()); + } + } + } + + @Override + public Economy getEconomy() { + if ((getServer().getPluginManager().getPlugin("Vault") != null) && getServer().getPluginManager().getPlugin("Vault").isEnabled()) { + final RegisteredServiceProvider economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); + if (economyProvider != null) { + MainCommand.subCommands.add(new Buy()); + return economyProvider.getProvider(); + } + } + return null; + } + + @Override + public BlockManager initBlockManager() { + if (checkVersion(1, 8, 0)) { + try { + SetBlockManager.setBlockManager = new SetBlockFast_1_8(); + } catch (final Throwable e) { + e.printStackTrace(); + SetBlockManager.setBlockManager = new SetBlockSlow(); + } + } else { + try { + SetBlockManager.setBlockManager = new SetBlockFast(); + } catch (final Throwable e) { + SetBlockManager.setBlockManager = new SetBlockSlow(); + } + } + try { + new SendChunk(); + MainUtil.canSendChunk = true; + } catch (final Throwable e) { + MainUtil.canSendChunk = false; + } + return BlockManager.manager = new BukkitUtil(); + } + + @Override + public boolean initPlotMeConverter() { + try { + new PlotMeConverter().runAsync(); + } catch (final Exception e) { + e.printStackTrace(); + } + if (Bukkit.getPluginManager().getPlugin("PlotMe") != null) { + return true; + } + return false; + } + + @Override + public void getGenerator(final String world, final String name) { + final Plugin gen_plugin = Bukkit.getPluginManager().getPlugin(name); + if ((gen_plugin != null) && gen_plugin.isEnabled()) { + gen_plugin.getDefaultWorldGenerator(world, ""); + } else { + new HybridGen(world); + } + } + + @Override + public boolean callRemovePlot(final String world, final PlotId id) { + final PlotDeleteEvent event = new PlotDeleteEvent(world, id); + Bukkit.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + event.setCancelled(true); + return false; + } + return true; + } + + @Override + public HybridUtils initHybridUtils() { + return new BukkitHybridUtils(); + } + + @Override + public SetupUtils initSetupUtils() { + return new BukkitSetupUtils(); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/IPlotMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/IPlotMain.java new file mode 100644 index 000000000..76c59e5ac --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/IPlotMain.java @@ -0,0 +1,51 @@ +package com.intellectualcrafters.plot; + +import java.io.File; + +import net.milkbowl.vault.economy.Economy; + +import com.intellectualcrafters.plot.generator.HybridUtils; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.SetupUtils; +import com.intellectualcrafters.plot.util.TaskManager; + +public interface IPlotMain { + public void log(String message); + + public File getDirectory(); + + public void disable(); + + public String getVersion(); + + public TaskManager getTaskManager(); + + public void runEntityTask(); + + public void registerCommands(); + + public void registerPlayerEvents(); + + public void registerInventoryEvents(); + + public void registerPlotPlusEvents(); + + public void registerForceFieldEvents(); + + public void registerWorldEditEvents(); + + public Economy getEconomy(); + + public BlockManager initBlockManager(); + + public SetupUtils initSetupUtils(); + + public HybridUtils initHybridUtils(); + + public boolean initPlotMeConverter(); + + public void getGenerator(String world, String name); + + public boolean callRemovePlot(String world, PlotId id); +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java deleted file mode 100644 index 4d99365cd..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java +++ /dev/null @@ -1,1682 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot; - -import com.intellectualcrafters.plot.commands.Buy; -import com.intellectualcrafters.plot.commands.Cluster; -import com.intellectualcrafters.plot.commands.MainCommand; -import com.intellectualcrafters.plot.commands.WE_Anywhere; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.config.Configuration; -import com.intellectualcrafters.plot.config.ConfigurationNode; -import com.intellectualcrafters.plot.config.Settings; -import com.intellectualcrafters.plot.database.*; -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.flag.FlagValue; -import com.intellectualcrafters.plot.generator.AugmentedPopulator; -import com.intellectualcrafters.plot.generator.HybridGen; -import com.intellectualcrafters.plot.generator.HybridPlotWorld; -import com.intellectualcrafters.plot.generator.SquarePlotManager; -import com.intellectualcrafters.plot.listeners.*; -import com.intellectualcrafters.plot.object.*; -import com.intellectualcrafters.plot.titles.AbstractTitle; -import com.intellectualcrafters.plot.titles.DefaultTitle; -import com.intellectualcrafters.plot.util.*; -import com.intellectualcrafters.plot.util.Logger.LogLevel; -import com.intellectualcrafters.plot.uuid.DefaultUUIDWrapper; -import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; - -import me.confuser.barapi.BarAPI; -import net.milkbowl.vault.economy.Economy; - -import org.bukkit.*; -import org.bukkit.Location; -import org.bukkit.command.PluginCommand; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.world.WorldLoadEvent; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; -import java.util.Map.Entry; - -/** - * PlotMain class. - * - * @author Citymonstret - * @author Empire92 - */ -public class PlotMain extends JavaPlugin implements Listener { - /** - * Permission that allows for "everything" - */ - public static final String ADMIN_PERMISSION = "plots.admin"; - /** - * Storage version - */ - public final static int storage_ver = 1; - /** - * All loaded plot worlds - */ - private final static HashMap worlds = new HashMap<>(); - /** - * All world managers - */ - private final static HashMap managers = new HashMap<>(); - /** - * style - */ - public static File styleFile; - public static YamlConfiguration styleConfig; - /** - * settings.properties - */ - public static File configFile; - /** - * The main configuration file - */ - public static YamlConfiguration config; - /** - * storage.properties - */ - public static File storageFile; - /** - * Contains storage options - */ - public static YamlConfiguration storage; - /** - * MySQL Connection - */ - public static Connection connection; - /** - * WorldEdit object - */ - public static WorldEditPlugin worldEdit = null; - /** - * BarAPI object - */ - public static BarAPI barAPI = null; - /** - * World Guard Object - */ - public static WorldGuardPlugin worldGuard = null; - /** - * World Guard Listener - */ - public static WorldGuardListener worldGuardListener = null; - /** - * Economy Object (vault) - */ - public static Economy economy; - /** - * Use Economy? - */ - public static boolean useEconomy = false; - private static PlotMain main = null; - private static boolean LOADING_WORLD = false; - /** - * MySQL Object - */ - private static MySQL mySQL; - /** - * List of all plots DO NOT USE EXCEPT FOR DATABASE PURPOSES - */ - private static LinkedHashMap> plots; - - /** - * Return an instance of MySQL - */ - public static MySQL getMySQL() { - return mySQL; - } - /** - * Check a range of permissions e.g. 'plots.plot.<0-100>'
Returns highest integer in range. - * - * @param player to check - * @param stub to check - * @param range tp check - * - * @return permitted range - */ - public static int hasPermissionRange(final Player player, final String stub, final int range) { - if ((player == null) || player.isOp() || player.hasPermission(ADMIN_PERMISSION)) { - return Byte.MAX_VALUE; - } - if (player.hasPermission(stub + ".*")) { - return Byte.MAX_VALUE; - } - for (int i = range; i > 0; i--) { - if (player.hasPermission(stub + "." + i)) { - return i; - } - } - return 0; - } - - /** - * Check a player for a permission
- Op has all permissions
- checks for '*' nodes - * - * @param player to check - * @param perms to check - * - * @return true of player has permissions - */ - public static boolean hasPermissions(final Player player, final String[] perms) { - // Assumes null player is console. - if ((player == null) || player.isOp() || player.hasPermission(ADMIN_PERMISSION)) { - return true; - } - for (final String perm : perms) { - boolean permitted = false; - if (player.hasPermission(perm)) { - permitted = true; - } else { - final String[] nodes = perm.split("\\."); - final StringBuilder n = new StringBuilder(); - for (int i = 0; i < (nodes.length - 1); i++) { - n.append(nodes[i]).append("."); - if (player.hasPermission(n + "*")) { - permitted = true; - break; - } - } - } - if (!permitted) { - return false; - } - } - - return true; - } - - /** - * Check a player for a permission
- Op has all permissions
- checks for '*' nodes - * - * @param player to check - * @param perm to check - * - * @return true if player has the permission - */ - public static boolean hasPermission(final Player player, final String perm) { - if ((player == null) || player.isOp() || player.hasPermission(ADMIN_PERMISSION)) { - return true; - } - if (player.hasPermission(perm)) { - return true; - } - final String[] nodes = perm.split("\\."); - final StringBuilder n = new StringBuilder(); - for (int i = 0; i < (nodes.length - 1); i++) { - n.append(nodes[i] + (".")); - if (player.hasPermission(n + "*")) { - return true; - } - } - - return false; - } - - /** - * Get all plots - * - * @return HashMap containing the plot ID and the plot object. - */ - public static Set getPlots() { - final ArrayList _plots = new ArrayList<>(); - for (final HashMap world : plots.values()) { - _plots.addAll(world.values()); - } - return new LinkedHashSet<>(_plots); - } - - /** - * Get a sorted list of plots - * - * @return sorted list - */ - public static LinkedHashSet getPlotsSorted() { - final ArrayList _plots = new ArrayList<>(); - for (final HashMap world : plots.values()) { - _plots.addAll(world.values()); - } - return new LinkedHashSet<>(_plots); - } - - /** - * @param player player - * - * @return Set Containing the players plots - * - ignores non plot worlds - */ - public static Set getPlots(final Player player) { - final UUID uuid = UUIDHandler.getUUID(player); - final ArrayList myplots = new ArrayList<>(); - for (final String world : plots.keySet()) { - if (isPlotWorld(world)) { - for (final Plot plot : plots.get(world).values()) { - if (plot.hasOwner()) { - if (plot.getOwner().equals(uuid)) { - myplots.add(plot); - } - } - } - } - } - return new HashSet<>(myplots); - } - - /** - * @param world plot world - * @param player plot owner - * - * @return players plots - */ - public static Set getPlots(final World world, final Player player) { - final UUID uuid = UUIDHandler.getUUID(player); - return getPlots(world, uuid); - } - - /** - * @param world plot world - * @param player plot owner - * - * @return players plots - */ - public static Set getPlots(final World world, final UUID uuid) { - final ArrayList myplots = new ArrayList<>(); - for (final Plot plot : getPlots(world).values()) { - if (plot.hasOwner()) { - if (plot.getOwner().equals(uuid)) { - myplots.add(plot); - } - } - } - return new HashSet<>(myplots); - } - - /** - * Get plots for the specified world - * - * @param world A world, in which you want to search for plots - * - * @return HashMap containing Plot IDs and Plot Objects - */ - public static HashMap getPlots(final String world) { - if (plots.containsKey(world)) { - return plots.get(world); - } - return new HashMap<>(); - } - - /** - * @param world plot world - * - * @return plots in world - */ - public static HashMap getPlots(final World world) { - if (plots.containsKey(world.getName())) { - return plots.get(world.getName()); - } - return new HashMap<>(); - } - - /** - * get all plot worlds - */ - public static String[] getPlotWorlds() { - final Set strings = worlds.keySet(); - return (strings.toArray(new String[strings.size()])); - } - - /** - * @return plots worlds - */ - public static String[] getPlotWorldsString() { - final Set strings = plots.keySet(); - return strings.toArray(new String[strings.size()]); - } - - /** - * @param world plotworld(?) - * - * @return true if the world is a plotworld - */ - public static boolean isPlotWorld(final World world) { - return (worlds.containsKey(world.getName())); - } - - /** - * @param world plotworld(?) - * - * @return true if the world is a plotworld - */ - public static boolean isPlotWorld(final String world) { - return (worlds.containsKey(world)); - } - - /** - * @param world World to get manager for - * - * @return manager for world - */ - public static PlotManager getPlotManager(final World world) { - if (managers.containsKey(world.getName())) { - return managers.get(world.getName()); - } - return null; - } - - /** - * @param world world - * - * @return PlotManager - */ - public static PlotManager getPlotManager(final String world) { - if (managers.containsKey(world)) { - return managers.get(world); - } - return null; - } - - /** - * @param world to search - * - * @return PlotWorld object - */ - public static PlotWorld getWorldSettings(final World world) { - if (worlds.containsKey(world.getName())) { - return worlds.get(world.getName()); - } - return null; - } - - /** - * @param world to search - * - * @return PlotWorld object - */ - public static PlotWorld getWorldSettings(final String world) { - if (worlds.containsKey(world)) { - return worlds.get(world); - } - return null; - } - - /** - * @param world world to search - * - * @return set containing the plots for a world - */ - public static Plot[] getWorldPlots(final World world) { - final Collection values = plots.get(world.getName()).values(); - return (values.toArray(new Plot[values.size()])); - } - - /** - * Remove a plot - * - * @param world The Plot World - * @param id The Plot ID - * @param callEvent Whether or not to call the PlotDeleteEvent - * - * @return true if successful, false if not - */ - public static boolean removePlot(final String world, final PlotId id, final boolean callEvent) { - if (callEvent) { - final PlotDeleteEvent event = new PlotDeleteEvent(world, id); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - event.setCancelled(true); - return false; - } - } - plots.get(world).remove(id); - - if (PlotHelper.lastPlot.containsKey(world)) { - PlotId last = PlotHelper.lastPlot.get(world); - int last_max = Math.max(last.x, last.y); - int this_max = Math.max(id.x, id.y); - - if (this_max < last_max) { - PlotHelper.lastPlot.put(world, id); - } - } - - return true; - } - - /** - * Replace the plot object with an updated version - * - * @param plot plot object - */ - public static void updatePlot(final Plot plot) { - final String world = plot.world; - if (!plots.containsKey(world)) { - plots.put(world, new HashMap()); - } - plot.hasChanged = true; - plots.get(world).put(plot.id, plot); - } - - /** - * Get the java version - * - * @return Java Version as a double - */ - public static double getJavaVersion() { - return Double.parseDouble(System.getProperty("java.specification.version")); - } - - /** - * Get MySQL Connection - * - * @return connection MySQL Connection. - */ - public static Connection getConnection() { - return connection; - } - - /** - * Send a message to the console. - * - * @param string message - */ - public static void sendConsoleSenderMessage(final String string) { - if (PlotMain.main == null || getMain().getServer().getConsoleSender() == null) { - System.out.println(ChatColor.stripColor(ConsoleColors.fromString(string))); - } else { - String message = ChatColor.translateAlternateColorCodes('&', string); - if (!Settings.CONSOLE_COLOR) { - message = ChatColor.stripColor(message); - } - getMain().getServer().getConsoleSender().sendMessage(message); - } - } - - /** - * Teleport a player to a plot - * - * @param player Player to teleport - * @param from Previous Location - * @param plot Plot to teleport to - * - * @return true if successful - */ - public static boolean teleportPlayer(final Player player, final Location from, final Plot plot) { - Plot bot = PlayerFunctions.getBottomPlot(player.getWorld(), plot); - final PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, bot); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - final Location location = PlotHelper.getPlotHome(Bukkit.getWorld(bot.world), bot); - if ((location.getBlockX() >= 29999999) || (location.getBlockX() <= -29999999) || (location.getBlockZ() >= 299999999) || (location.getBlockZ() <= -29999999)) { - event.setCancelled(true); - return false; - } - if (Settings.TELEPORT_DELAY == 0 || hasPermission(player, "plots.teleport.delay.bypass")) { - PlayerFunctions.sendMessage(player, C.TELEPORTED_TO_PLOT); - player.teleport(location); - return true; - } - PlayerFunctions.sendMessage(player, C.TELEPORT_IN_SECONDS, Settings.TELEPORT_DELAY + ""); - Location loc = player.getLocation(); - final World world = player.getWorld(); - final int x = loc.getBlockX(); - final int z = loc.getBlockZ(); - final String name = player.getName(); - TaskManager.TELEPORT_QUEUE.add(name); - TaskManager.runTaskLater(new Runnable() { - @Override - public void run() { - if (!TaskManager.TELEPORT_QUEUE.contains(name)) { - PlayerFunctions.sendMessage(player, C.TELEPORT_FAILED); - return; - } - TaskManager.TELEPORT_QUEUE.remove(name); - if (!player.isOnline()) { - return; - } - Location loc = player.getLocation(); - if (!loc.getWorld().equals(world)) { - PlayerFunctions.sendMessage(player, C.TELEPORT_FAILED); - return; - } - if (loc.getBlockX() != x || loc.getBlockZ() != z) { - PlayerFunctions.sendMessage(player, C.TELEPORT_FAILED); - return; - } - PlayerFunctions.sendMessage(player, C.TELEPORTED_TO_PLOT); - player.teleport(location); - } - }, Settings.TELEPORT_DELAY * 20); - return true; - } - return !event.isCancelled(); - } - - /** - * Send a message to the console - * - * @param c message - */ - public static void sendConsoleSenderMessage(final C c) { - sendConsoleSenderMessage(c.s()); - } - - /** - * Broadcast publicly - * - * @param c message - */ - public static void Broadcast(final C c) { - Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', C.PREFIX.s() + c.s())); - } - - /** - * Returns the main class. - * - * @return (this class) - */ - public static PlotMain getMain() { - return PlotMain.main; - } - - /** - * Broadcast a message to all admins - * - * @param c message - */ - public static void BroadcastWithPerms(final C c) { - for (final Player player : Bukkit.getOnlinePlayers()) { - if (player.hasPermission(ADMIN_PERMISSION)) { - PlayerFunctions.sendMessage(player, c); - } - } - System.out.println(ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', C.PREFIX.s() + c.s()))); - } - - /** - * Reload all translations - * - * @throws IOException - */ - public static void reloadTranslations() throws IOException { - C.setupTranslations(); - } - - /** - * Ge the last played time - * - * @param uuid UUID for the player - * - * @return last play time as a long - */ - public static long getLastPlayed(final UUID uuid) { - if (uuid == null) { - return 0; - } - OfflinePlayer player; - if (((player = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid)) == null) || !player.hasPlayedBefore()) { - return 0; - } - return player.getLastPlayed(); - } - - /** - * Load configuration files - */ - public static void configs() { - final File folder = new File(getMain().getDataFolder() + File.separator + "config"); - if (!folder.exists() && !folder.mkdirs()) { - sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to create the /plugins/config folder. Please create it manually."); - } - try { - styleFile = new File(getMain().getDataFolder() + File.separator + "translations" + File.separator + "style.yml"); - if (!styleFile.exists()) { - if (!styleFile.createNewFile()) { - sendConsoleSenderMessage("Could not create the style file, please create \"translations/style.yml\" manually"); - } - } - styleConfig = YamlConfiguration.loadConfiguration(styleFile); - setupStyle(); - } catch (final Exception err) { - Logger.add(LogLevel.DANGER, "Failed to save style.yml"); - System.out.println("failed to save style.yml"); - } - try { - configFile = new File(getMain().getDataFolder() + File.separator + "config" + File.separator + "settings.yml"); - if (!configFile.exists()) { - if (!configFile.createNewFile()) { - sendConsoleSenderMessage("Could not create the settings file, please create \"settings.yml\" manually."); - } - } - config = YamlConfiguration.loadConfiguration(configFile); - setupConfig(); - } catch (final Exception err_trans) { - Logger.add(LogLevel.DANGER, "Failed to save settings.yml"); - System.out.println("Failed to save settings.yml"); - } - try { - storageFile = new File(getMain().getDataFolder() + File.separator + "config" + File.separator + "storage.yml"); - if (!storageFile.exists()) { - if (!storageFile.createNewFile()) { - sendConsoleSenderMessage("Could not the storage settings file, please create \"storage.yml\" manually."); - } - } - storage = YamlConfiguration.loadConfiguration(storageFile); - setupStorage(); - } catch (final Exception err_trans) { - Logger.add(LogLevel.DANGER, "Failed to save storage.yml"); - System.out.println("Failed to save storage.yml"); - } - try { - styleConfig.save(styleFile); - config.save(configFile); - storage.save(storageFile); - } catch (final IOException e) { - Logger.add(LogLevel.DANGER, "Configuration file saving failed"); - e.printStackTrace(); - } - { - Settings.DB.USE_MYSQL = storage.getBoolean("mysql.use"); - Settings.DB.USER = storage.getString("mysql.user"); - Settings.DB.PASSWORD = storage.getString("mysql.password"); - Settings.DB.HOST_NAME = storage.getString("mysql.host"); - Settings.DB.PORT = storage.getString("mysql.port"); - Settings.DB.DATABASE = storage.getString("mysql.database"); - Settings.DB.USE_SQLITE = storage.getBoolean("sqlite.use"); - Settings.DB.SQLITE_DB = storage.getString("sqlite.db"); - Settings.DB.PREFIX = storage.getString("prefix"); - Settings.METRICS = config.getBoolean("metrics"); - Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled"); - Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days"); - Settings.DELETE_PLOTS_ON_BAN = config.getBoolean("clear.on.ban"); - Settings.API_URL = config.getString("uuid.api.location"); - Settings.CUSTOM_API = config.getBoolean("uuid.api.custom"); - Settings.UUID_FECTHING = config.getBoolean("uuid.fetching"); - - C.COLOR_1 = ChatColor.getByChar(styleConfig.getString("color.1")); - C.COLOR_2 = ChatColor.getByChar(styleConfig.getString("color.2")); - C.COLOR_3 = ChatColor.getByChar(styleConfig.getString("color.3")); - C.COLOR_4 = ChatColor.getByChar(styleConfig.getString("color.4")); - } - if (Settings.DEBUG) { - final Map settings = new HashMap<>(); - settings.put("Kill Road Mobs", "" + Settings.KILL_ROAD_MOBS); - settings.put("Use Metrics", "" + Settings.METRICS); - settings.put("Delete Plots On Ban", "" + Settings.DELETE_PLOTS_ON_BAN); - settings.put("Mob Pathfinding", "" + Settings.MOB_PATHFINDING); - settings.put("DB Mysql Enabled", "" + Settings.DB.USE_MYSQL); - settings.put("DB SQLite Enabled", "" + Settings.DB.USE_SQLITE); - settings.put("Auto Clear Enabled", "" + Settings.AUTO_CLEAR); - settings.put("Auto Clear Days", "" + Settings.AUTO_CLEAR_DAYS); - settings.put("Schematics Save Path", "" + Settings.SCHEMATIC_SAVE_PATH); - settings.put("API Location", "" + Settings.API_URL); - for (final Entry setting : settings.entrySet()) { - sendConsoleSenderMessage(C.PREFIX.s() + String.format("&cKey: &6%s&c, Value: &6%s", setting.getKey(), setting.getValue())); - } - } - } - - /** - * Kill all entities on roads - */ - public static void killAllEntities() { - Bukkit.getScheduler().scheduleSyncRepeatingTask(getMain(), new Runnable() { - long ticked = 0l; - long error = 0l; - - { - sendConsoleSenderMessage(C.PREFIX.s() + "KillAllEntities started."); - } - - @Override - public void run() { - if (this.ticked > 36_000L) { - this.ticked = 0l; - if (this.error > 0) { - sendConsoleSenderMessage(C.PREFIX.s() + "KillAllEntities has been running for 6 hours. Errors: " + this.error); - } - this.error = 0l; - } - World world; - for (final String w : getPlotWorlds()) { - getWorldSettings(w); - world = Bukkit.getServer().getWorld(w); - try { - if (world.getLoadedChunks().length < 1) { - continue; - } - for (final Chunk chunk : world.getLoadedChunks()) { - final Entity[] entities = chunk.getEntities(); - Entity entity; - for (int i = entities.length - 1; i >= 0; i--) { - if (!((entity = entities[i]) instanceof Player) && !PlotListener.isInPlot(entity.getLocation())) { - entity.remove(); - } - } - } - } catch (final Throwable e) { - ++this.error; - } finally { - ++this.ticked; - } - } - } - }, 20L, 20L); - } - - /** - * SETUP: settings.yml - */ - public static void setupConfig() { - final int config_ver = 1; - config.set("version", config_ver); - final Map options = new HashMap<>(); - options.put("teleport.delay", 0); - options.put("auto_update", false); - options.put("clusters.enabled", Settings.ENABLE_CLUSTERS); - options.put("plotme-alias", Settings.USE_PLOTME_ALIAS); - options.put("plotme-convert.enabled", Settings.CONVERT_PLOTME); - options.put("claim.max-auto-area", Settings.MAX_AUTO_SIZE); - options.put("UUID.offline", Settings.OFFLINE_MODE); -// options.put("worldguard.enabled", Settings.WORLDGUARD); - options.put("kill_road_mobs", Settings.KILL_ROAD_MOBS_DEFAULT); - options.put("mob_pathfinding", Settings.MOB_PATHFINDING_DEFAULT); - options.put("console.color", Settings.CONSOLE_COLOR); - options.put("metrics", true); - options.put("debug", true); - options.put("clear.auto.enabled", false); - options.put("clear.auto.days", 365); - options.put("clear.check-disk", Settings.AUTO_CLEAR_CHECK_DISK); - options.put("clear.on.ban", false); - options.put("max_plots", Settings.MAX_PLOTS); - options.put("schematics.save_path", Settings.SCHEMATIC_SAVE_PATH); -// options.put("uuid.api.location", Settings.API_URL); -// options.put("uuid.api.custom", Settings.CUSTOM_API); -// options.put("uuid.fecthing", Settings.UUID_FECTHING); - options.put("uuid.read-from-disk", Settings.UUID_FROM_DISK); - options.put("titles", Settings.TITLES); - options.put("teleport.on_login", Settings.TELEPORT_ON_LOGIN); -// options.put("perm-based-mob-cap.enabled", Settings.MOB_CAP_ENABLED); -// options.put("perm-based-mob-cap.max", Settings.MOB_CAP); - options.put("worldedit.require-selection-in-mask", Settings.REQUIRE_SELECTION); - - for (final Entry node : options.entrySet()) { - if (!config.contains(node.getKey())) { - config.set(node.getKey(), node.getValue()); - } - } - Settings.ENABLE_CLUSTERS = config.getBoolean("clusters.enabled"); - Settings.DEBUG = config.getBoolean("debug"); - if (Settings.DEBUG) { - sendConsoleSenderMessage(C.PREFIX.s() + "&6Debug Mode Enabled (Default). Edit the config to turn this off."); - } - Settings.TELEPORT_DELAY = config.getInt("teleport.delay"); - Settings.CONSOLE_COLOR = config.getBoolean("console.color"); - Settings.TELEPORT_ON_LOGIN = config.getBoolean("teleport.on_login"); - Settings.USE_PLOTME_ALIAS = config.getBoolean("plotme-alias"); - Settings.CONVERT_PLOTME = config.getBoolean("plotme-convert.enabled"); - Settings.KILL_ROAD_MOBS = config.getBoolean("kill_road_mobs"); -// Settings.WORLDGUARD = config.getBoolean("worldguard.enabled"); - Settings.MOB_PATHFINDING = config.getBoolean("mob_pathf" - + "inding"); - Settings.METRICS = config.getBoolean("metrics"); - Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days"); - Settings.AUTO_CLEAR_CHECK_DISK = config.getBoolean("clear.check-disk"); - Settings.MAX_AUTO_SIZE = config.getInt("claim.max-auto-area"); - Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled"); - Settings.TITLES = config.getBoolean("titles"); -// Settings.MOB_CAP_ENABLED = config.getBoolean("perm-based-mob-cap.enabled"); -// Settings.MOB_CAP = config.getInt("perm-based-mob-cap.max"); - Settings.MAX_PLOTS = config.getInt("max_plots"); - if (Settings.MAX_PLOTS > 32767) { - sendConsoleSenderMessage("&c`max_plots` Is set too high! This is a per player setting and does not need to be very large."); - Settings.MAX_PLOTS = 32767; - } - - - Settings.SCHEMATIC_SAVE_PATH = config.getString("schematics.save_path"); - - Settings.OFFLINE_MODE = config.getBoolean("UUID.offline"); - Settings.UUID_FROM_DISK = config.getBoolean("uuid.read-from-disk"); - - Settings.REQUIRE_SELECTION = config.getBoolean("worldedit.require-selection-in-mask"); - } - - /** - * Create a plotworld config section - * - * @param plotworld World to create the section for - */ - public static void createConfiguration(final PlotWorld plotworld) { - final Map options = new HashMap<>(); - - for (final ConfigurationNode setting : plotworld.getSettingNodes()) { - options.put(setting.getConstant(), setting.getValue()); - } - - for (final Entry node : options.entrySet()) { - if (!config.contains(node.getKey())) { - config.set(node.getKey(), node.getValue()); - } - } - - try { - config.save(PlotMain.configFile); - } 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"); - } - } - - @EventHandler - public static void worldLoad(WorldLoadEvent event) { - if (!UUIDHandler.CACHED) { - UUIDHandler.cacheAll(); - if (Settings.CONVERT_PLOTME) { - if (Bukkit.getPluginManager().getPlugin("PlotMe") != null) { - sendConsoleSenderMessage("&c[IMPORTANT] THIS MESSAGE MAY BE EXTREMELY HELPFUL IF YOU HAVE TROUBLE CONVERTING PLOTME!"); - sendConsoleSenderMessage("&c[IMPORTANT] - Make sure 'UUID.read-from-disk' is disabled (false)!"); - sendConsoleSenderMessage("&c[IMPORTANT] - Sometimes the database can be locked, deleting PlotMe.jar beforehand will fix the issue!"); - sendConsoleSenderMessage("&c[IMPORTANT] - After the conversion is finished, please set 'plotme-convert.enabled' to false in the 'settings.yml@'"); - } - try { - new PlotMeConverter(PlotMain.getMain()).runAsync(); - } catch (final Exception e) { - e.printStackTrace(); - } - } - } - } - - public static void loadWorld(final String world, final ChunkGenerator generator) { - System.out.print(2); - if (getWorldSettings(world) != null) { - System.out.print(3); - return; - } - - final Set worlds = (config.contains("worlds") ? config.getConfigurationSection("worlds").getKeys(false) : new HashSet()); - - final PlotWorld plotWorld; - final PlotGenerator plotGenerator; - final PlotManager plotManager; - final String path = "worlds." + world; - - if (!LOADING_WORLD && (generator != null) && (generator instanceof PlotGenerator)) { - System.out.print(4); - plotGenerator = (PlotGenerator) generator; - plotWorld = plotGenerator.getNewPlotWorld(world); - plotManager = plotGenerator.getPlotManager(); - if (!world.equals("CheckingPlotSquaredGenerator")) { - sendConsoleSenderMessage(C.PREFIX.s() + "&aDetected world load for '" + world + "'"); - sendConsoleSenderMessage(C.PREFIX.s() + "&3 - generator: &7" + plotGenerator.getClass().getName()); - sendConsoleSenderMessage(C.PREFIX.s() + "&3 - plotworld: &7" + plotWorld.getClass().getName()); - sendConsoleSenderMessage(C.PREFIX.s() + "&3 - manager: &7" + plotManager.getClass().getName()); - } - if (!config.contains(path)) { - config.createSection(path); - } - plotWorld.saveConfiguration(config.getConfigurationSection(path)); - plotWorld.loadDefaultConfiguration(config.getConfigurationSection(path)); - try { - config.save(configFile); - } catch (final IOException e) { - e.printStackTrace(); - } - // Now add it - addPlotWorld(world, plotWorld, plotManager); - PlotHelper.setupBorder(world); - } else { - System.out.print(5 + " | " + (generator instanceof PlotGenerator)); - if (!worlds.contains(world)) { - System.out.print(6); - return; - } - if (!LOADING_WORLD) { - LOADING_WORLD = true; - try { - String gen_string = config.getString("worlds." + world + "." + "generator.plugin"); - Plugin gen_plugin = gen_string == null ? null : Bukkit.getPluginManager().getPlugin(gen_string); - if (gen_plugin != null && gen_plugin.isEnabled()) { - gen_plugin.getDefaultWorldGenerator(world, ""); - } else { - new HybridGen(world); - } - } catch (Exception e) { - PlotMain.sendConsoleSenderMessage("&d=== Oh no! Please set the generator for the " + world + " ==="); - e.printStackTrace(); - LOADING_WORLD = false; - removePlotWorld(world); - } finally { - LOADING_WORLD = false; - } - } else { - PlotGenerator gen_class = (PlotGenerator) generator; - plotWorld = gen_class.getNewPlotWorld(world); - plotManager = gen_class.getPlotManager(); - if (!config.contains(path)) { - config.createSection(path); - } - plotWorld.TYPE = 2; - plotWorld.TERRAIN = 0; - plotWorld.saveConfiguration(config.getConfigurationSection(path)); - plotWorld.loadDefaultConfiguration(config.getConfigurationSection(path)); - try { - config.save(configFile); - } catch (final IOException e) { - e.printStackTrace(); - } - if ((plotWorld.TYPE == 2 && !Settings.ENABLE_CLUSTERS) || !(plotManager instanceof SquarePlotManager)) { - sendConsoleSenderMessage("&c[ERROR] World '" + world + "' in settings.yml is not using PlotSquared generator! Please set the generator correctly or delete the world from the 'settings.yml'!"); - return; - } - addPlotWorld(world, plotWorld, plotManager); - if (plotWorld.TYPE == 2) { - if (ClusterManager.getClusters(world).size() > 0) { - for (PlotCluster cluster : ClusterManager.getClusters(world)) { - new AugmentedPopulator(world, gen_class, cluster, plotWorld.TERRAIN == 2, plotWorld.TERRAIN != 2); - } - } - } else if (plotWorld.TYPE == 1) { - new AugmentedPopulator(world, gen_class, null, plotWorld.TERRAIN == 2, plotWorld.TERRAIN != 2); - } - } - } - } - - /** - * Adds an external world as a recognized PlotSquared world - The PlotWorld class created is based off the - * configuration in the settings.yml - Do not use this method unless the required world is preconfigured in the - * settings.yml - * - * @param world to load - */ - public static void loadWorld(final World world) { - if (world == null) { - return; - } - final ChunkGenerator generator = world.getGenerator(); - loadWorld(world.getName(), generator); - } - - public static void setupStyle() { - styleConfig.set("version", 0); - final Map o = new HashMap<>(); - o.put("color.1", C.COLOR_1.getChar()); - o.put("color.2", C.COLOR_2.getChar()); - o.put("color.3", C.COLOR_3.getChar()); - o.put("color.4", C.COLOR_4.getChar()); - for (final Entry node : o.entrySet()) { - if (!styleConfig.contains(node.getKey())) { - styleConfig.set(node.getKey(), node.getValue()); - } - } - } - - /** - * SETUP: storage.properties - */ - private static void setupStorage() { - storage.set("version", storage_ver); - final Map options = new HashMap<>(); - options.put("mysql.use", false); - options.put("sqlite.use", true); - options.put("sqlite.db", "storage"); - options.put("mysql.host", "localhost"); - options.put("mysql.port", "3306"); - options.put("mysql.user", "root"); - options.put("mysql.password", "password"); - options.put("mysql.database", "plot_db"); - options.put("prefix", ""); - for (final Entry node : options.entrySet()) { - if (!storage.contains(node.getKey())) { - storage.set(node.getKey(), node.getValue()); - } - } - } - - private static void addPlusFlags() { - final List booleanFlags = Arrays.asList("notify-enter", "notify-leave", "item-drop", "invincible", "instabreak", "drop-protection", "forcefield", "titles", "pve", "pvp", "no-worldedit"); - final List intervalFlags = Arrays.asList("feed", "heal"); - final List stringFlags = Arrays.asList("greeting", "farewell"); - for (final String flag : stringFlags) { - FlagManager.addFlag(new AbstractFlag(flag)); - } - for (final String flag : intervalFlags) { - FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.IntervalValue())); - } - for (final String flag : booleanFlags) { - FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.BooleanValue())); - } - } - - private static void defaultFlags() { - addPlusFlags(); - FlagManager.addFlag(new AbstractFlag("fly", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("explosion", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("hostile-interact", new FlagValue.BooleanValue())); - FlagManager.addFlag(new AbstractFlag("hostile-attack", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("animal-interact", new FlagValue.BooleanValue())); - FlagManager.addFlag(new AbstractFlag("animal-attack", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("tamed-interact", new FlagValue.BooleanValue())); - FlagManager.addFlag(new AbstractFlag("tamed-attack", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("misc-interact", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("hanging-place", new FlagValue.BooleanValue())); - FlagManager.addFlag(new AbstractFlag("hanging-break", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("vehicle-use", new FlagValue.BooleanValue())); - FlagManager.addFlag(new AbstractFlag("vehicle-place", new FlagValue.BooleanValue())); - FlagManager.addFlag(new AbstractFlag("vehicle-break", new FlagValue.BooleanValue())); - - FlagManager.addFlag(new AbstractFlag("place", new FlagValue.PlotBlockListValue())); - FlagManager.addFlag(new AbstractFlag("break", new FlagValue.PlotBlockListValue())); - FlagManager.addFlag(new AbstractFlag("use", new FlagValue.PlotBlockListValue())); - - FlagManager.addFlag(new AbstractFlag("gamemode") { - @Override - public String parseValueRaw(final String value) { - switch (value) { - case "creative": - case "c": - case "1": - return "creative"; - case "survival": - case "s": - case "0": - return "survival"; - case "adventure": - case "a": - case "2": - return "adventure"; - default: - return null; - } - } - - @Override - public String getValueDesc() { - return "Flag value must be a gamemode: 'creative' , 'survival' or 'adventure'"; - } - }); - - FlagManager.addFlag(new AbstractFlag("price", new FlagValue.UnsignedDoubleValue())); - - FlagManager.addFlag(new AbstractFlag("time", new FlagValue.LongValue())); - - FlagManager.addFlag(new AbstractFlag("weather") { - @Override - public String parseValueRaw(final String value) { - switch (value) { - case "rain": - case "storm": - case "on": - return "rain"; - case "clear": - case "off": - case "sun": - return "clear"; - default: - return null; - } - } - - @Override - public String getValueDesc() { - return "Flag value must be weather type: 'clear' or 'rain'"; - } - }); - } - - /** - * Add a Plot world - * - * @param world World to add - * @param plotworld PlotWorld Object - * @param manager Plot Manager for the new world - */ - public static void addPlotWorld(final String world, final PlotWorld plotworld, final PlotManager manager) { - worlds.put(world, plotworld); - managers.put(world, manager); - if (!plots.containsKey(world)) { - plots.put(world, new HashMap()); - } - } - - /** - * Remove a plot world - * - * @param world World to remove - */ - public static void removePlotWorld(final String world) { - plots.remove(world); - managers.remove(world); - worlds.remove(world); - } - - public static void removePlots(final String world) { - plots.put(world, new HashMap()); - } - - /** - * Get all plots - * - * @return All Plos in a hashmap (world, Hashmap contiang ids and objects)) - */ - public static HashMap> getAllPlotsRaw() { - return plots; - } - - /** - * Set all plots - * - * @param plots New Plot LinkedHashMap - */ - public static void setAllPlotsRaw(final LinkedHashMap> plots) { - PlotMain.plots = plots; - } - - /** - * Set all plots - * - * @param plots New Plot HashMap - */ - public static void setAllPlotsRaw(final HashMap> plots) { - PlotMain.plots = new LinkedHashMap<>(plots); - // PlotMain.plots.putAll(plots); - } - - public static boolean checkVersion(int major, int minor, int minor2) { - try { - String[] version = Bukkit.getBukkitVersion().split("-")[0].split("\\."); - int a = Integer.parseInt(version[0]); - int b = Integer.parseInt(version[1]); - int c = 0; - if (version.length == 3) { - c = Integer.parseInt(version[2]); - } - if (a > major || (a == major && b > minor) || (a == major && b == minor && c >= minor2)) { - return true; - } - return false; - } catch (Exception e) { - return false; - } - } - - @EventHandler - public void PlayerCommand(PlayerCommandPreprocessEvent event) { - String message = event.getMessage(); - if (message.toLowerCase().startsWith("/plotme")) { - Plugin plotme = Bukkit.getPluginManager().getPlugin("PlotMe"); - if (plotme == null) { - Player player = event.getPlayer(); - if (Settings.USE_PLOTME_ALIAS) { - player.performCommand(message.replace("/plotme", "plots")); - } else { - PlayerFunctions.sendMessage(player, C.NOT_USING_PLOTME); - } - event.setCancelled(true); - } - } - } - - /** - * Get the PlotSquared World Generator - * - * @see com.intellectualcrafters.plot.generator.WorldGenerator - */ - @Override - final public ChunkGenerator getDefaultWorldGenerator(final String world, final String id) { - if (id != null && id.length() > 0) { - // save configuration - String[] split = id.split(","); - HybridPlotWorld plotworld = new HybridPlotWorld(world); - - int width = HybridPlotWorld.PLOT_WIDTH_DEFAULT; - int gap = HybridPlotWorld.ROAD_WIDTH_DEFAULT; - int height = HybridPlotWorld.PLOT_HEIGHT_DEFAULT; - PlotBlock[] floor = HybridPlotWorld.TOP_BLOCK_DEFAULT; - PlotBlock[] main = HybridPlotWorld.MAIN_BLOCK_DEFAULT; - PlotBlock wall = HybridPlotWorld.WALL_FILLING_DEFAULT; - PlotBlock border = HybridPlotWorld.WALL_BLOCK_DEFAULT; - - for (String element : split) { - String[] pair = element.split("="); - if (pair.length != 2) { - sendConsoleSenderMessage("&cNo value provided for: &7" + element); - return null; - } - String key = pair[0].toLowerCase(); - String value = pair[1]; - try { - switch (key) { - case "s": - case "size": { - HybridPlotWorld.PLOT_WIDTH_DEFAULT = ((Integer) Configuration.INTEGER.parseString(value)).shortValue(); - break; - } - case "g": - case "gap": { - HybridPlotWorld.ROAD_WIDTH_DEFAULT = ((Integer) Configuration.INTEGER.parseString(value)).shortValue(); - break; - } - case "h": - case "height": { - HybridPlotWorld.PLOT_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value); - HybridPlotWorld.ROAD_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value); - HybridPlotWorld.WALL_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value); - break; - } - case "f": - case "floor": { - HybridPlotWorld.TOP_BLOCK_DEFAULT = (PlotBlock[]) Configuration.BLOCKLIST.parseString(value); - break; - } - case "m": - case "main": { - HybridPlotWorld.MAIN_BLOCK_DEFAULT = (PlotBlock[]) Configuration.BLOCKLIST.parseString(value); - break; - } - case "w": - case "wall": { - HybridPlotWorld.WALL_FILLING_DEFAULT = (PlotBlock) Configuration.BLOCK.parseString(value); - break; - } - case "b": - case "border": { - HybridPlotWorld.WALL_BLOCK_DEFAULT = (PlotBlock) Configuration.BLOCK.parseString(value); - break; - } - default: { - sendConsoleSenderMessage("&cKey not found: &7" + element); - return null; - } - } - } - catch (Exception e) { - e.printStackTrace(); - sendConsoleSenderMessage("&cInvalid value: &7" + value + " in arg " + element); - return null; - } - } - try { - String root = "worlds." + world; - if (!config.contains(root)) { - config.createSection(root); - } - plotworld.saveConfiguration(config.getConfigurationSection(root)); - HybridPlotWorld.PLOT_HEIGHT_DEFAULT = height; - HybridPlotWorld.ROAD_HEIGHT_DEFAULT = height; - HybridPlotWorld.WALL_HEIGHT_DEFAULT = height; - HybridPlotWorld.TOP_BLOCK_DEFAULT = floor; - HybridPlotWorld.MAIN_BLOCK_DEFAULT = main; - HybridPlotWorld.WALL_BLOCK_DEFAULT = border; - HybridPlotWorld.WALL_FILLING_DEFAULT = wall; - HybridPlotWorld.PLOT_WIDTH_DEFAULT = width; - HybridPlotWorld.ROAD_WIDTH_DEFAULT = gap; - } - catch (Exception e) { - e.printStackTrace(); - } - } - return new HybridGen(world); - } - - /** - * Setup the logger mechanics - */ - private void setupLogger() { - final File log = new File(getMain().getDataFolder() + File.separator + "logs" + File.separator + "plots.log"); - if (!log.exists()) { - try { - if (!new File(getMain().getDataFolder() + File.separator + "logs").mkdirs()) { - sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to create logs folder. Do it manually."); - } - if (log.createNewFile()) { - final FileWriter writer = new FileWriter(log); - writer.write("Created at: " + new Date().toString() + "\n\n\n"); - writer.close(); - } - } catch (final IOException e) { - - e.printStackTrace(); - } - } - Logger.setup(log); - Logger.add(LogLevel.GENERAL, "Logger enabled"); - } - - /** - * On Load. - */ - @Override - final public void onEnable() { - PlotMain.main = this; - // Setup the logger mechanics - setupLogger(); - // Setup translations - C.setupTranslations(); - C.saveTranslations(); - // Check for outdated java version. - if (getJavaVersion() < 1.7) { - sendConsoleSenderMessage(C.PREFIX.s() + "&cYour java version is outdated. Please update to at least 1.7."); - // Didn't know of any other link :D - sendConsoleSenderMessage(C.PREFIX.s() + "&cURL: &6https://java.com/en/download/index.jsp"); - Bukkit.getPluginManager().disablePlugin(this); - return; - } else if (getJavaVersion() < 1.8) { - sendConsoleSenderMessage(C.PREFIX.s() + "&cIt's really recommended to run Java 1.8, as it increases performance"); - } - // Setup configuration - configs(); - defaultFlags(); - // Setup metrics - if (Settings.METRICS) { - try { - final Metrics metrics = new Metrics(this); - metrics.start(); - sendConsoleSenderMessage(C.PREFIX.s() + "&6Metrics enabled."); - } catch (final Exception e) { - sendConsoleSenderMessage(C.PREFIX.s() + "&cFailed to load up metrics."); - } - } else { - // We should at least make them feel bad. - sendConsoleSenderMessage("Using metrics will allow us to improve the plugin\nPlease consider it :)"); - } - // Kill mobs on roads? - if (Settings.KILL_ROAD_MOBS) { - killAllEntities(); - } - if (C.ENABLED.s().length() > 0) { - sendConsoleSenderMessage(C.ENABLED); - } - final String[] tables; - if (Settings.ENABLE_CLUSTERS) { - MainCommand.subCommands.add(new Cluster()); - tables = new String[]{"plot_trusted", "plot_ratings", "plot_comments", "cluster"}; - } - else { - tables = new String[]{"plot_trusted", "plot_ratings", "plot_comments"}; - } - - // Add tables to this one, if we create more :D - - - // Use mysql? - if (Settings.DB.USE_MYSQL) { - try { - mySQL = new MySQL(this, Settings.DB.HOST_NAME, Settings.DB.PORT, Settings.DB.DATABASE, Settings.DB.USER, Settings.DB.PASSWORD); - connection = mySQL.openConnection(); - { - if (DBFunc.dbManager == null) { - DBFunc.dbManager = new SQLManager(connection, Settings.DB.PREFIX); - } - final DatabaseMetaData meta = connection.getMetaData(); - ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null); - if (!res.next()) { - DBFunc.createTables("mysql", true); - } else { - for (final String table : tables) { - res = meta.getTables(null, null, Settings.DB.PREFIX + table, null); - if (!res.next()) { - DBFunc.createTables("mysql", false); - } - } - // We should not repeat our self :P - } - } - } catch (final Exception e) { - Logger.add(LogLevel.DANGER, "MySQL connection failed."); - sendConsoleSenderMessage("&c[Plots] MySQL is not setup correctly. The plugin will disable itself."); - if ((config == null) || config.getBoolean("debug")) { - sendConsoleSenderMessage("&d==== Here is an ugly stacktrace if you are interested in those things ===="); - e.printStackTrace(); - sendConsoleSenderMessage("&d==== End of stacktrace ===="); - sendConsoleSenderMessage("&6Please go to the PlotSquared 'storage.yml' and configure MySQL correctly."); - } - Bukkit.getPluginManager().disablePlugin(this); - return; - } - plots = DBFunc.getPlots(); - if (Settings.ENABLE_CLUSTERS) { - ClusterManager.clusters = DBFunc.getClusters(); - } - } - // TODO: Implement mongo - else if (Settings.DB.USE_MONGO) { - // DBFunc.dbManager = new MongoManager(); - sendConsoleSenderMessage(C.PREFIX.s() + "MongoDB is not yet implemented"); - } else if (Settings.DB.USE_SQLITE) { - try { - connection = new SQLite(this, this.getDataFolder() + File.separator + Settings.DB.SQLITE_DB + ".db").openConnection(); - { - DBFunc.dbManager = new SQLManager(connection, Settings.DB.PREFIX); - final DatabaseMetaData meta = connection.getMetaData(); - ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null); - if (!res.next()) { - DBFunc.createTables("sqlite", true); - } else { - for (final String table : tables) { - res = meta.getTables(null, null, Settings.DB.PREFIX + table, null); - if (!res.next()) { - DBFunc.createTables("sqlite", false); - } - } - } - } - } catch (final Exception e) { - Logger.add(LogLevel.DANGER, "SQLite connection failed"); - 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 ==="); - e.printStackTrace(); - Bukkit.getPluginManager().disablePlugin(this); - return; - } - plots = DBFunc.getPlots(); - if (Settings.ENABLE_CLUSTERS) { - ClusterManager.clusters = DBFunc.getClusters(); - } - } else { - Logger.add(LogLevel.DANGER, "No storage type is set."); - sendConsoleSenderMessage(C.PREFIX + "&cNo storage type is set!"); - getServer().getPluginManager().disablePlugin(this); - return; - } - // Setup the command handler - { - final MainCommand command = new MainCommand(); - final PluginCommand plotCommand = getCommand("plots"); - plotCommand.setExecutor(command); - plotCommand.setAliases(Arrays.asList("p", "ps", "plotme", "plot")); - plotCommand.setTabCompleter(command); - } - - // Main event handler - getServer().getPluginManager().registerEvents(new PlayerEvents(), this); - if (checkVersion(1, 8, 0)) { - getServer().getPluginManager().registerEvents(new PlayerEvents_1_8(), this); - } - // World load events - getServer().getPluginManager().registerEvents(this, this); - // Info Inventory - getServer().getPluginManager().registerEvents(new InventoryListener(), this); - // Flag runnable - PlotPlusListener.startRunnable(this); - // Flag+ listener - getServer().getPluginManager().registerEvents(new PlotPlusListener(), this); - // Forcefield listener - getServer().getPluginManager().registerEvents(new ForceFieldListener(), this); - // Default flags - - if (getServer().getPluginManager().getPlugin("BarAPI") != null) { - barAPI = (BarAPI) getServer().getPluginManager().getPlugin("BarAPI"); - } - if (getServer().getPluginManager().getPlugin("WorldEdit") != null) { - worldEdit = (WorldEditPlugin) getServer().getPluginManager().getPlugin("WorldEdit"); - - final String version = worldEdit.getDescription().getVersion(); - if ((version != null) && version.startsWith("5.")) { - PlotMain.sendConsoleSenderMessage("&cThis version of WorldEdit does not support PlotSquared."); - PlotMain.sendConsoleSenderMessage("&cPlease use WorldEdit 6+ for masking support"); - PlotMain.sendConsoleSenderMessage("&c - http://builds.enginehub.org/job/worldedit"); - } else { - getServer().getPluginManager().registerEvents(new WorldEditListener(), this); - MainCommand.subCommands.add(new WE_Anywhere()); - } - } -// if (Settings.WORLDGUARD) { -// if (getServer().getPluginManager().getPlugin("WorldGuard") != null) { -// worldGuard = (WorldGuardPlugin) getServer().getPluginManager().getPlugin("WorldGuard"); -// worldGuardListener = new WorldGuardListener(this); -// getServer().getPluginManager().registerEvents(worldGuardListener, this); -// } -// } - if (Settings.AUTO_CLEAR) { - ExpireManager.runTask(); - } - // Economy setup - { - if ((getServer().getPluginManager().getPlugin("Vault") != null) && getServer().getPluginManager().getPlugin("Vault").isEnabled()) { - final RegisteredServiceProvider economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class); - if (economyProvider != null) { - economy = economyProvider.getProvider(); - MainCommand.subCommands.add(new Buy()); - } - } - useEconomy = (economy != null); - } - // TPS Measurement - { - getServer().getScheduler().scheduleSyncRepeatingTask(this, new Lag(), 100L, 1L); - } - // Test for SetBlockFast - { - if (checkVersion(1, 8, 0)) { - try { - AbstractSetBlock.setBlockManager = new SetBlockSlow(); - } - catch (Throwable e) { - e.printStackTrace(); - AbstractSetBlock.setBlockManager = new SetBlockSlow(); - } - } - else { - try { - AbstractSetBlock.setBlockManager = new SetBlockFast(); - } catch (Throwable e) { - AbstractSetBlock.setBlockManager = new SetBlockSlow(); - } - } - try { - new SendChunk(); - PlotHelper.canSendChunk = true; - } catch (final Throwable e) { - PlotHelper.canSendChunk = false; - } - } - // Setup the setup command - { - com.intellectualcrafters.plot.commands.plugin.setup(this); - } - // Handle UUIDS - { - boolean checkVersion = checkVersion(1, 7, 6); - if (!checkVersion) { - sendConsoleSenderMessage(C.PREFIX.s()+" &c[WARN] Titles are disabled - please update your version of Bukkit to support this feature."); - Settings.TITLES = false; - FlagManager.removeFlag(FlagManager.getFlag("titles")); - } - else { - AbstractTitle.TITLE_CLASS = new DefaultTitle(); - } - if (Settings.OFFLINE_MODE) { - UUIDHandler.uuidWrapper = new OfflineUUIDWrapper(); - Settings.OFFLINE_MODE = true; - } - else if (checkVersion) { - UUIDHandler.uuidWrapper = new DefaultUUIDWrapper(); - Settings.OFFLINE_MODE = false; - } - else { - UUIDHandler.uuidWrapper = new OfflineUUIDWrapper(); - Settings.OFFLINE_MODE = true; - } - if (Settings.OFFLINE_MODE) { - sendConsoleSenderMessage(C.PREFIX.s()+" &6PlotSquared is using Offline Mode UUIDs either because of user preference, or because you are using an old version of Bukkit"); - } - else { - sendConsoleSenderMessage(C.PREFIX.s()+" &6PlotSquared is using online UUIDs"); - } - } - // Now we're finished :D - if (C.ENABLED.s().length() > 0) { - Broadcast(C.ENABLED); - } - } - - /** - * On unload - */ - @Override - final public void onDisable() { - Logger.add(LogLevel.GENERAL, "Logger disabled"); - try { - Logger.write(); - } catch (final IOException e1) { - e1.printStackTrace(); - } - try { - connection.close(); - mySQL.closeConnection(); - } catch (NullPointerException | SQLException e) { - if (connection != null) { - Logger.add(LogLevel.DANGER, "Could not close mysql connection"); - } - } - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java new file mode 100644 index 000000000..ed5d96fd1 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotSquared.java @@ -0,0 +1,836 @@ +package com.intellectualcrafters.plot; + +import java.io.File; +import java.io.IOException; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; + +import net.milkbowl.vault.economy.Economy; + +import org.bukkit.configuration.file.YamlConfiguration; + +import com.intellectualcrafters.plot.commands.Cluster; +import com.intellectualcrafters.plot.commands.MainCommand; +import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.config.Configuration; +import com.intellectualcrafters.plot.config.Settings; +import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.database.MySQL; +import com.intellectualcrafters.plot.database.SQLManager; +import com.intellectualcrafters.plot.database.SQLite; +import com.intellectualcrafters.plot.flag.AbstractFlag; +import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.flag.FlagValue; +import com.intellectualcrafters.plot.generator.AugmentedPopulator; +import com.intellectualcrafters.plot.generator.ClassicPlotWorld; +import com.intellectualcrafters.plot.generator.HybridGen; +import com.intellectualcrafters.plot.generator.HybridPlotWorld; +import com.intellectualcrafters.plot.generator.HybridUtils; +import com.intellectualcrafters.plot.generator.SquarePlotManager; +import com.intellectualcrafters.plot.generator.SquarePlotWorld; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.object.PlotCluster; +import com.intellectualcrafters.plot.object.PlotGenerator; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ClusterManager; +import com.intellectualcrafters.plot.util.ExpireManager; +import com.intellectualcrafters.plot.util.Logger; +import com.intellectualcrafters.plot.util.SetupUtils; +import com.intellectualcrafters.plot.util.Logger.LogLevel; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; + +public class PlotSquared { + public static final String MAIN_PERMISSION = "plots.use"; + public static final String ADMIN_PERMISSION = "plots.admin"; + public static File styleFile; + public static YamlConfiguration style; + public static File configFile; + public static YamlConfiguration config; + public static File storageFile; + public static YamlConfiguration storage; + public static PlotSquared THIS = null; // This class + public static IPlotMain IMP = null; // Specific implementation of PlotSquared + public static String VERSION = null; + public static TaskManager TASK = null; + private static boolean LOADING_WORLD = false; + public static Economy economy = null; + public static WorldEditPlugin worldEdit = null; + private final static HashMap plotworlds = new HashMap<>(); + private final static HashMap plotmanagers = new HashMap<>(); + private static LinkedHashMap> plots; + private static MySQL mySQL; + public static Connection connection; + + public static MySQL getMySQL() { + return mySQL; + } + + public static void updatePlot(final Plot plot) { + final String world = plot.world; + if (!plots.containsKey(world)) { + plots.put(world, new HashMap()); + } + plot.hasChanged = true; + plots.get(world).put(plot.id, plot); + } + + public static PlotWorld getPlotWorld(final String world) { + if (plotworlds.containsKey(world)) { + return plotworlds.get(world); + } + return null; + } + + public static void addPlotWorld(final String world, final PlotWorld plotworld, final PlotManager manager) { + plotworlds.put(world, plotworld); + plotmanagers.put(world, manager); + if (!plots.containsKey(world)) { + plots.put(world, new HashMap()); + } + } + + public static void removePlotWorld(final String world) { + plots.remove(world); + plotmanagers.remove(world); + plotworlds.remove(world); + } + + public static HashMap> getAllPlotsRaw() { + return plots; + } + + public static void setAllPlotsRaw(final LinkedHashMap> plots) { + PlotSquared.plots = plots; + } + + public static Set getPlots() { + final ArrayList newplots = new ArrayList<>(); + for (final HashMap world : plots.values()) { + newplots.addAll(world.values()); + } + return new LinkedHashSet<>(newplots); + } + + public static LinkedHashSet getPlotsSorted() { + final ArrayList newplots = new ArrayList<>(); + for (final HashMap world : plots.values()) { + newplots.addAll(world.values()); + } + return new LinkedHashSet<>(newplots); + } + + public static Set getPlots(final String world, final String player) { + final UUID uuid = UUIDHandler.getUUID(player); + return getPlots(world, uuid); + } + + public static Set getPlots(final String world, final PlotPlayer player) { + final UUID uuid = player.getUUID(); + return getPlots(world, uuid); + } + + public static Set getPlots(final String world, final UUID uuid) { + final ArrayList myplots = new ArrayList<>(); + for (final Plot plot : getPlots(world).values()) { + if (plot.hasOwner()) { + if (plot.getOwner().equals(uuid)) { + myplots.add(plot); + } + } + } + return new HashSet<>(myplots); + } + + public static boolean isPlotWorld(final String world) { + return (plotworlds.containsKey(world)); + } + + public static PlotManager getPlotManager(final String world) { + if (plotmanagers.containsKey(world)) { + return plotmanagers.get(world); + } + return null; + } + + public static String[] getPlotWorldsString() { + final Set strings = plots.keySet(); + return strings.toArray(new String[strings.size()]); + } + + public static HashMap getPlots(final String world) { + if (plots.containsKey(world)) { + return plots.get(world); + } + return new HashMap<>(); + } + + public static Set getPlots(final PlotPlayer player) { + final UUID uuid = player.getUUID(); + final ArrayList myplots = new ArrayList<>(); + for (final String world : plots.keySet()) { + if (isPlotWorld(world)) { + for (final Plot plot : plots.get(world).values()) { + if (plot.hasOwner()) { + if (plot.getOwner().equals(uuid)) { + myplots.add(plot); + } + } + } + } + } + return new HashSet<>(myplots); + } + + public static boolean removePlot(final String world, final PlotId id, final boolean callEvent) { + if (callEvent) { + if (!IMP.callRemovePlot(world, id)) { + return false; + } + } + plots.get(world).remove(id); + if (MainUtil.lastPlot.containsKey(world)) { + final PlotId last = MainUtil.lastPlot.get(world); + final int last_max = Math.max(last.x, last.y); + final int this_max = Math.max(id.x, id.y); + if (this_max < last_max) { + MainUtil.lastPlot.put(world, id); + } + } + return true; + } + + public static void loadWorld(final String world, final PlotGenerator generator) { + if (getPlotWorld(world) != null) { + return; + } + final Set worlds = (config.contains("worlds") ? config.getConfigurationSection("worlds").getKeys(false) : new HashSet()); + final PlotWorld plotWorld; + final PlotGenerator plotGenerator; + final PlotManager plotManager; + final String path = "worlds." + world; + if (!LOADING_WORLD && (generator != null) && (generator instanceof PlotGenerator)) { + plotGenerator = generator; + plotWorld = plotGenerator.getNewPlotWorld(world); + plotManager = plotGenerator.getPlotManager(); + if (!world.equals("CheckingPlotSquaredGenerator")) { + log(C.PREFIX.s() + "&aDetected world load for '" + world + "'"); + log(C.PREFIX.s() + "&3 - generator: &7" + plotGenerator.getClass().getName()); + log(C.PREFIX.s() + "&3 - plotworld: &7" + plotWorld.getClass().getName()); + log(C.PREFIX.s() + "&3 - manager: &7" + plotManager.getClass().getName()); + } + if (!config.contains(path)) { + config.createSection(path); + } + plotWorld.saveConfiguration(config.getConfigurationSection(path)); + plotWorld.loadDefaultConfiguration(config.getConfigurationSection(path)); + try { + config.save(configFile); + } catch (final IOException e) { + e.printStackTrace(); + } + // Now add it + addPlotWorld(world, plotWorld, plotManager); + MainUtil.setupBorder(world); + } else { + if (!worlds.contains(world)) { + return; + } + if (!LOADING_WORLD) { + LOADING_WORLD = true; + try { + final String gen_string = config.getString("worlds." + world + "." + "generator.plugin"); + if (gen_string == null) { + new HybridGen(world); + } else { + IMP.getGenerator(world, gen_string); + } + } catch (final Exception e) { + log("&d=== Oh no! Please set the generator for the " + world + " ==="); + e.printStackTrace(); + LOADING_WORLD = false; + removePlotWorld(world); + } finally { + LOADING_WORLD = false; + } + } else { + final PlotGenerator gen_class = generator; + plotWorld = gen_class.getNewPlotWorld(world); + plotManager = gen_class.getPlotManager(); + if (!config.contains(path)) { + config.createSection(path); + } + plotWorld.TYPE = 2; + plotWorld.TERRAIN = 0; + plotWorld.saveConfiguration(config.getConfigurationSection(path)); + plotWorld.loadDefaultConfiguration(config.getConfigurationSection(path)); + try { + config.save(configFile); + } catch (final IOException e) { + e.printStackTrace(); + } + if (((plotWorld.TYPE == 2) && !Settings.ENABLE_CLUSTERS) || !(plotManager instanceof SquarePlotManager)) { + log("&c[ERROR] World '" + world + "' in settings.yml is not using PlotSquared generator! Please set the generator correctly or delete the world from the 'settings.yml'!"); + return; + } + addPlotWorld(world, plotWorld, plotManager); + if (plotWorld.TYPE == 2) { + if (ClusterManager.getClusters(world).size() > 0) { + for (final PlotCluster cluster : ClusterManager.getClusters(world)) { + new AugmentedPopulator(world, gen_class, cluster, plotWorld.TERRAIN == 2, plotWorld.TERRAIN != 2); + } + } + } else if (plotWorld.TYPE == 1) { + new AugmentedPopulator(world, gen_class, null, plotWorld.TERRAIN == 2, plotWorld.TERRAIN != 2); + } + } + } + } + + public static boolean setupPlotWorld(final String world, final String id) { + if ((id != null) && (id.length() > 0)) { + // save configuration + final String[] split = id.split(","); + final HybridPlotWorld plotworld = new HybridPlotWorld(world); + final int width = SquarePlotWorld.PLOT_WIDTH_DEFAULT; + final int gap = SquarePlotWorld.ROAD_WIDTH_DEFAULT; + final int height = ClassicPlotWorld.PLOT_HEIGHT_DEFAULT; + final PlotBlock[] floor = ClassicPlotWorld.TOP_BLOCK_DEFAULT; + final PlotBlock[] main = ClassicPlotWorld.MAIN_BLOCK_DEFAULT; + final PlotBlock wall = ClassicPlotWorld.WALL_FILLING_DEFAULT; + final PlotBlock border = ClassicPlotWorld.WALL_BLOCK_DEFAULT; + for (final String element : split) { + final String[] pair = element.split("="); + if (pair.length != 2) { + log("&cNo value provided for: &7" + element); + return false; + } + final String key = pair[0].toLowerCase(); + final String value = pair[1]; + try { + switch (key) { + case "s": + case "size": { + SquarePlotWorld.PLOT_WIDTH_DEFAULT = ((Integer) Configuration.INTEGER.parseString(value)).shortValue(); + break; + } + case "g": + case "gap": { + SquarePlotWorld.ROAD_WIDTH_DEFAULT = ((Integer) Configuration.INTEGER.parseString(value)).shortValue(); + break; + } + case "h": + case "height": { + ClassicPlotWorld.PLOT_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value); + ClassicPlotWorld.ROAD_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value); + ClassicPlotWorld.WALL_HEIGHT_DEFAULT = (Integer) Configuration.INTEGER.parseString(value); + break; + } + case "f": + case "floor": { + ClassicPlotWorld.TOP_BLOCK_DEFAULT = (PlotBlock[]) Configuration.BLOCKLIST.parseString(value); + break; + } + case "m": + case "main": { + ClassicPlotWorld.MAIN_BLOCK_DEFAULT = (PlotBlock[]) Configuration.BLOCKLIST.parseString(value); + break; + } + case "w": + case "wall": { + ClassicPlotWorld.WALL_FILLING_DEFAULT = (PlotBlock) Configuration.BLOCK.parseString(value); + break; + } + case "b": + case "border": { + ClassicPlotWorld.WALL_BLOCK_DEFAULT = (PlotBlock) Configuration.BLOCK.parseString(value); + break; + } + default: { + log("&cKey not found: &7" + element); + return false; + } + } + } catch (final Exception e) { + e.printStackTrace(); + log("&cInvalid value: &7" + value + " in arg " + element); + return false; + } + } + try { + final String root = "worlds." + world; + if (!config.contains(root)) { + config.createSection(root); + } + plotworld.saveConfiguration(config.getConfigurationSection(root)); + ClassicPlotWorld.PLOT_HEIGHT_DEFAULT = height; + ClassicPlotWorld.ROAD_HEIGHT_DEFAULT = height; + ClassicPlotWorld.WALL_HEIGHT_DEFAULT = height; + ClassicPlotWorld.TOP_BLOCK_DEFAULT = floor; + ClassicPlotWorld.MAIN_BLOCK_DEFAULT = main; + ClassicPlotWorld.WALL_BLOCK_DEFAULT = border; + ClassicPlotWorld.WALL_FILLING_DEFAULT = wall; + SquarePlotWorld.PLOT_WIDTH_DEFAULT = width; + SquarePlotWorld.ROAD_WIDTH_DEFAULT = gap; + } catch (final Exception e) { + e.printStackTrace(); + } + } + return true; + } + + public static Connection getConnection() { + return connection; + } + + public PlotSquared(final IPlotMain imp_class) { + THIS = this; + IMP = imp_class; + VERSION = IMP.getVersion(); + economy = IMP.getEconomy(); + C.setupTranslations(); + C.saveTranslations(); + if (getJavaVersion() < 1.7) { + log(C.PREFIX.s() + "&cYour java version is outdated. Please update to at least 1.7."); + // Didn't know of any other link :D + log(C.PREFIX.s() + "&cURL: &6https://java.com/en/download/index.jsp"); + IMP.disable(); + return; + } + if (getJavaVersion() < 1.8) { + log(C.PREFIX.s() + "&cIt's really recommended to run Java 1.8, as it increases performance"); + } + TASK = IMP.getTaskManager(); + if (Settings.KILL_ROAD_MOBS) { + IMP.runEntityTask(); + } + if (C.ENABLED.s().length() > 0) { + log(C.ENABLED.s()); + } + setupConfigs(); + setupDefaultFlags(); + setupDatabase(); + // Events + IMP.registerCommands(); + IMP.registerPlayerEvents(); + IMP.registerInventoryEvents(); + IMP.registerPlotPlusEvents(); + IMP.registerForceFieldEvents(); + IMP.registerWorldEditEvents(); + // create Hybrid utility class + HybridUtils.manager = IMP.initHybridUtils(); + // create setup util class + SetupUtils.manager = IMP.initSetupUtils(); + // Set block + BlockManager.manager = IMP.initBlockManager(); + // PlotMe + TaskManager.runTaskLater(new Runnable() { + @Override + public void run() { + if (IMP.initPlotMeConverter()) { + log("&c=== IMPORTANT ==="); + log("&cTHIS MESSAGE MAY BE EXTREMELY HELPFUL IF YOU HAVE TROUBLE CONVERTING PLOTME!"); + log("&c - Make sure 'UUID.read-from-disk' is disabled (false)!"); + log("&c - Sometimes the database can be locked, deleting PlotMe.jar beforehand will fix the issue!"); + log("&c - After the conversion is finished, please set 'plotme-convert.enabled' to false in the 'settings.yml@'"); + } + } + }, 200); + if (Settings.AUTO_CLEAR) { + ExpireManager.runTask(); + } + } + + public void disable() { + try { + connection.close(); + mySQL.closeConnection(); + } catch (NullPointerException | SQLException e) { + if (connection != null) { + log("&cCould not close mysql connection!"); + } + } + } + + public static void log(final String message) { + IMP.log(message); + } + + public void setupDatabase() { + final String[] tables; + if (Settings.ENABLE_CLUSTERS) { + MainCommand.subCommands.add(new Cluster()); + tables = new String[] { "plot_trusted", "plot_ratings", "plot_comments", "cluster" }; + } else { + tables = new String[] { "plot_trusted", "plot_ratings", "plot_comments" }; + } + if (Settings.DB.USE_MYSQL) { + try { + mySQL = new MySQL(THIS, Settings.DB.HOST_NAME, Settings.DB.PORT, Settings.DB.DATABASE, Settings.DB.USER, Settings.DB.PASSWORD); + connection = mySQL.openConnection(); + { + if (DBFunc.dbManager == null) { + DBFunc.dbManager = new SQLManager(connection, Settings.DB.PREFIX); + } + final DatabaseMetaData meta = connection.getMetaData(); + ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null); + if (!res.next()) { + DBFunc.createTables("mysql", true); + } else { + for (final String table : tables) { + res = meta.getTables(null, null, Settings.DB.PREFIX + table, null); + if (!res.next()) { + DBFunc.createTables("mysql", false); + } + } + } + } + } catch (final Exception e) { + log("&c[Plots] MySQL is not setup correctly. The plugin will disable itself."); + if ((config == null) || config.getBoolean("debug")) { + log("&d==== Here is an ugly stacktrace if you are interested in those things ===="); + e.printStackTrace(); + log("&d==== End of stacktrace ===="); + log("&6Please go to the PlotSquared 'storage.yml' and configure MySQL correctly."); + } + IMP.disable(); + return; + } + plots = DBFunc.getPlots(); + if (Settings.ENABLE_CLUSTERS) { + ClusterManager.clusters = DBFunc.getClusters(); + } + } else if (Settings.DB.USE_MONGO) { + // DBFunc.dbManager = new MongoManager(); + log(C.PREFIX.s() + "MongoDB is not yet implemented"); + } else if (Settings.DB.USE_SQLITE) { + try { + connection = new SQLite(THIS, IMP.getDirectory() + File.separator + Settings.DB.SQLITE_DB + ".db").openConnection(); + { + DBFunc.dbManager = new SQLManager(connection, Settings.DB.PREFIX); + final DatabaseMetaData meta = connection.getMetaData(); + ResultSet res = meta.getTables(null, null, Settings.DB.PREFIX + "plot", null); + if (!res.next()) { + DBFunc.createTables("sqlite", true); + } else { + for (final String table : tables) { + res = meta.getTables(null, null, Settings.DB.PREFIX + table, null); + if (!res.next()) { + DBFunc.createTables("sqlite", false); + } + } + } + } + } catch (final Exception e) { + log(C.PREFIX.s() + "&cFailed to open SQLite connection. The plugin will disable itself."); + log("&9==== Here is an ugly stacktrace, if you are interested in those things ==="); + e.printStackTrace(); + IMP.disable(); + return; + } + plots = DBFunc.getPlots(); + if (Settings.ENABLE_CLUSTERS) { + ClusterManager.clusters = DBFunc.getClusters(); + } + } else { + log(C.PREFIX + "&cNo storage type is set!"); + IMP.disable(); + return; + } + } + + public static void setupDefaultFlags() { + final List booleanFlags = Arrays.asList("notify-enter", "notify-leave", "item-drop", "invincible", "instabreak", "drop-protection", "forcefield", "titles", "pve", "pvp", "no-worldedit"); + final List intervalFlags = Arrays.asList("feed", "heal"); + final List stringFlags = Arrays.asList("greeting", "farewell"); + for (final String flag : stringFlags) { + FlagManager.addFlag(new AbstractFlag(flag)); + } + for (final String flag : intervalFlags) { + FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.IntervalValue())); + } + for (final String flag : booleanFlags) { + FlagManager.addFlag(new AbstractFlag(flag, new FlagValue.BooleanValue())); + } + FlagManager.addFlag(new AbstractFlag("fly", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("explosion", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("hostile-interact", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("hostile-attack", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("animal-interact", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("animal-attack", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("tamed-interact", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("tamed-attack", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("misc-interact", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("hanging-place", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("hanging-break", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("vehicle-use", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("vehicle-place", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("vehicle-break", new FlagValue.BooleanValue())); + FlagManager.addFlag(new AbstractFlag("place", new FlagValue.PlotBlockListValue())); + FlagManager.addFlag(new AbstractFlag("break", new FlagValue.PlotBlockListValue())); + FlagManager.addFlag(new AbstractFlag("use", new FlagValue.PlotBlockListValue())); + FlagManager.addFlag(new AbstractFlag("gamemode") { + @Override + public String parseValueRaw(final String value) { + switch (value) { + case "creative": + case "c": + case "1": + return "creative"; + case "survival": + case "s": + case "0": + return "survival"; + case "adventure": + case "a": + case "2": + return "adventure"; + default: + return null; + } + } + + @Override + public String getValueDesc() { + return "Flag value must be a gamemode: 'creative' , 'survival' or 'adventure'"; + } + }); + FlagManager.addFlag(new AbstractFlag("price", new FlagValue.UnsignedDoubleValue())); + FlagManager.addFlag(new AbstractFlag("time", new FlagValue.LongValue())); + FlagManager.addFlag(new AbstractFlag("weather") { + @Override + public String parseValueRaw(final String value) { + switch (value) { + case "rain": + case "storm": + case "on": + return "rain"; + case "clear": + case "off": + case "sun": + return "clear"; + default: + return null; + } + } + + @Override + public String getValueDesc() { + return "Flag value must be weather type: 'clear' or 'rain'"; + } + }); + } + + public static void setupConfig() { + config.set("version", VERSION); + final Map options = new HashMap<>(); + options.put("teleport.delay", 0); + options.put("auto_update", false); + options.put("clusters.enabled", Settings.ENABLE_CLUSTERS); + options.put("plotme-alias", Settings.USE_PLOTME_ALIAS); + options.put("plotme-convert.enabled", Settings.CONVERT_PLOTME); + options.put("claim.max-auto-area", Settings.MAX_AUTO_SIZE); + options.put("UUID.offline", Settings.OFFLINE_MODE); + options.put("kill_road_mobs", Settings.KILL_ROAD_MOBS_DEFAULT); + options.put("mob_pathfinding", Settings.MOB_PATHFINDING_DEFAULT); + options.put("console.color", Settings.CONSOLE_COLOR); + options.put("metrics", true); + options.put("debug", true); + options.put("clear.auto.enabled", false); + options.put("clear.auto.days", 365); + options.put("clear.check-disk", Settings.AUTO_CLEAR_CHECK_DISK); + options.put("clear.on.ban", false); + options.put("max_plots", Settings.MAX_PLOTS); + options.put("schematics.save_path", Settings.SCHEMATIC_SAVE_PATH); + options.put("uuid.read-from-disk", Settings.UUID_FROM_DISK); + options.put("titles", Settings.TITLES); + options.put("teleport.on_login", Settings.TELEPORT_ON_LOGIN); + options.put("worldedit.require-selection-in-mask", Settings.REQUIRE_SELECTION); + for (final Entry node : options.entrySet()) { + if (!config.contains(node.getKey())) { + config.set(node.getKey(), node.getValue()); + } + } + Settings.ENABLE_CLUSTERS = config.getBoolean("clusters.enabled"); + Settings.DEBUG = config.getBoolean("debug"); + if (Settings.DEBUG) { + log(C.PREFIX.s() + "&6Debug Mode Enabled (Default). Edit the config to turn this off."); + } + Settings.TELEPORT_DELAY = config.getInt("teleport.delay"); + Settings.CONSOLE_COLOR = config.getBoolean("console.color"); + Settings.TELEPORT_ON_LOGIN = config.getBoolean("teleport.on_login"); + Settings.USE_PLOTME_ALIAS = config.getBoolean("plotme-alias"); + Settings.CONVERT_PLOTME = config.getBoolean("plotme-convert.enabled"); + Settings.KILL_ROAD_MOBS = config.getBoolean("kill_road_mobs"); + Settings.MOB_PATHFINDING = config.getBoolean("mob_pathf" + "inding"); + Settings.METRICS = config.getBoolean("metrics"); + Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days"); + Settings.AUTO_CLEAR_CHECK_DISK = config.getBoolean("clear.check-disk"); + Settings.MAX_AUTO_SIZE = config.getInt("claim.max-auto-area"); + Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled"); + Settings.TITLES = config.getBoolean("titles"); + Settings.MAX_PLOTS = config.getInt("max_plots"); + if (Settings.MAX_PLOTS > 32767) { + log("&c`max_plots` Is set too high! This is a per player setting and does not need to be very large."); + Settings.MAX_PLOTS = 32767; + } + Settings.SCHEMATIC_SAVE_PATH = config.getString("schematics.save_path"); + Settings.OFFLINE_MODE = config.getBoolean("UUID.offline"); + Settings.UUID_FROM_DISK = config.getBoolean("uuid.read-from-disk"); + Settings.REQUIRE_SELECTION = config.getBoolean("worldedit.require-selection-in-mask"); + } + + public static void setupConfigs() { + final File folder = new File(IMP.getDirectory() + File.separator + "config"); + if (!folder.exists() && !folder.mkdirs()) { + log(C.PREFIX.s() + "&cFailed to create the /plugins/config folder. Please create it manually."); + } + try { + styleFile = new File(IMP.getDirectory() + File.separator + "translations" + File.separator + "style.yml"); + if (!styleFile.exists()) { + if (!styleFile.createNewFile()) { + log("Could not create the style file, please create \"translations/style.yml\" manually"); + } + } + style = YamlConfiguration.loadConfiguration(styleFile); + setupStyle(); + } catch (final Exception err) { + Logger.add(LogLevel.DANGER, "Failed to save style.yml"); + System.out.println("failed to save style.yml"); + } + try { + configFile = new File(IMP.getDirectory() + File.separator + "config" + File.separator + "settings.yml"); + if (!configFile.exists()) { + if (!configFile.createNewFile()) { + log("Could not create the settings file, please create \"settings.yml\" manually."); + } + } + config = YamlConfiguration.loadConfiguration(configFile); + setupConfig(); + } catch (final Exception err_trans) { + Logger.add(LogLevel.DANGER, "Failed to save settings.yml"); + System.out.println("Failed to save settings.yml"); + } + try { + storageFile = new File(IMP.getDirectory() + File.separator + "config" + File.separator + "storage.yml"); + if (!storageFile.exists()) { + if (!storageFile.createNewFile()) { + log("Could not the storage settings file, please create \"storage.yml\" manually."); + } + } + storage = YamlConfiguration.loadConfiguration(storageFile); + setupStorage(); + } catch (final Exception err_trans) { + Logger.add(LogLevel.DANGER, "Failed to save storage.yml"); + System.out.println("Failed to save storage.yml"); + } + try { + style.save(styleFile); + config.save(configFile); + storage.save(storageFile); + } catch (final IOException e) { + Logger.add(LogLevel.DANGER, "Configuration file saving failed"); + e.printStackTrace(); + } + } + + private static void setupStorage() { + storage.set("version", VERSION); + final Map options = new HashMap<>(); + options.put("mysql.use", false); + options.put("sqlite.use", true); + options.put("sqlite.db", "storage"); + options.put("mysql.host", "localhost"); + options.put("mysql.port", "3306"); + options.put("mysql.user", "root"); + options.put("mysql.password", "password"); + options.put("mysql.database", "plot_db"); + options.put("prefix", ""); + for (final Entry node : options.entrySet()) { + if (!storage.contains(node.getKey())) { + storage.set(node.getKey(), node.getValue()); + } + } + } + + public static void showDebug() { + Settings.DB.USE_MYSQL = storage.getBoolean("mysql.use"); + Settings.DB.USER = storage.getString("mysql.user"); + Settings.DB.PASSWORD = storage.getString("mysql.password"); + Settings.DB.HOST_NAME = storage.getString("mysql.host"); + Settings.DB.PORT = storage.getString("mysql.port"); + Settings.DB.DATABASE = storage.getString("mysql.database"); + Settings.DB.USE_SQLITE = storage.getBoolean("sqlite.use"); + Settings.DB.SQLITE_DB = storage.getString("sqlite.db"); + Settings.DB.PREFIX = storage.getString("prefix"); + Settings.METRICS = config.getBoolean("metrics"); + Settings.AUTO_CLEAR = config.getBoolean("clear.auto.enabled"); + Settings.AUTO_CLEAR_DAYS = config.getInt("clear.auto.days"); + Settings.DELETE_PLOTS_ON_BAN = config.getBoolean("clear.on.ban"); + Settings.API_URL = config.getString("uuid.api.location"); + Settings.CUSTOM_API = config.getBoolean("uuid.api.custom"); + Settings.UUID_FECTHING = config.getBoolean("uuid.fetching"); + C.COLOR_1 = "\u00A7" + (style.getString("color.1")); + C.COLOR_2 = "\u00A7" + (style.getString("color.2")); + C.COLOR_3 = "\u00A7" + (style.getString("color.3")); + C.COLOR_4 = "\u00A7" + (style.getString("color.4")); + if (Settings.DEBUG) { + final Map settings = new HashMap<>(); + settings.put("Kill Road Mobs", "" + Settings.KILL_ROAD_MOBS); + settings.put("Use Metrics", "" + Settings.METRICS); + settings.put("Delete Plots On Ban", "" + Settings.DELETE_PLOTS_ON_BAN); + settings.put("Mob Pathfinding", "" + Settings.MOB_PATHFINDING); + settings.put("DB Mysql Enabled", "" + Settings.DB.USE_MYSQL); + settings.put("DB SQLite Enabled", "" + Settings.DB.USE_SQLITE); + settings.put("Auto Clear Enabled", "" + Settings.AUTO_CLEAR); + settings.put("Auto Clear Days", "" + Settings.AUTO_CLEAR_DAYS); + settings.put("Schematics Save Path", "" + Settings.SCHEMATIC_SAVE_PATH); + settings.put("API Location", "" + Settings.API_URL); + for (final Entry setting : settings.entrySet()) { + log(C.PREFIX.s() + String.format("&cKey: &6%s&c, Value: &6%s", setting.getKey(), setting.getValue())); + } + } + } + + private static void setupStyle() { + style.set("version", VERSION); + final Map o = new HashMap<>(); + o.put("color.1", C.COLOR_1.substring(1)); + o.put("color.2", C.COLOR_2.substring(1)); + o.put("color.3", C.COLOR_3.substring(1)); + o.put("color.4", C.COLOR_4.substring(1)); + for (final Entry node : o.entrySet()) { + if (!style.contains(node.getKey())) { + style.set(node.getKey(), node.getValue()); + } + } + } + + public static double getJavaVersion() { + return Double.parseDouble(System.getProperty("java.specification.version")); + } + + public static Set getPlotWorlds() { + return plotworlds.keySet(); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java deleted file mode 100644 index 53fed0097..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java +++ /dev/null @@ -1,651 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -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.commands.MainCommand; -import com.intellectualcrafters.plot.commands.SubCommand; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.flag.AbstractFlag; -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.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.PlotSquaredException; -import com.intellectualcrafters.plot.util.SchematicHandler; -import com.intellectualcrafters.plot.util.UUIDHandler; - -/** - * PlotSquared API - * - * @author Citymonstret - * @author Empire92 - * @version API 2.0 - */ - -@SuppressWarnings("unused") public class PlotAPI { - - /** - * Permission that allows for admin access, this permission node will allow the player to use any part of the - * plugin, without limitations. - */ - public static final String ADMIN_PERMISSION = "plots.admin"; - - /** - * Plot Helper Class - *

- * General functions involving plots, and the management of them - * - * @see com.intellectualcrafters.plot.util.PlotHelper - */ - private static PlotHelper plotHelper; - - /** - * Player Functions - *

- * General functions involving players, and plot worlds - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions - */ - private static PlayerFunctions playerFunctions; - - /** - * Flag Manager - *

- * The manager which handles all flags - * - * @see com.intellectualcrafters.plot.flag.FlagManager - */ - private static FlagManager flagManager; - - /** - * Schematic Handler - *

- * The handler which is used to create, and paste, schematics - * - * @see com.intellectualcrafters.plot.util.SchematicHandler - */ - private static SchematicHandler schematicHandler; - - /** - * The translation class. - * - * @see com.intellectualcrafters.plot.config.C - */ - private static C c; - - /** - * PlotMain instance - *

- * This is the instance that allows for most methods to be used. - * - * @see com.intellectualcrafters.plot.PlotMain - */ - private final PlotMain plotMain; - - /** - * Constructor. Insert any Plugin. (Optimally the plugin that is accessing the method) - * - * @param plugin Plugin used to access this method - * - * @throws com.intellectualcrafters.plot.util.PlotSquaredException if the program fails to fetch the PlotMain - * instance - * @see com.intellectualcrafters.plot.PlotMain - */ - public PlotAPI(final JavaPlugin plugin) { - this.plotMain = PlotMain.getMain(); - if (this.plotMain == null) { - throw new PlotSquaredException(PlotSquaredException.PlotError.PLOTMAIN_NULL, "Failed to fetch the plotmain instance, Plot API for " + plugin.getName() + " will be disabled"); - } - } - - /** - * Get all plots - * - * @return all plots - * - * @see com.intellectualcrafters.plot.PlotMain#getPlots() - */ - public Set getAllPlots() { - return PlotMain.getPlots(); - } - - /** - * Return all plots for a player - * - * @param player Player, whose plots to search for - * - * @return all plots that a player owns - */ - public Set getPlayerPlots(final Player player) { - return PlotMain.getPlots(player); - } - - /** - * Add a plot world - * - * @param world World Name - * @param plotWorld Plot World Object - * @param manager World Manager - * - * @see com.intellectualcrafters.plot.PlotMain#addPlotWorld(String, com.intellectualcrafters.plot.object.PlotWorld, - * com.intellectualcrafters.plot.object.PlotManager) - */ - public void addPlotWorld(final String world, final PlotWorld plotWorld, final PlotManager manager) { - PlotMain.addPlotWorld(world, plotWorld, manager); - } - - /** - * @return main configuration - * - * @see com.intellectualcrafters.plot.PlotMain#config - */ - public YamlConfiguration getConfig() { - return PlotMain.config; - } - - /** - * @return storage configuration - * - * @see com.intellectualcrafters.plot.PlotMain#storage - */ - public YamlConfiguration getStorage() { - return PlotMain.storage; - } - - /** - * Get the main class for this plugin
- Contains a lot of fields and methods - not very well organized
- * Only use this if you really need it - * - * @return PlotMain PlotSquared Main Class - * - * @see com.intellectualcrafters.plot.PlotMain - */ - public PlotMain getMain() { - return this.plotMain; - } - - /** - * PlotHelper class contains useful methods relating to plots. - * - * @return PlotHelper - * - * @see com.intellectualcrafters.plot.util.PlotHelper - */ - public PlotHelper getPlotHelper() { - return plotHelper; - } - - /** - * PlayerFunctions class contains useful methods relating to players - Some player/plot methods are here as well - * - * @return PlayerFunctions - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions - */ - public PlayerFunctions getPlayerFunctions() { - return playerFunctions; - } - - /** - * FlagManager class contains methods relating to plot flags - * - * @return FlagManager - * - * @see com.intellectualcrafters.plot.flag.FlagManager - */ - public FlagManager getFlagManager() { - return flagManager; - } - - /** - * SchematicHandler class contains methods related to pasting schematics - * - * @return SchematicHandler - * - * @see com.intellectualcrafters.plot.util.SchematicHandler - */ - public SchematicHandler getSchematicHandler() { - return schematicHandler; - } - - /** - * C class contains all the captions from the translations.yml file. - * - * @return C - * - * @see com.intellectualcrafters.plot.config.C - */ - public C getCaptions() { - return c; - } - - /** - * Get the plot manager for a world. - Most of these methods can be accessed through the PlotHelper - * - * @param world Which manager to get - * - * @return PlotManager - * - * @see com.intellectualcrafters.plot.object.PlotManager - * @see PlotMain#getPlotManager(org.bukkit.World) - */ - public PlotManager getPlotManager(final World world) { - return PlotMain.getPlotManager(world); - } - - /** - * Get the plot manager for a world. - Contains useful low level methods for plot merging, clearing, and - * tessellation - * - * @param world Plot World - * - * @return PlotManager - * - * @see PlotMain#getPlotManager(String) - * @see com.intellectualcrafters.plot.object.PlotManager - */ - public PlotManager getPlotManager(final String world) { - return PlotMain.getPlotManager(world); - } - - /** - * Get the settings for a world (settings bundled in PlotWorld class) - You will need to downcast for the specific - * settings a Generator has. e.g. 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 - * - * @see PlotMain#getWorldSettings(org.bukkit.World) - * @see com.intellectualcrafters.plot.object.PlotWorld - */ - public PlotWorld getWorldSettings(final World world) { - return PlotMain.getWorldSettings(world); - } - - /** - * Get the settings for a world (settings bundled in PlotWorld class) - * - * @param world (to get settings of) - * - * @return PlotWorld class for that world ! will return null if not a plot world world - * - * @see PlotMain#getWorldSettings(String) - * @see com.intellectualcrafters.plot.object.PlotWorld - */ - public PlotWorld getWorldSettings(final String world) { - return PlotMain.getWorldSettings(world); - } - - /** - * Send a message to a player. - * - * @param player Player that will receive the message - * @param c (Caption) - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player, - * com.intellectualcrafters.plot.config.C, String...) - */ - public void sendMessage(final Player player, final C c) { - PlayerFunctions.sendMessage(player, c); - } - - /** - * Send a message to a player. - Supports color codes - * - * @param player Player that will receive the message - * @param string The message - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player, String) - */ - public void sendMessage(final Player player, final String string) { - PlayerFunctions.sendMessage(player, string); - } - - /** - * Send a message to the console. - Supports color codes - * - * @param msg Message that should be sent to the console - * - * @see PlotMain#sendConsoleSenderMessage(String) - */ - public void sendConsoleMessage(final String msg) { - PlotMain.sendConsoleSenderMessage(msg); - } - - /** - * Send a message to the console - * - * @param c (Caption) - * - * @see #sendConsoleMessage(String) - * @see com.intellectualcrafters.plot.config.C - */ - public void sendConsoleMessage(final C c) { - sendConsoleMessage(c.s()); - } - - /** - * Register a flag for use in plots - * - * @param flag Flag that should be registered - * - * @see com.intellectualcrafters.plot.flag.FlagManager#addFlag(com.intellectualcrafters.plot.flag.AbstractFlag) - * @see com.intellectualcrafters.plot.flag.AbstractFlag - */ - public void addFlag(final AbstractFlag flag) { - FlagManager.addFlag(flag); - } - - /** - * get all the currently registered flags - * - * @return array of Flag[] - * - * @see com.intellectualcrafters.plot.flag.FlagManager#getFlags() - * @see com.intellectualcrafters.plot.flag.AbstractFlag - */ - public AbstractFlag[] getFlags() { - return FlagManager.getFlags().toArray(new AbstractFlag[FlagManager.getFlags().size()]); - } - - /** - * Get a plot based on the ID - * - * @param world World in which the plot is located - * @param x Plot Location X Co-ord - * @param z Plot Location Z Co-ord - * - * @return plot, null if ID is wrong - * - * @see PlotHelper#getPlot(org.bukkit.World, com.intellectualcrafters.plot.object.PlotId) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Plot getPlot(final World world, final int x, final int z) { - return PlotHelper.getPlot(world, new PlotId(x, z)); - } - - /** - * Get a plot based on the location - * - * @param l The location that you want to to retrieve the plot from - * - * @return plot if found, otherwise it creates a temporary plot- - * - * @see PlotHelper#getCurrentPlot(org.bukkit.Location) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Plot getPlot(final Location l) { - return PlotHelper.getCurrentPlot(l); - } - - /** - * Get a plot based on the player location - * - * @param player Get the current plot for the player location - * - * @return plot if found, otherwise it creates a temporary plot - * - * @see #getPlot(org.bukkit.Location) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Plot getPlot(final Player player) { - return this.getPlot(player.getLocation()); - } - - /** - * Check whether or not a player has a plot - * - * @param player Player that you want to check for - * - * @return true if player has a plot, false if not. - * - * @see #getPlots(org.bukkit.World, org.bukkit.entity.Player, boolean) - */ - public boolean hasPlot(final World world, final Player player) { - return (getPlots(world, player, true) != null) && (getPlots(world, player, true).length > 0); - } - - /** - * Get all plots for the player - * - * @param plr to search for - * @param just_owner should we just search for owner? Or with rights? - * - * @see com.intellectualcrafters.plot.object.Plot - */ - public Plot[] getPlots(final World world, final Player plr, final boolean just_owner) { - final ArrayList pPlots = new ArrayList<>(); - for (final Plot plot : PlotMain.getPlots(world).values()) { - if (just_owner) { - if ((plot.owner != null) && (plot.owner == UUIDHandler.getUUID(plr))) { - pPlots.add(plot); - } - } else { - if (plot.hasRights(plr)) { - pPlots.add(plot); - } - } - } - return pPlots.toArray(new Plot[pPlots.size()]); - } - - /** - * Get all plots for the world - * - * @param world to get plots of - * - * @return Plot[] - array of plot objects in world - * - * @see PlotMain#getWorldPlots(org.bukkit.World) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Plot[] getPlots(final World world) { - return PlotMain.getWorldPlots(world); - } - - /** - * Get all plot worlds - * - * @return World[] - array of plot worlds - * - * @see com.intellectualcrafters.plot.PlotMain#getPlotWorlds() - */ - public String[] getPlotWorlds() { - return PlotMain.getPlotWorlds(); - } - - /** - * Get if plot world - * - * @param world (to check if plot world) - * - * @return boolean (if plot world or not) - * - * @see com.intellectualcrafters.plot.PlotMain#isPlotWorld(org.bukkit.World) - */ - public boolean isPlotWorld(final World world) { - return PlotMain.isPlotWorld(world); - } - - /** - * Get plot locations - * - * @param p Plot that you want to get the locations for - * - * @return [0] = bottomLc, [1] = topLoc, [2] = home - * - * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotBottomLoc(org.bukkit.World, - * com.intellectualcrafters.plot.object.PlotId) - * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotTopLoc(org.bukkit.World, - * com.intellectualcrafters.plot.object.PlotId) - * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotHome(org.bukkit.World, - * com.intellectualcrafters.plot.object.Plot) - * @see com.intellectualcrafters.plot.object.PlotHomePosition - * @see com.intellectualcrafters.plot.object.Plot - */ - public Location[] getLocations(final Plot p) { - 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)}; - } - - /** - * Get home location - * - * @param p Plot that you want to get the location for - * - * @return plot bottom location - * - * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotHome(org.bukkit.World, - * com.intellectualcrafters.plot.object.Plot) - * @see com.intellectualcrafters.plot.object.PlotHomePosition - * @see com.intellectualcrafters.plot.object.Plot - */ - public Location getHomeLocation(final Plot p) { - return PlotHelper.getPlotHome(p.getWorld(), p.id); - } - - /** - * Get Bottom Location (min, min, min) - * - * @param p Plot that you want to get the location for - * - * @return plot bottom location - * - * @see com.intellectualcrafters.plot.util.PlotHelper#getPlotBottomLoc(org.bukkit.World, - * com.intellectualcrafters.plot.object.PlotId) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Location getBottomLocation(final Plot p) { - final World world = Bukkit.getWorld(p.world); - return PlotHelper.getPlotBottomLoc(world, p.id); - } - - /** - * Get Top Location (max, max, max) - * - * @param p Plot that you want to get the location for - * - * @return plot top location - * - * @see PlotHelper#getPlotTopLoc(org.bukkit.World, com.intellectualcrafters.plot.object.PlotId) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Location getTopLocation(final Plot p) { - final World world = Bukkit.getWorld(p.world); - return PlotHelper.getPlotTopLoc(world, p.id); - } - - /** - * Check whether or not a player is in a plot - * - * @param player who we're checking for - * - * @return true if the player is in a plot, false if not- - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#isInPlot(org.bukkit.entity.Player) - */ - public boolean isInPlot(final Player player) { - return PlayerFunctions.isInPlot(player); - } - - /** - * Register a subcommand - * - * @param c SubCommand, that we want to register - * - * @see com.intellectualcrafters.plot.commands.MainCommand#subCommands - * @see com.intellectualcrafters.plot.commands.SubCommand - */ - public void registerCommand(final SubCommand c) { - MainCommand.subCommands.add(c); - } - - /** - * Get the plotMain class - * - * @return PlotMain Class - * - * @see com.intellectualcrafters.plot.PlotMain - */ - public PlotMain getPlotMain() { - return this.plotMain; - } - - /** - * Get the player plot count - * - * @param world Specify the world we want to select the plots from - * @param player Player, for whom we're getting the plot count - * - * @return the number of plots the player has - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#getPlayerPlotCount(org.bukkit.World, - * org.bukkit.entity.Player) - */ - public int getPlayerPlotCount(final World world, final Player player) { - return PlayerFunctions.getPlayerPlotCount(world, player); - } - - /** - * Get a collection containing the players plots - * - * @param world Specify the world we want to select the plots from - * @param player Player, for whom we're getting the plots - * - * @return a set containing the players plots - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#getPlayerPlots(org.bukkit.World, - * org.bukkit.entity.Player) - * @see com.intellectualcrafters.plot.object.Plot - */ - public Set getPlayerPlots(final World world, final Player player) { - return PlayerFunctions.getPlayerPlots(world, player); - } - - /** - * Get the numbers of plots, which the player is able to build in - * - * @param player Player, for whom we're getting the plots (trusted, helper and owner) - * - * @return the number of allowed plots - * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#getAllowedPlots(org.bukkit.entity.Player) - */ - public int getAllowedPlots(final Player player) { - return PlayerFunctions.getAllowedPlots(player); - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Auto.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Auto.java index bc6a2440f..e16129fcf 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Auto.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Auto.java @@ -18,32 +18,29 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import net.milkbowl.vault.economy.Economy; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotCluster; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.util.ClusterManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; public class Auto extends SubCommand { public Auto() { super("auto", "plots.auto", "Claim the nearest plot", "auto", "a", CommandCategory.CLAIMING, true); } - + public static PlotId getNextPlot(final PlotId id, final int step) { final int absX = Math.abs(id.x); final int absY = Math.abs(id.y); @@ -72,35 +69,34 @@ public class Auto extends SubCommand { return new PlotId(id.x + 1, id.y); } } - + // TODO auto claim a mega plot with schematic @Override - public boolean execute(final Player plr, final String... args) { - World world; + public boolean execute(final PlotPlayer plr, final String... args) { + String world; int size_x = 1; int size_z = 1; String schematic = ""; - if (PlotMain.getPlotWorlds().length == 1) { - world = Bukkit.getWorld(PlotMain.getPlotWorlds()[0]); + if (PlotSquared.getPlotWorlds().size() == 1) { + world = PlotSquared.getPlotWorlds().iterator().next(); } else { - if (PlotMain.isPlotWorld(plr.getWorld())) { - world = plr.getWorld(); - } else { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD); + world = plr.getLocation().getWorld(); + if (!PlotSquared.isPlotWorld(world)) { + MainUtil.sendMessage(plr, C.NOT_IN_PLOT_WORLD); return false; } } if (args.length > 0) { - if (PlotMain.hasPermission(plr, "plots.auto.mega")) { + if (Permissions.hasPermission(plr, "plots.auto.mega")) { try { final String[] split = args[0].split(","); size_x = Integer.parseInt(split[0]); size_z = Integer.parseInt(split[1]); if ((size_x < 1) || (size_z < 1)) { - PlayerFunctions.sendMessage(plr, "&cError: size<=0"); + MainUtil.sendMessage(plr, "&cError: size<=0"); } if ((size_x > 4) || (size_z > 4)) { - PlayerFunctions.sendMessage(plr, "&cError: size>4"); + MainUtil.sendMessage(plr, "&cError: size>4"); } if (args.length > 1) { schematic = args[1]; @@ -119,31 +115,31 @@ public class Auto extends SubCommand { // return false; } } - if ((size_x * size_z) > Settings.MAX_AUTO_SIZE) { - PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS_NUM, Settings.MAX_AUTO_SIZE + ""); + MainUtil.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS_NUM, Settings.MAX_AUTO_SIZE + ""); return false; } - final int diff = PlayerFunctions.getPlayerPlotCount(world, plr) - PlayerFunctions.getAllowedPlots(plr); + int currentPlots = MainUtil.getPlayerPlotCount(world, plr); + final int diff = currentPlots - MainUtil.getAllowedPlots(plr, currentPlots); if ((diff + (size_x * size_z)) > 0) { if (diff < 0) { - PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS_NUM, (-diff) + ""); + MainUtil.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS_NUM, (-diff) + ""); } else { - PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); + MainUtil.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); } return false; } - final PlotWorld pWorld = PlotMain.getWorldSettings(world); - if (PlotMain.useEconomy && pWorld.USE_ECONOMY) { + final PlotWorld pWorld = PlotSquared.getPlotWorld(world); + if ((PlotSquared.economy != null) && pWorld.USE_ECONOMY) { double cost = pWorld.PLOT_PRICE; cost = (size_x * size_z) * cost; if (cost > 0d) { - final Economy economy = PlotMain.economy; - if (economy.getBalance(plr) < cost) { + final Economy economy = PlotSquared.economy; + if (economy.getBalance(plr.getName()) < cost) { sendMessage(plr, C.CANNOT_AFFORD_PLOT, "" + cost); return true; } - economy.withdrawPlayer(plr, cost); + EconHandler.withdrawPlayer(plr, cost); sendMessage(plr, C.REMOVED_BALANCE, cost + ""); } } @@ -153,97 +149,93 @@ public class Auto extends SubCommand { sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent: " + schematic); return true; } - if (!PlotMain.hasPermission(plr, "plots.claim." + schematic) && !plr.hasPermission("plots.admin.command.schematic")) { - PlayerFunctions.sendMessage(plr, C.NO_SCHEMATIC_PERMISSION, schematic); + if (!Permissions.hasPermission(plr, "plots.claim." + schematic) && !plr.hasPermission("plots.admin.command.schematic")) { + MainUtil.sendMessage(plr, C.NO_SCHEMATIC_PERMISSION, schematic); return true; } // } } - - PlotWorld plotworld = PlotMain.getWorldSettings(world); + final String worldname = world; + final PlotWorld plotworld = PlotSquared.getPlotWorld(worldname); if (plotworld.TYPE == 2) { - Location loc = plr.getLocation(); - Plot plot = PlotHelper.getCurrentPlot(loc); - if (plot == null) { - return sendMessage(plr, C.NOT_IN_PLOT); - } - PlotCluster cluster = ClusterManager.getCluster(loc); - // Must be standing in a cluster - if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + final Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(new Location(worldname, loc.getX(), loc.getY(), loc.getZ())); + if (plot == null) { + return sendMessage(plr, C.NOT_IN_PLOT); + } + final PlotCluster cluster = ClusterManager.getCluster(loc); + // Must be standing in a cluster + if (cluster == null) { + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } - PlotId bot = cluster.getP1(); - PlotId top = cluster.getP2(); - PlotId origin = new PlotId((bot.x + top.x) / 2, (bot.y + top.y) / 2); - PlotId id = new PlotId(0, 0); - int width = Math.max(top.x - bot.x + 1, top.y - bot.y + 1); - int max = width * width; - // - for (int i = 0; i <= max; i++) { - PlotId currentId = new PlotId(origin.x + id.x, origin.y + id.y); - Plot current = PlotHelper.getPlot(world, currentId); - if (current != null && (current.hasOwner() == false) && (current.settings.isMerged() == false) && cluster.equals(ClusterManager.getCluster(current))) { - Claim.claimPlot(plr, current, true, true); - return true; - } - id = getNextPlot(id, 1); - } - - // no free plots - PlayerFunctions.sendMessage(plr, C.NO_FREE_PLOTS); - return false; + final PlotId bot = cluster.getP1(); + final PlotId top = cluster.getP2(); + final PlotId origin = new PlotId((bot.x + top.x) / 2, (bot.y + top.y) / 2); + PlotId id = new PlotId(0, 0); + final int width = Math.max((top.x - bot.x) + 1, (top.y - bot.y) + 1); + final int max = width * width; + // + for (int i = 0; i <= max; i++) { + final PlotId currentId = new PlotId(origin.x + id.x, origin.y + id.y); + final Plot current = MainUtil.getPlot(worldname, currentId); + if ((current != null) && (current.hasOwner() == false) && (current.settings.isMerged() == false) && cluster.equals(ClusterManager.getCluster(current))) { + Claim.claimPlot(plr, current, true, true); + return true; + } + id = getNextPlot(id, 1); + } + // no free plots + MainUtil.sendMessage(plr, C.NO_FREE_PLOTS); + return false; } - boolean br = false; - String worldname = world.getName(); if ((size_x == 1) && (size_z == 1)) { while (!br) { - final Plot plot = PlotHelper.getPlot(world, getLastPlot(worldname)); + final Plot plot = MainUtil.getPlot(worldname, getLastPlot(worldname)); if ((plot.owner == null)) { Claim.claimPlot(plr, plot, true, true); br = true; } - PlotHelper.lastPlot.put(worldname, getNextPlot(getLastPlot(worldname), 1)); + MainUtil.lastPlot.put(worldname, getNextPlot(getLastPlot(worldname), 1)); } } else { boolean lastPlot = true; while (!br) { final PlotId start = getNextPlot(getLastPlot(worldname), 1); // Checking if the current set of plots is a viable option. - PlotHelper.lastPlot.put(worldname, start); + MainUtil.lastPlot.put(worldname, start); if (lastPlot) { } - if ((PlotMain.getPlots(world).get(start) != null) && (PlotMain.getPlots(world).get(start).owner != null)) { + if ((PlotSquared.getPlots(worldname).get(start) != null) && (PlotSquared.getPlots(worldname).get(start).owner != null)) { continue; } else { lastPlot = false; } final PlotId end = new PlotId((start.x + size_x) - 1, (start.y + size_z) - 1); - if (PlotHelper.isUnowned(world, start, end)) { + if (MainUtil.isUnowned(worldname, start, end)) { for (int i = start.x; i <= end.x; i++) { for (int j = start.y; j <= end.y; j++) { - final Plot plot = PlotHelper.getPlot(world, new PlotId(i, j)); + final Plot plot = MainUtil.getPlot(worldname, new PlotId(i, j)); final boolean teleport = ((i == end.x) && (j == end.y)); Claim.claimPlot(plr, plot, teleport, true); } } - if (!PlotHelper.mergePlots(plr, world, PlayerFunctions.getPlotSelectionIds(start, end))) { + if (!MainUtil.mergePlots(worldname, MainUtil.getPlotSelectionIds(start, end), true)) { return false; } br = true; } } } - PlotHelper.lastPlot.put(worldname, new PlotId(0, 0)); + MainUtil.lastPlot.put(worldname, new PlotId(0, 0)); return true; } - - public PlotId getLastPlot(String world) { - if (PlotHelper.lastPlot == null || !PlotHelper.lastPlot.containsKey(world)) { - PlotHelper.lastPlot.put(world, new PlotId(0,0)); - } - return PlotHelper.lastPlot.get(world); - } + public PlotId getLastPlot(final String world) { + if ((MainUtil.lastPlot == null) || !MainUtil.lastPlot.containsKey(world)) { + MainUtil.lastPlot.put(world, new PlotId(0, 0)); + } + return MainUtil.lastPlot.get(world); + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Ban.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Ban.java deleted file mode 100644 index 6b9b2c751..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Ban.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.intellectualcrafters.plot.commands; - -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; - -/** - * Created 2014-11-09 for PlotSquared - * - * @author Citymonstret - */ -public class Ban extends SubCommand { - - public Ban() { - super(Command.BAN, "Alias for /plot denied add", "/plot ban [player]", CommandCategory.ACTIONS, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (args.length < 1) { - return PlayerFunctions.sendMessage(plr, "&cUsage: &c" + this.usage); - } - if (!PlayerFunctions.isInPlot(plr)) { - return sendMessage(plr, C.NOT_IN_PLOT); - } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!plot.hasRights(plr)) { - return sendMessage(plr, C.NO_PLOT_PERMS); - } - return plr.performCommand("plot denied add " + args[0]); - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/BukkitCommand.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/BukkitCommand.java new file mode 100644 index 000000000..852bfeaa2 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/BukkitCommand.java @@ -0,0 +1,65 @@ +package com.intellectualcrafters.plot.commands; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; + +/** + * Created 2015-02-20 for PlotSquared + * + * @author Citymonstret + */ +public class BukkitCommand implements CommandExecutor, TabCompleter { + + @Override + public boolean onCommand(CommandSender commandSender, Command command, String commandLabel, String[] args) { + Player player = null; + if (commandSender instanceof Player) { + player = (Player) commandSender; + } + return MainCommand.onCommand(BukkitUtil.getPlayer(player), commandLabel, args); + } + + @Override + public List onTabComplete(final CommandSender commandSender, final Command command, final String s, final String[] strings) { + if (!(commandSender instanceof Player)) { + return null; + } + final PlotPlayer player = BukkitUtil.getPlayer((Player) commandSender); + if (strings.length < 1) { + if ((strings.length == 0) || "plots".startsWith(s)) { + return Arrays.asList("plots"); + } + } + if (strings.length > 1) { + return null; + } + if (!command.getLabel().equalsIgnoreCase("plots")) { + return null; + } + final List tabOptions = new ArrayList<>(); + final String arg = strings[0].toLowerCase(); + for (final SubCommand cmd : MainCommand.subCommands) { + if (cmd.permission.hasPermission(player)) { + if (cmd.cmd.startsWith(arg)) { + tabOptions.add(cmd.cmd); + } else if (cmd.alias.get(0).startsWith(arg)) { + tabOptions.add(cmd.alias.get(0)); + } + } + } + if (tabOptions.size() > 0) { + return tabOptions; + } + return null; + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Buy.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Buy.java index 74e2444c0..218876b4c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Buy.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Buy.java @@ -18,101 +18,95 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import net.milkbowl.vault.economy.Economy; - -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class Buy extends SubCommand { - public Buy() { super(Command.BUY, "Buy the plot you are standing on", "b", CommandCategory.CLAIMING, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlotMain.useEconomy) { + public boolean execute(final PlotPlayer plr, final String... args) { + if (PlotSquared.economy == null) { return sendMessage(plr, C.ECON_DISABLED); } - World world = plr.getWorld(); - if (!PlotMain.isPlotWorld(world)) { + Location loc = plr.getLocation(); + final String world = loc.getWorld(); + if (!PlotSquared.isPlotWorld(world)) { return sendMessage(plr, C.NOT_IN_PLOT_WORLD); } Plot plot; if (args.length > 0) { try { - String[] split = args[0].split(";"); - PlotId id = new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); - plot = PlotHelper.getPlot(world, id); - } - catch (Exception e) { + final String[] split = args[0].split(";"); + final PlotId id = new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + plot = MainUtil.getPlot(world, id); + } catch (final Exception e) { return sendMessage(plr, C.NOT_VALID_PLOT_ID); } - } - else { - plot = PlayerFunctions.getCurrentPlot(plr); + } else { + plot = MainUtil.getPlot(loc); } if (plot == null) { return sendMessage(plr, C.NOT_IN_PLOT); } - if (PlayerFunctions.getPlayerPlotCount(world, plr) >= PlayerFunctions.getAllowedPlots(plr)) { + int currentPlots = MainUtil.getPlayerPlotCount(world, plr); + if (currentPlots >= MainUtil.getAllowedPlots(plr, currentPlots)) { return sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); } if (!plot.hasOwner()) { return sendMessage(plr, C.PLOT_UNOWNED); } - if (plot.owner.equals(UUIDHandler.getUUID(plr))) { + if (plot.owner.equals(plr.getUUID())) { return sendMessage(plr, C.CANNOT_BUY_OWN); } - Flag flag = FlagManager.getPlotFlag(plot, "price"); + final Flag flag = FlagManager.getPlotFlag(plot, "price"); if (flag == null) { return sendMessage(plr, C.NOT_FOR_SALE); } double initPrice = (double) flag.getValue(); double price = initPrice; - PlotId id = plot.id; - PlotId id2 = PlayerFunctions.getTopPlot(world, plot).id; - int size = PlayerFunctions.getPlotSelectionIds(id, id2).size(); - PlotWorld plotworld = PlotMain.getWorldSettings(world); + final PlotId id = plot.id; + final PlotId id2 = MainUtil.getTopPlot(plot).id; + final int size = MainUtil.getPlotSelectionIds(id, id2).size(); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); if (plotworld.USE_ECONOMY) { price += plotworld.PLOT_PRICE * size; initPrice += plotworld.SELL_PRICE * size; } - if (price > 0d) { - final Economy economy = PlotMain.economy; - if (economy.getBalance(plr) < price) { + if (PlotSquared.economy != null && price > 0d) { + if (EconHandler.getBalance(plr) < price) { return sendMessage(plr, C.CANNOT_AFFORD_PLOT, "" + price); } - economy.withdrawPlayer(plr, price); + EconHandler.withdrawPlayer(plr, price); sendMessage(plr, C.REMOVED_BALANCE, price + ""); - economy.depositPlayer(UUIDHandler.uuidWrapper.getOfflinePlayer(plot.owner), initPrice); - Player owner = UUIDHandler.uuidWrapper.getPlayer(plot.owner); + EconHandler.depositPlayer(UUIDHandler.uuidWrapper.getOfflinePlayer(plot.owner), initPrice); + PlotPlayer owner = UUIDHandler.getPlayer(plot.owner); if (owner != null) { sendMessage(plr, C.PLOT_SOLD, plot.id + "", plr.getName(), initPrice + ""); } FlagManager.removePlotFlag(plot, "price"); } - plot.owner = UUIDHandler.getUUID(plr); + plot.owner = plr.getUUID(); DBFunc.setOwner(plot, plot.owner); - PlayerFunctions.sendMessage(plr, C.CLAIMED); + MainUtil.sendMessage(plr, C.CLAIMED); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Claim.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Claim.java index 15e1367ca..b22686649 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Claim.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Claim.java @@ -18,57 +18,54 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.events.PlayerClaimPlotEvent; -import com.intellectualcrafters.plot.generator.ClassicPlotWorld; -import com.intellectualcrafters.plot.generator.HybridPlotWorld; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.SchematicHandler; /** * @author Citymonstret */ public class Claim extends SubCommand { - public Claim() { super(Command.CLAIM, "Claim the current plot you're standing on.", "claim", CommandCategory.CLAIMING, true); } - - public static boolean claimPlot(final Player player, final Plot plot, final boolean teleport, final boolean auto) { + + public static boolean claimPlot(final PlotPlayer player, final Plot plot, final boolean teleport, final boolean auto) { return claimPlot(player, plot, teleport, "", auto); } - - public static boolean claimPlot(final Player player, final Plot plot, final boolean teleport, final String schematic, final boolean auto) { - if (plot.hasOwner() || plot.settings.isMerged()) { - return false; - } - final PlayerClaimPlotEvent event = new PlayerClaimPlotEvent(player, plot, auto); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - PlotHelper.createPlot(player, plot); - PlotHelper.setSign(player, plot); - PlayerFunctions.sendMessage(player, C.CLAIMED); + + public static boolean claimPlot(final PlotPlayer player, final Plot plot, final boolean teleport, final String schematic, final boolean auto) { + if (plot.hasOwner() || plot.settings.isMerged()) { + return false; + } + // FIXME claim plot event +// final PlayerClaimPlotEvent event = new PlayerClaimPlotEvent(player, plot, auto); +// Bukkit.getPluginManager().callEvent(event); +// boolean result = event.isCancelled(); + boolean result = true; + + if (!result) { + MainUtil.createPlot(player.getUUID(), plot); + MainUtil.setSign(player.getName(), plot); + MainUtil.sendMessage(player, C.CLAIMED); + Location loc = player.getLocation(); if (teleport) { - PlotMain.teleportPlayer(player, player.getLocation(), plot); + MainUtil.teleportPlayer(player, loc, plot); } - World world = plot.getWorld(); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - - final Plot plot2 = PlotMain.getPlots(player.getWorld()).get(plot.id); - + final String world = plot.world; + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final Plot plot2 = PlotSquared.getPlots(world).get(plot.id); if (plotworld.SCHEMATIC_ON_CLAIM) { SchematicHandler.Schematic sch; if (schematic.equals("")) { @@ -81,37 +78,39 @@ public class Claim extends SubCommand { } SchematicHandler.paste(player.getLocation(), sch, plot2, 0, 0); } - PlotMain.getPlotManager(plot.world).claimPlot(world, plotworld, plot); - PlotHelper.update(player.getLocation()); + PlotSquared.getPlotManager(world).claimPlot(plotworld, plot); + MainUtil.update(loc); } - return event.isCancelled(); + return !result; } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { String schematic = ""; if (args.length >= 1) { schematic = args[0]; } - if (!PlayerFunctions.isInPlot(plr)) { + Location loc = plr.getLocation(); + Plot plot = MainUtil.getPlot(loc); + if (plot == null) { return sendMessage(plr, C.NOT_IN_PLOT); } - if (PlayerFunctions.getPlayerPlotCount(plr.getWorld(), plr) >= PlayerFunctions.getAllowedPlots(plr)) { + int currentPlots = MainUtil.getPlayerPlotCount(loc.getWorld(), plr); + if (currentPlots >= MainUtil.getAllowedPlots(plr, currentPlots)) { return sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if (plot.hasOwner()) { return sendMessage(plr, C.PLOT_IS_CLAIMED); } - final PlotWorld world = PlotMain.getWorldSettings(plot.getWorld()); - if (PlotMain.useEconomy && world.USE_ECONOMY) { + final PlotWorld world = PlotSquared.getPlotWorld(plot.world); + if (PlotSquared.economy != null && world.USE_ECONOMY) { final double cost = world.PLOT_PRICE; if (cost > 0d) { - final Economy economy = PlotMain.economy; - if (economy.getBalance(plr) < cost) { + final Economy economy = PlotSquared.economy; + if (EconHandler.getBalance(plr) < cost) { return sendMessage(plr, C.CANNOT_AFFORD_PLOT, "" + cost); } - economy.withdrawPlayer(plr, cost); + EconHandler.withdrawPlayer(plr, cost); sendMessage(plr, C.REMOVED_BALANCE, cost + ""); } } @@ -120,12 +119,11 @@ public class Claim extends SubCommand { if (!world.SCHEMATICS.contains(schematic.toLowerCase())) { return sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent: " + schematic); } - if (!PlotMain.hasPermission(plr, "plots.claim." + schematic) && !plr.hasPermission("plots.admin.command.schematic")) { + if (!Permissions.hasPermission(plr, "plots.claim." + schematic) && !plr.hasPermission("plots.admin.command.schematic")) { return sendMessage(plr, C.NO_SCHEMATIC_PERMISSION, schematic); } } } - return !claimPlot(plr, plot, false, schematic, false) || sendMessage(plr, C.PLOT_NOT_CLAIMED); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java index e52570c5a..2afd14432 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java @@ -18,71 +18,74 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Clear extends SubCommand { - public Clear() { super(Command.CLEAR, "Clear a plot", "clear", CommandCategory.ACTIONS, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr == null) { // Is console if (args.length < 2) { - PlotMain.sendConsoleSenderMessage("You need to specify two arguments: ID (0;0) & World (world)"); + PlotSquared.log("You need to specify two arguments: ID (0;0) & World (world)"); } else { final PlotId id = PlotId.fromString(args[0]); final String world = args[1]; if (id == null) { - PlotMain.sendConsoleSenderMessage("Invalid Plot ID: " + args[0]); + PlotSquared.log("Invalid Plot ID: " + args[0]); } else { - if (!PlotMain.isPlotWorld(world)) { - PlotMain.sendConsoleSenderMessage("Invalid plot world: " + world); + if (!PlotSquared.isPlotWorld(world)) { + PlotSquared.log("Invalid plot world: " + world); } else { - final Plot plot = PlotHelper.getPlot(Bukkit.getWorld(world), id); + final Plot plot = MainUtil.getPlot(world, id); if (plot == null) { - PlotMain.sendConsoleSenderMessage("Could not find plot " + args[0] + " in world " + world); + PlotSquared.log("Could not find plot " + args[0] + " in world " + world); } else { - plot.clear(null, false); - PlotMain.sendConsoleSenderMessage("Plot " + plot.getId().toString() + " cleared."); + MainUtil.clear(world, plot, true, null); + PlotSquared.log("Plot " + plot.getId().toString() + " cleared."); } } } } return true; } - - if (!PlayerFunctions.isInPlot(plr)) { + Location loc = plr.getLocation(); + Plot plot = MainUtil.getPlot(loc); + if (plot == null) { return sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!PlayerFunctions.getTopPlot(plr.getWorld(), plot).equals(PlayerFunctions.getBottomPlot(plr.getWorld(), plot))) { + if (!MainUtil.getTopPlot(plot).equals(MainUtil.getBottomPlot( plot))) { return sendMessage(plr, C.UNLINK_REQUIRED); } - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.clear")) { + if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !Permissions.hasPermission(plr, "plots.admin.command.clear")) { return sendMessage(plr, C.NO_PLOT_PERMS); } assert plot != null; - plot.clear(plr, false); - + final long start = System.currentTimeMillis(); + boolean result = MainUtil.clearAsPlayer(plot, false, new Runnable() { + @Override + public void run() { + MainUtil.sendMessage(plr, C.CLEARING_DONE, "" + (System.currentTimeMillis() - start)); + } + }); + if (!result) { + MainUtil.sendMessage(plr, C.WAIT_FOR_TIMER); + } // sign - // wall - - return true; + return result; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clipboard.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clipboard.java deleted file mode 100644 index 90245da2f..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clipboard.java +++ /dev/null @@ -1,58 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -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.object.PlotId; -import com.intellectualcrafters.plot.object.PlotSelection; -import com.intellectualcrafters.plot.util.PlayerFunctions; - -public class Clipboard extends SubCommand { - - public Clipboard() { - super(Command.CLIPBOARD, "View information about your current copy", "clipboard", CommandCategory.INFO, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (!currentSelection.containsKey(plr.getName())) { - return sendMessage(plr, C.NO_CLIPBOARD); - } - final PlotSelection selection = currentSelection.get(plr.getName()); - - final PlotId plotId = selection.getPlot().getId(); - final int width = selection.getWidth(); - final int total = selection.getBlocks().length; - - String message = C.CLIPBOARD_INFO.s(); - - message = message.replace("%id", plotId.toString()).replace("%width", width + "").replace("%total", total + ""); - - PlayerFunctions.sendMessage(plr, message); - - return true; - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Cluster.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Cluster.java index dfc7ce8f5..a52b5a10e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Cluster.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Cluster.java @@ -18,117 +18,108 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; import java.util.UUID; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.generator.BlockPopulator; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.generator.AugmentedPopulator; import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotCluster; import com.intellectualcrafters.plot.object.PlotClusterId; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.util.ClusterManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Cluster extends SubCommand { - public Cluster() { super(Command.CLUSTER, "Manage a plot cluster", "cluster", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { // list, create, delete, resize, invite, kick, leave, helpers, tp, sethome - if (args.length == 0) { // return arguments - PlayerFunctions.sendMessage(plr, C.CLUSTER_AVAILABLE_ARGS); + MainUtil.sendMessage(plr, C.CLUSTER_AVAILABLE_ARGS); return false; } - String sub = args[0].toLowerCase(); + final String sub = args[0].toLowerCase(); switch (sub) { case "l": case "list": { - if (!PlotMain.hasPermission(plr, "plots.cluster.list")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.list"); + if (!Permissions.hasPermission(plr, "plots.cluster.list")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.list"); return false; } if (args.length != 1) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster list"); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster list"); return false; } - HashSet clusters = ClusterManager.getClusters(plr.getWorld()); - PlayerFunctions.sendMessage(plr, C.CLUSTER_LIST_HEADING, clusters.size() + ""); - for (PlotCluster cluster : clusters) { + final HashSet clusters = ClusterManager.getClusters(plr.getLocation().getWorld()); + MainUtil.sendMessage(plr, C.CLUSTER_LIST_HEADING, clusters.size() + ""); + for (final PlotCluster cluster : clusters) { // Ignore unmanaged clusters - String name = "'" + cluster.getName() + "' : " + cluster.toString(); + final String name = "'" + cluster.getName() + "' : " + cluster.toString(); if (UUIDHandler.getUUID(plr).equals(cluster.owner)) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, "&a" + name); - } - else if (cluster.helpers.contains(UUIDHandler.getUUID(plr))) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, "&3" + name); - } - else if (cluster.invited.contains(UUIDHandler.getUUID(plr))) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, "&9" + name); - } - else { - PlayerFunctions.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, cluster.toString()); + MainUtil.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, "&a" + name); + } else if (cluster.helpers.contains(UUIDHandler.getUUID(plr))) { + MainUtil.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, "&3" + name); + } else if (cluster.invited.contains(UUIDHandler.getUUID(plr))) { + MainUtil.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, "&9" + name); + } else { + MainUtil.sendMessage(plr, C.CLUSTER_LIST_ELEMENT, cluster.toString()); } } return true; } case "c": case "create": { - if (!PlotMain.hasPermission(plr, "plots.cluster.create")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.create"); + if (!Permissions.hasPermission(plr, "plots.cluster.create")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.create"); return false; } if (args.length != 4) { - PlotId id = ClusterManager.estimatePlotId(plr.getLocation()); - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster create "); - PlayerFunctions.sendMessage(plr, C.CLUSTER_CURRENT_PLOTID, "" + id); + final PlotId id = ClusterManager.estimatePlotId(plr.getLocation()); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster create "); + MainUtil.sendMessage(plr, C.CLUSTER_CURRENT_PLOTID, "" + id); return false; } // check pos1 / pos2 - PlotId pos1 = PlotHelper.parseId(args[2]); - PlotId pos2 = PlotHelper.parseId(args[3]); - if (pos1 == null || pos2 == null) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); + final PlotId pos1 = MainUtil.parseId(args[2]); + final PlotId pos2 = MainUtil.parseId(args[3]); + if ((pos1 == null) || (pos2 == null)) { + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_ID); return false; } // check if name is taken - String name = args[1]; - for (PlotCluster cluster : ClusterManager.getClusters(plr.getWorld())) { + final String name = args[1]; + for (final PlotCluster cluster : ClusterManager.getClusters(plr.getLocation().getWorld())) { if (name.equals(cluster.getName())) { - PlayerFunctions.sendMessage(plr, C.ALIAS_IS_TAKEN); - return false; + MainUtil.sendMessage(plr, C.ALIAS_IS_TAKEN); + return false; } } //check if overlap - PlotClusterId id = new PlotClusterId(pos1, pos2); - HashSet intersects = ClusterManager.getIntersects(plr.getWorld().getName(), id); - if (intersects.size() > 0 || pos2.x < pos1.x || pos2.y < pos1.y) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_INTERSECTION, intersects.size() + ""); - return false; + final PlotClusterId id = new PlotClusterId(pos1, pos2); + final HashSet intersects = ClusterManager.getIntersects(plr.getLocation().getWorld(), id); + if ((intersects.size() > 0) || (pos2.x < pos1.x) || (pos2.y < pos1.y)) { + MainUtil.sendMessage(plr, C.CLUSTER_INTERSECTION, intersects.size() + ""); + return false; } // create cluster - String world = plr.getWorld().getName(); - PlotCluster cluster = new PlotCluster(world, pos1, pos2, UUIDHandler.getUUID(plr)); + final String world = plr.getLocation().getWorld(); + final PlotCluster cluster = new PlotCluster(world, pos1, pos2, UUIDHandler.getUUID(plr)); cluster.settings.setAlias(name); DBFunc.createCluster(world, cluster); if (!ClusterManager.clusters.containsKey(world)) { @@ -136,234 +127,225 @@ public class Cluster extends SubCommand { } ClusterManager.clusters.get(world).add(cluster); // Add any existing plots to the current cluster - for (Plot plot : PlotMain.getPlots(plr.getWorld()).values()) { - PlotCluster current = ClusterManager.getCluster(plot); + for (final Plot plot : PlotSquared.getPlots(plr.getLocation().getWorld()).values()) { + final PlotCluster current = ClusterManager.getCluster(plot); if (cluster.equals(current) && !cluster.hasRights(plot.owner)) { cluster.invited.add(plot.owner); DBFunc.setInvited(world, cluster, plot.owner); } } - if (!PlotMain.isPlotWorld(world)) { - PlotMain.config.createSection("worlds." + world); - PlotMain.loadWorld(plr.getWorld()); + if (!PlotSquared.isPlotWorld(world)) { + PlotSquared.config.createSection("worlds." + world); + PlotSquared.loadWorld(world, null); } - PlayerFunctions.sendMessage(plr, C.CLUSTER_ADDED); + MainUtil.sendMessage(plr, C.CLUSTER_ADDED); return true; } case "disband": case "del": case "delete": { - if (!PlotMain.hasPermission(plr, "plots.cluster.delete")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.delete"); + if (!Permissions.hasPermission(plr, "plots.cluster.delete")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.delete"); return false; } - if (args.length != 1 && args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster delete [name]"); + if ((args.length != 1) && (args.length != 2)) { + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster delete [name]"); return false; } PlotCluster cluster; if (args.length == 2) { - cluster = ClusterManager.getCluster(plr.getWorld().getName(), args[1]); + cluster = ClusterManager.getCluster(plr.getLocation().getWorld(), args[1]); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_CLUSTER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_CLUSTER, args[1]); return false; } - } - else { + } else { cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } } if (!cluster.owner.equals(UUIDHandler.getUUID(plr))) { - if (!PlotMain.hasPermission(plr, "plots.cluster.delete.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.delete.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.delete.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.delete.other"); return false; } } - PlotWorld plotworld = PlotMain.getWorldSettings(plr.getWorld()); + final PlotWorld plotworld = PlotSquared.getPlotWorld(plr.getLocation().getWorld()); if (plotworld.TYPE == 2) { - ArrayList toRemove = new ArrayList<>(); - for (Plot plot : PlotMain.getPlots(plr.getWorld()).values()) { - PlotCluster other = ClusterManager.getCluster(plot); + final ArrayList toRemove = new ArrayList<>(); + for (final Plot plot : PlotSquared.getPlots(plr.getLocation().getWorld()).values()) { + final PlotCluster other = ClusterManager.getCluster(plot); if (cluster.equals(other)) { toRemove.add(plot); } } - for (Plot plot : toRemove) { + for (final Plot plot : toRemove) { DBFunc.delete(plot.world, plot); } } DBFunc.delete(cluster); if (plotworld.TYPE == 2) { - for (Iterator iterator = plr.getWorld().getPopulators().iterator(); iterator.hasNext();) { - BlockPopulator populator = iterator.next(); - if (populator instanceof AugmentedPopulator) { - if (((AugmentedPopulator) populator).cluster.equals(cluster)) { - iterator.remove(); - } - } - } + AugmentedPopulator.removePopulator(plr.getLocation().getWorld(), cluster); } - for (String set : ClusterManager.clusters.keySet()) { + for (final String set : ClusterManager.clusters.keySet()) { } ClusterManager.last = null; ClusterManager.clusters.get(cluster.world).remove(cluster); ClusterManager.regenCluster(cluster); - PlayerFunctions.sendMessage(plr, C.CLUSTER_DELETED); + MainUtil.sendMessage(plr, C.CLUSTER_DELETED); return true; } case "res": case "resize": { - if (!PlotMain.hasPermission(plr, "plots.cluster.resize")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.resize"); + if (!Permissions.hasPermission(plr, "plots.cluster.resize")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.resize"); return false; } if (args.length != 3) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster resize "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster resize "); return false; } // check pos1 / pos2 - PlotId pos1 = PlotHelper.parseId(args[1]); - PlotId pos2 = PlotHelper.parseId(args[2]); - if (pos1 == null || pos2 == null) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); + final PlotId pos1 = MainUtil.parseId(args[1]); + final PlotId pos2 = MainUtil.parseId(args[2]); + if ((pos1 == null) || (pos2 == null)) { + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_ID); return false; } // check if in cluster - PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); + final PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } if (!cluster.hasHelperRights(UUIDHandler.getUUID(plr))) { - if (!PlotMain.hasPermission(plr, "plots.cluster.resize.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.resize.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.resize.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.resize.other"); return false; } } //check if overlap - PlotClusterId id = new PlotClusterId(pos1, pos2); - HashSet intersects = ClusterManager.getIntersects(plr.getWorld().getName(), id); + final PlotClusterId id = new PlotClusterId(pos1, pos2); + final HashSet intersects = ClusterManager.getIntersects(plr.getLocation().getWorld(), id); if (intersects.size() > 1) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_INTERSECTION, (intersects.size() - 1) + ""); - return false; + MainUtil.sendMessage(plr, C.CLUSTER_INTERSECTION, (intersects.size() - 1) + ""); + return false; } // resize cluster DBFunc.resizeCluster(cluster, id); - PlayerFunctions.sendMessage(plr, C.CLUSTER_RESIZED); + MainUtil.sendMessage(plr, C.CLUSTER_RESIZED); return true; } case "reg": case "regenerate": case "regen": { - if (!PlotMain.hasPermission(plr, "plots.cluster.delete")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.regen"); + if (!Permissions.hasPermission(plr, "plots.cluster.delete")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.regen"); return false; } - if (args.length != 1 && args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster regen [name]"); + if ((args.length != 1) && (args.length != 2)) { + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster regen [name]"); return false; } PlotCluster cluster; if (args.length == 2) { - cluster = ClusterManager.getCluster(plr.getWorld().getName(), args[1]); + cluster = ClusterManager.getCluster(plr.getLocation().getWorld(), args[1]); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_CLUSTER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_CLUSTER, args[1]); return false; } - } - else { + } else { cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } } if (!cluster.owner.equals(UUIDHandler.getUUID(plr))) { - if (!PlotMain.hasPermission(plr, "plots.cluster.regen.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.regen.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.regen.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.regen.other"); return false; } } ClusterManager.regenCluster(cluster); - PlayerFunctions.sendMessage(plr, C.CLUSTER_REGENERATED); + MainUtil.sendMessage(plr, C.CLUSTER_REGENERATED); return true; } - case "add": - case "inv": + case "add": + case "inv": case "invite": { - if (!PlotMain.hasPermission(plr, "plots.cluster.invite")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.invite"); + if (!Permissions.hasPermission(plr, "plots.cluster.invite")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.invite"); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster invite "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster invite "); return false; } // check if in cluster - PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); + final PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } if (!cluster.hasHelperRights(UUIDHandler.getUUID(plr))) { - if (!PlotMain.hasPermission(plr, "plots.cluster.invite.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.invite.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.invite.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.invite.other"); return false; } } // check uuid - UUID uuid = UUIDHandler.getUUID(args[1]); + final UUID uuid = UUIDHandler.getUUID(args[1]); if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[1]); return false; } if (!cluster.hasRights(uuid)) { // add the user if not added cluster.invited.add(uuid); - String world = plr.getWorld().getName(); + final String world = plr.getLocation().getWorld(); DBFunc.setInvited(world, cluster, uuid); - Player player = UUIDHandler.uuidWrapper.getPlayer(uuid); + PlotPlayer player = UUIDHandler.getPlayer(uuid); if (player != null) { - PlayerFunctions.sendMessage(player, C.CLUSTER_INVITED, cluster.getName()); + MainUtil.sendMessage(player, C.CLUSTER_INVITED, cluster.getName()); } } - PlayerFunctions.sendMessage(plr, C.CLUSTER_ADDED_USER); + MainUtil.sendMessage(plr, C.CLUSTER_ADDED_USER); return true; } case "k": case "remove": case "kick": { - if (!PlotMain.hasPermission(plr, "plots.cluster.kick")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.kick"); + if (!Permissions.hasPermission(plr, "plots.cluster.kick")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.kick"); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster kick "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster kick "); return false; } - PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); + final PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } if (!cluster.hasHelperRights(UUIDHandler.getUUID(plr))) { - if (!PlotMain.hasPermission(plr, "plots.cluster.kick.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.kick.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.kick.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.kick.other"); return false; } } // check uuid - UUID uuid = UUIDHandler.getUUID(args[1]); + final UUID uuid = UUIDHandler.getUUID(args[1]); if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[1]); return false; } // Can't kick if the player is yourself, the owner, or not added to the cluster if (uuid.equals(UUIDHandler.getUUID(plr)) || uuid.equals(cluster.owner) || !cluster.hasRights(uuid)) { - PlayerFunctions.sendMessage(plr, C.CANNOT_KICK_PLAYER, cluster.getName()); + MainUtil.sendMessage(plr, C.CANNOT_KICK_PLAYER, cluster.getName()); return false; } if (cluster.helpers.contains(uuid)) { @@ -372,52 +354,51 @@ public class Cluster extends SubCommand { } cluster.invited.remove(uuid); DBFunc.removeInvited(cluster, uuid); - Player player = UUIDHandler.uuidWrapper.getPlayer(uuid); + PlotPlayer player = UUIDHandler.getPlayer(uuid); if (player != null) { - PlayerFunctions.sendMessage(player, C.CLUSTER_REMOVED, cluster.getName()); + MainUtil.sendMessage(player, C.CLUSTER_REMOVED, cluster.getName()); } - for (Plot plot : PlotMain.getPlots(plr.getWorld(), uuid)) { - PlotCluster current = ClusterManager.getCluster(plot); - if (current != null && current.equals(cluster)) { - String world = plr.getWorld().getName(); + for (final Plot plot : PlotSquared.getPlots(plr.getLocation().getWorld(), uuid)) { + final PlotCluster current = ClusterManager.getCluster(plot); + if ((current != null) && current.equals(cluster)) { + final String world = plr.getLocation().getWorld(); DBFunc.delete(world, plot); } } - PlayerFunctions.sendMessage(plr, C.CLUSTER_KICKED_USER); + MainUtil.sendMessage(plr, C.CLUSTER_KICKED_USER); return true; } case "quit": case "leave": { - if (!PlotMain.hasPermission(plr, "plots.cluster.leave")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.leave"); + if (!Permissions.hasPermission(plr, "plots.cluster.leave")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.leave"); return false; } - if (args.length != 1 && args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster leave [name]"); + if ((args.length != 1) && (args.length != 2)) { + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster leave [name]"); return false; } PlotCluster cluster; if (args.length == 2) { - cluster = ClusterManager.getCluster(plr.getWorld().getName(), args[1]); + cluster = ClusterManager.getCluster(plr.getLocation().getWorld(), args[1]); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_CLUSTER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_CLUSTER, args[1]); return false; } - } - else { + } else { cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } } - UUID uuid = UUIDHandler.getUUID(plr); + final UUID uuid = UUIDHandler.getUUID(plr); if (!cluster.hasRights(uuid)) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_NOT_ADDED); + MainUtil.sendMessage(plr, C.CLUSTER_NOT_ADDED); return false; } if (uuid.equals(cluster.owner)) { - PlayerFunctions.sendMessage(plr, C.CLUSTER_CANNOT_LEAVE); + MainUtil.sendMessage(plr, C.CLUSTER_CANNOT_LEAVE); return false; } if (cluster.helpers.contains(uuid)) { @@ -426,11 +407,11 @@ public class Cluster extends SubCommand { } cluster.invited.remove(uuid); DBFunc.removeInvited(cluster, uuid); - PlayerFunctions.sendMessage(plr, C.CLUSTER_REMOVED, cluster.getName()); - for (Plot plot : PlotMain.getPlots(plr.getWorld(), uuid)) { - PlotCluster current = ClusterManager.getCluster(plot); - if (current != null && current.equals(cluster)) { - String world = plr.getWorld().getName(); + MainUtil.sendMessage(plr, C.CLUSTER_REMOVED, cluster.getName()); + for (final Plot plot : PlotSquared.getPlots(plr.getLocation().getWorld(), uuid)) { + final PlotCluster current = ClusterManager.getCluster(plot); + if ((current != null) && current.equals(cluster)) { + final String world = plr.getLocation().getWorld(); DBFunc.delete(world, plot); } } @@ -439,139 +420,135 @@ public class Cluster extends SubCommand { case "admin": case "helper": case "helpers": { - if (!PlotMain.hasPermission(plr, "plots.cluster.helpers")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.helpers"); + if (!Permissions.hasPermission(plr, "plots.cluster.helpers")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.helpers"); return false; } if (args.length != 3) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster helpers "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster helpers "); return false; } - PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); + final PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } - UUID uuid = UUIDHandler.getUUID(args[2]); + final UUID uuid = UUIDHandler.getUUID(args[2]); if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[1]); return false; } if (args[1].toLowerCase().equals("add")) { cluster.helpers.add(uuid); - return PlayerFunctions.sendMessage(plr, C.CLUSTER_ADDED_HELPER); + return MainUtil.sendMessage(plr, C.CLUSTER_ADDED_HELPER); } if (args[1].toLowerCase().equals("remove")) { cluster.helpers.remove(uuid); - return PlayerFunctions.sendMessage(plr, C.CLUSTER_REMOVED_HELPER); + return MainUtil.sendMessage(plr, C.CLUSTER_REMOVED_HELPER); } - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster helpers "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster helpers "); return false; } case "spawn": case "home": case "tp": { - if (!PlotMain.hasPermission(plr, "plots.cluster.tp")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.tp"); + if (!Permissions.hasPermission(plr, "plots.cluster.tp")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.tp"); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster tp "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster tp "); return false; } - PlotCluster cluster = ClusterManager.getCluster(plr.getWorld().getName(), args[1]); + final PlotCluster cluster = ClusterManager.getCluster(plr.getLocation().getWorld(), args[1]); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_CLUSTER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_CLUSTER, args[1]); return false; } - UUID uuid = UUIDHandler.getUUID(plr); + final UUID uuid = UUIDHandler.getUUID(plr); if (!cluster.hasRights(uuid)) { - if (!PlotMain.hasPermission(plr, "plots.cluster.tp.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.tp.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.tp.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.tp.other"); return false; } } plr.teleport(ClusterManager.getHome(cluster)); - return PlayerFunctions.sendMessage(plr, C.CLUSTER_TELEPORTING); + return MainUtil.sendMessage(plr, C.CLUSTER_TELEPORTING); } case "i": case "info": case "show": case "information": { - if (!PlotMain.hasPermission(plr, "plots.cluster.info")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.info"); + if (!Permissions.hasPermission(plr, "plots.cluster.info")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.info"); return false; } - if (args.length != 1 && args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster info [name]"); + if ((args.length != 1) && (args.length != 2)) { + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster info [name]"); return false; } PlotCluster cluster; if (args.length == 2) { - cluster = ClusterManager.getCluster(plr.getWorld().getName(), args[1]); + cluster = ClusterManager.getCluster(plr.getLocation().getWorld(), args[1]); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_CLUSTER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_CLUSTER, args[1]); return false; } - } - else { + } else { cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } } - String id = cluster.toString(); + final String id = cluster.toString(); String owner = UUIDHandler.getName(cluster.owner); if (owner == null) { owner = "unknown"; } - String name = cluster.getName(); - String size = (cluster.getP2().x - cluster.getP1().x + 1) + "x" + (cluster.getP2().y - cluster.getP1().y + 1); - String rights = cluster.hasRights(UUIDHandler.getUUID(plr)) + ""; - + final String name = cluster.getName(); + final String size = ((cluster.getP2().x - cluster.getP1().x) + 1) + "x" + ((cluster.getP2().y - cluster.getP1().y) + 1); + final String rights = cluster.hasRights(UUIDHandler.getUUID(plr)) + ""; String message = C.CLUSTER_INFO.s(); message = message.replaceAll("%id%", id); message = message.replaceAll("%owner%", owner); message = message.replaceAll("%name%", name); message = message.replaceAll("%size%", size); message = message.replaceAll("%rights%", rights); - - PlayerFunctions.sendMessage(plr, message); + MainUtil.sendMessage(plr, message); return true; } case "sh": case "setspawn": case "sethome": { - if (!PlotMain.hasPermission(plr, "plots.cluster.sethome")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.sethome"); + if (!Permissions.hasPermission(plr, "plots.cluster.sethome")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.sethome"); return false; } - if (args.length != 1 && args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster sethome"); + if ((args.length != 1) && (args.length != 2)) { + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot cluster sethome"); return false; } - PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); + final PlotCluster cluster = ClusterManager.getCluster(plr.getLocation()); if (cluster == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_CLUSTER); + MainUtil.sendMessage(plr, C.NOT_IN_CLUSTER); return false; } if (!cluster.hasHelperRights(UUIDHandler.getUUID(plr))) { - if (!PlotMain.hasPermission(plr, "plots.cluster.sethome.other")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.sethome.other"); + if (!Permissions.hasPermission(plr, "plots.cluster.sethome.other")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.cluster.sethome.other"); return false; } } - Location base = ClusterManager.getClusterBottom(cluster); - base.setY(0); - Location relative = plr.getLocation().subtract(base); - BlockLoc blockloc = new BlockLoc(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()); + final Location base = ClusterManager.getClusterBottom(cluster); + final Location relative = plr.getLocation().subtract(base.getX(), 0, base.getZ()); + final BlockLoc blockloc = new BlockLoc(relative.getX(), relative.getY(), relative.getZ()); cluster.settings.setPosition(blockloc); - DBFunc.setPosition(cluster, relative.getBlockX() + "," + relative.getBlockY() + "," + relative.getBlockZ()); - return PlayerFunctions.sendMessage(plr, C.POSITION_SET); + DBFunc.setPosition(cluster, relative.getX() + "," + relative.getY() + "," + relative.getZ()); + return MainUtil.sendMessage(plr, C.POSITION_SET); } } - PlayerFunctions.sendMessage(plr, C.CLUSTER_AVAILABLE_ARGS); + MainUtil.sendMessage(plr, C.CLUSTER_AVAILABLE_ARGS); return false; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Command.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Command.java index 48c3b8a8c..5ed37a89b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Command.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Command.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; /** @@ -28,7 +27,6 @@ package com.intellectualcrafters.plot.commands; * @author Empire92 */ public enum Command { - // TODO new commands // (economy) // - /plot buy @@ -39,7 +37,7 @@ public enum Command { FLAG("flag", "f"), TARGET("target"), CLUSTER("cluster", "clusters"), - BUY("buy","b"), + BUY("buy", "b"), CREATEROADSCHEMATIC("createroadschematic"), DEBUGROADREGEN("debugroadregen"), DEBUGFIXFLAGS("debugfixflags"), @@ -77,22 +75,19 @@ public enum Command { UNBAN("unban", "unblock"), DATABASE("database", "convert"), TP("tp", "tp"); - /** * Command */ private final String command; - /** * Alias */ private final String alias; - /** * Permission Node */ private final CommandPermission permission; - + /** * @param command Command "name" (/plot [cmd]) */ @@ -101,7 +96,7 @@ public enum Command { this.alias = command; this.permission = new CommandPermission("plots." + command); } - + /** * @param command Command "name" (/plot [cmd]) * @param permission Command Permission Node @@ -111,7 +106,7 @@ public enum Command { this.permission = permission; this.alias = command; } - + /** * @param command Command "name" (/plot [cmd]) * @param alias Command Alias @@ -121,7 +116,7 @@ public enum Command { this.alias = alias; this.permission = new CommandPermission("plots." + command); } - + /** * @param command Command "name" (/plot [cmd]) * @param alias Command Alias @@ -132,21 +127,21 @@ public enum Command { this.alias = alias; this.permission = permission; } - + /** * @return command */ public String getCommand() { return this.command; } - + /** * @return alias */ public String getAlias() { return this.alias; } - + /** * @return permission object * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CommandPermission.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CommandPermission.java index 49b519f95..5bc566019 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CommandPermission.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CommandPermission.java @@ -18,12 +18,10 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.Permissions; /** * Created by Citymonstret on 2014-08-03. @@ -31,25 +29,24 @@ import com.intellectualcrafters.plot.PlotMain; * @author Citymonstret */ public class CommandPermission { - /** * Permission Node */ public final String permission; - + /** * @param permission Command Permission */ public CommandPermission(final String permission) { this.permission = permission.toLowerCase(); } - + /** * @param player Does the player have the permission? * * @return true of player has the required permission node */ - public boolean hasPermission(final Player player) { - return PlotMain.hasPermission(player, this.permission); + public boolean hasPermission(final PlotPlayer player) { + return Permissions.hasPermission(player, this.permission); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Comment.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Comment.java index 3f30d653f..fb87864d3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Comment.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Comment.java @@ -18,47 +18,44 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotComment; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; public class Comment extends SubCommand { - public Comment() { super(Command.COMMENT, "Comment on a plot", "comment", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + Plot plot = MainUtil.getPlot(loc); + if (plot == null) { return sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if (!plot.hasOwner()) { return sendMessage(plr, C.NOT_IN_PLOT); } - final List recipients = Arrays.asList("admin", "owner", "helper", "trusted", "everyone"); - if ((args.length > 1) && recipients.contains(args[0].toLowerCase())) { - - if (PlotMain.hasPermission(plr, "plots.comment." + args[0].toLowerCase())) { + if (Permissions.hasPermission(plr, "plots.comment." + args[0].toLowerCase())) { final String text = StringUtils.join(Arrays.copyOfRange(args, 1, args.length), " "); final PlotComment comment = new PlotComment(text, plr.getName(), recipients.indexOf(args[0].toLowerCase())); plot.settings.addComment(comment); - DBFunc.setComment(plr.getWorld().getName(), plot, comment); + DBFunc.setComment(loc.getWorld(), plot, comment); return sendMessage(plr, C.COMMENT_ADDED); } else { return sendMessage(plr, C.NO_PERMISSION, "plots.comment." + args[0].toLowerCase()); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Condense.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Condense.java index 321696f3d..eb47b126f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Condense.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Condense.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; @@ -28,79 +27,74 @@ import java.util.List; import java.util.Set; 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; public class Condense extends SubCommand { - public static boolean TASK = false; - private static int TASK_ID = 0; public Condense() { super("condense", "plots.admin", "Condense a plotworld", "condense", "", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr != null) { - PlayerFunctions.sendMessage(plr, (C.NOT_CONSOLE)); + MainUtil.sendMessage(plr, (C.NOT_CONSOLE)); return false; } - if (args.length != 2 && args.length != 3) { - PlayerFunctions.sendMessage(plr, "/plot condense [radius]"); + if ((args.length != 2) && (args.length != 3)) { + MainUtil.sendMessage(plr, "/plot condense [radius]"); return false; } - String worldname = args[0]; - final World world = Bukkit.getWorld(worldname); - if (world == null || !PlotMain.isPlotWorld(worldname)) { - PlayerFunctions.sendMessage(plr, "INVALID WORLD"); + final String worldname = args[0]; + if (!BlockManager.manager.isWorld(worldname) || !PlotSquared.isPlotWorld(worldname)) { + MainUtil.sendMessage(plr, "INVALID WORLD"); return false; } switch (args[1].toLowerCase()) { case "start": { if (args.length == 2) { - PlayerFunctions.sendMessage(plr, "/plot condense " + worldname + " start "); + MainUtil.sendMessage(plr, "/plot condense " + worldname + " start "); return false; } if (TASK) { - PlayerFunctions.sendMessage(plr, "TASK ALREADY STARTED"); + MainUtil.sendMessage(plr, "TASK ALREADY STARTED"); return false; } if (args.length == 2) { - PlayerFunctions.sendMessage(plr, "/plot condense " + worldname + " start "); + MainUtil.sendMessage(plr, "/plot condense " + worldname + " start "); return false; } if (!StringUtils.isNumeric(args[2])) { - PlayerFunctions.sendMessage(plr, "INVALID RADIUS"); + MainUtil.sendMessage(plr, "INVALID RADIUS"); return false; } - int radius = Integer.parseInt(args[2]); - Collection plots = PlotMain.getPlots(worldname).values(); - int size = plots.size(); - int minimum_radius = (int) Math.ceil((Math.sqrt(size)/2) + 1); + final int radius = Integer.parseInt(args[2]); + final Collection plots = PlotSquared.getPlots(worldname).values(); + final int size = plots.size(); + final int minimum_radius = (int) Math.ceil((Math.sqrt(size) / 2) + 1); if (radius < minimum_radius) { - PlayerFunctions.sendMessage(plr, "RADIUS TOO SMALL"); + MainUtil.sendMessage(plr, "RADIUS TOO SMALL"); return false; } final List to_move = new ArrayList<>(getPlots(plots, radius)); final List free = new ArrayList<>(); - PlotId start = new PlotId(0,0); - while (start.x <= minimum_radius && start.y <= minimum_radius) { - Plot plot = PlotHelper.getPlot(world, start); + PlotId start = new PlotId(0, 0); + while ((start.x <= minimum_radius) && (start.y <= minimum_radius)) { + final Plot plot = MainUtil.getPlot(worldname, start); if (!plot.hasOwner()) { free.add(plot.id); } start = Auto.getNextPlot(start, 1); } - PlotHelper.move(world, to_move.get(0), free.get(0), new Runnable() { + MainUtil.move(worldname, to_move.get(0), free.get(0), new Runnable() { @Override public void run() { if (!TASK) { @@ -110,25 +104,25 @@ public class Condense extends SubCommand { to_move.remove(0); free.remove(0); int index = 0; - for (PlotId id : to_move) { - Plot plot = PlotHelper.getPlot(world, id); + for (final PlotId id : to_move) { + final Plot plot = MainUtil.getPlot(worldname, id); if (plot.hasOwner()) { break; } index++; } - for (int i = 0; i"); + MainUtil.sendMessage(plr, "/plot condense " + worldname + " info "); return false; } if (!StringUtils.isNumeric(args[2])) { - PlayerFunctions.sendMessage(plr, "INVALID RADIUS"); + MainUtil.sendMessage(plr, "INVALID RADIUS"); return false; } - int radius = Integer.parseInt(args[2]); - Collection plots = PlotMain.getPlots(worldname).values(); - int size = plots.size(); - int minimum_radius = (int) Math.ceil((Math.sqrt(size)/2) + 1); + final int radius = Integer.parseInt(args[2]); + final Collection plots = PlotSquared.getPlots(worldname).values(); + final int size = plots.size(); + final int minimum_radius = (int) Math.ceil((Math.sqrt(size) / 2) + 1); if (radius < minimum_radius) { - PlayerFunctions.sendMessage(plr, "RADIUS TOO SMALL"); + MainUtil.sendMessage(plr, "RADIUS TOO SMALL"); return false; } - int max_move = getPlots(plots, minimum_radius).size(); - int user_move = getPlots(plots, radius).size(); - PlayerFunctions.sendMessage(plr, "=== DEFAULT EVAL ==="); - PlayerFunctions.sendMessage(plr, "MINIMUM RADIUS: " + minimum_radius); - PlayerFunctions.sendMessage(plr, "MAXIMUM MOVES: " + max_move); - PlayerFunctions.sendMessage(plr, "=== INPUT EVAL ==="); - PlayerFunctions.sendMessage(plr, "INPUT RADIUS: " + radius); - PlayerFunctions.sendMessage(plr, "ESTIMATED MOVES: " + user_move); - PlayerFunctions.sendMessage(plr, "ESTIMATED TIME: " + "No idea, times will drastically change based on the system performance and load"); - PlayerFunctions.sendMessage(plr, "&e - Radius is measured in plot width"); + final int max_move = getPlots(plots, minimum_radius).size(); + final int user_move = getPlots(plots, radius).size(); + MainUtil.sendMessage(plr, "=== DEFAULT EVAL ==="); + MainUtil.sendMessage(plr, "MINIMUM RADIUS: " + minimum_radius); + MainUtil.sendMessage(plr, "MAXIMUM MOVES: " + max_move); + MainUtil.sendMessage(plr, "=== INPUT EVAL ==="); + MainUtil.sendMessage(plr, "INPUT RADIUS: " + radius); + MainUtil.sendMessage(plr, "ESTIMATED MOVES: " + user_move); + MainUtil.sendMessage(plr, "ESTIMATED TIME: " + "No idea, times will drastically change based on the system performance and load"); + MainUtil.sendMessage(plr, "&e - Radius is measured in plot width"); return true; } } - PlayerFunctions.sendMessage(plr, "/plot condense " + worldname + " [radius]"); + MainUtil.sendMessage(plr, "/plot condense " + worldname + " [radius]"); return false; } - public Set getPlots(Collection plots, int radius) { - HashSet outside = new HashSet<>(); - for (Plot plot : plots) { - if (plot.id.x > radius || plot.id.x < -radius || plot.id.y > radius || plot.id.y < -radius) { + public Set getPlots(final Collection plots, final int radius) { + final HashSet outside = new HashSet<>(); + for (final Plot plot : plots) { + if ((plot.id.x > radius) || (plot.id.x < -radius) || (plot.id.y > radius) || (plot.id.y < -radius)) { outside.add(plot.id); } } @@ -203,7 +197,6 @@ public class Condense extends SubCommand { } public static void sendMessage(final String message) { - PlotMain.sendConsoleSenderMessage("&3PlotSquared -> Plot condense&8: &7" + message); + PlotSquared.log("&3PlotSquared -> Plot condense&8: &7" + message); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Copy.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Copy.java deleted file mode 100644 index 8cca3264e..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Copy.java +++ /dev/null @@ -1,65 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.commands; - -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.PlotSelection; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; - -public class Copy extends SubCommand { - - public Copy() { - super(Command.COPY, "Copy a plot", "copy", CommandCategory.ACTIONS, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return false; - } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.copy")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); - return false; - } - assert plot != null; - if (plot.settings.isMerged()) { - PlayerFunctions.sendMessage(plr, C.UNLINK_REQUIRED); - return false; - } - final int size = (PlotHelper.getPlotTopLocAbs(plr.getWorld(), plot.getId()).getBlockX() - PlotHelper.getPlotBottomLocAbs(plr.getWorld(), plot.getId()).getBlockX()); - final PlotSelection selection = new PlotSelection(size, plr.getWorld(), plot); - if (PlotSelection.currentSelection.containsKey(plr.getName())) { - PlotSelection.currentSelection.remove(plr.getName()); - } - PlotSelection.currentSelection.put(plr.getName(), selection); - sendMessage(plr, C.CLIPBOARD_SET); - return true; - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CreateRoadSchematic.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CreateRoadSchematic.java index 8e073fa9d..3818d7dbe 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CreateRoadSchematic.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/CreateRoadSchematic.java @@ -18,45 +18,35 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.generator.HybridPlotManager; import com.intellectualcrafters.plot.generator.HybridPlotWorld; +import com.intellectualcrafters.plot.generator.HybridUtils; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; public class CreateRoadSchematic extends SubCommand { - public CreateRoadSchematic() { super(Command.CREATEROADSCHEMATIC, "Add a road schematic to your world using the road around your current plot", "crs", CommandCategory.DEBUG, true); } - + @Override - public boolean execute(final Player player, final String... args) { - - if (!PlayerFunctions.isInPlot(player)) { - PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT); - return false; + public boolean execute(final PlotPlayer player, final String... args) { + Location loc = player.getLocation(); + Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return sendMessage(player, C.NOT_IN_PLOT); } - - if (!(PlotMain.getWorldSettings(player.getWorld()) instanceof HybridPlotWorld)) { + if (!(PlotSquared.getPlotWorld(loc.getWorld()) instanceof HybridPlotWorld)) { return sendMessage(player, C.NOT_IN_PLOT_WORLD); } - - final Plot plot = PlayerFunctions.getCurrentPlot(player); - - HybridPlotManager manager = (HybridPlotManager) PlotMain.getPlotManager(player.getWorld()); - - manager.setupRoadSchematic(plot); - PlotHelper.update(player.getLocation()); - PlayerFunctions.sendMessage(player, "&6Saved new road schematic"); - + HybridUtils.manager.setupRoadSchematic(plot); + MainUtil.update(loc); + MainUtil.sendMessage(player, "&6Saved new road schematic"); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DEOP.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DEOP.java deleted file mode 100644 index 7acd4c1f1..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DEOP.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.intellectualcrafters.plot.commands; - -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; - -/** - * Created 2014-11-09 for PlotSquared - * - * @author Citymonstret - */ -public class DEOP extends SubCommand { - - public DEOP() { - super(Command.DEOP, "Alias for /plot trusted remove", "/plot deop [player]", CommandCategory.ACTIONS, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (args.length < 1) { - return PlayerFunctions.sendMessage(plr, "&cUsage: &c" + this.usage); - } - if (!PlayerFunctions.isInPlot(plr)) { - return sendMessage(plr, C.NOT_IN_PLOT); - } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!plot.hasRights(plr)) { - return sendMessage(plr, C.NO_PLOT_PERMS); - } - return plr.performCommand("plot trusted remove " + args[0]); - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java index 9243e9941..5f0300bcb 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java @@ -7,16 +7,15 @@ 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.PlotSquared; import com.intellectualcrafters.plot.database.MySQL; import com.intellectualcrafters.plot.database.SQLManager; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.StringComparison; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Created 2014-11-15 for PlotSquared @@ -24,31 +23,29 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Citymonstret */ 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() { super(Command.DATABASE, "Convert/Backup Storage", "database [type] [...details]", CommandCategory.DEBUG, false); } - + private static boolean sendMessageU(final UUID uuid, final String msg) { if (uuid == null) { - PlotMain.sendConsoleSenderMessage(msg); + PlotSquared.log(msg); } else { - final Player p = UUIDHandler.uuidWrapper.getPlayer(uuid); + final PlotPlayer p = UUIDHandler.getPlayer(uuid); if ((p != null) && p.isOnline()) { - return PlayerFunctions.sendMessage(p, msg); + return MainUtil.sendMessage(p, msg); } else { return sendMessageU(null, msg); } } return true; } - + public static void insertPlots(final SQLManager manager, final UUID requester, final Connection c) { - final Plugin p = PlotMain.getMain(); - final java.util.Set plots = PlotMain.getPlots(); - p.getServer().getScheduler().runTaskAsynchronously(p, new Runnable() { + final java.util.Set plots = PlotSquared.getPlots(); + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { try { @@ -71,13 +68,13 @@ public class Database extends SubCommand { } }); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { 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) { case "mysql": if (args.length < 6) { @@ -94,7 +91,7 @@ public class Database extends SubCommand { } Connection n; try { - n = new MySQL(PlotMain.getMain(), host, port, database, username, password).openConnection(); + n = new MySQL(PlotSquared.THIS, host, port, database, username, password).openConnection(); // Connection if (n.isClosed()) { return sendMessage(plr, "Failed to open connection"); @@ -138,12 +135,12 @@ public class Database extends SubCommand { } return false; } - - private boolean sendMessage(final Player player, final String msg) { + + private boolean sendMessage(final PlotPlayer player, final String msg) { if (player == null) { - PlotMain.sendConsoleSenderMessage(msg); + PlotSquared.log(msg); } else { - PlayerFunctions.sendMessage(player, msg); + MainUtil.sendMessage(player, msg); } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Debug.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Debug.java index 937e2bf6c..8c9ed5e36 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Debug.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Debug.java @@ -18,34 +18,28 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.util.Lag; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.RUtils; public class Debug extends SubCommand { - public Debug() { super(Command.DEBUG, "Show debug information", "debug [msg]", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if ((args.length > 0) && args[0].equalsIgnoreCase("msg")) { final StringBuilder msg = new StringBuilder(); for (final C c : C.values()) { msg.append(c.s()).append("\n"); } - PlayerFunctions.sendMessage(plr, msg.toString()); + MainUtil.sendMessage(plr, msg.toString()); return true; } StringBuilder information; @@ -58,9 +52,12 @@ public class Debug extends SubCommand { } { final StringBuilder worlds = new StringBuilder(""); - for (final String world : PlotMain.getPlotWorlds()) { + for (final String world : PlotSquared.getPlotWorlds()) { worlds.append(world).append(" "); } + + // FIXME not sure if we actually need any of this debug info as we should just do a timings report which is more detailed anyway + information.append(header); information.append(getSection(section, "Lag / TPS")); information.append(getLine(line, "Ticks Per Second", Lag.getTPS())); @@ -68,16 +65,7 @@ public class Debug extends SubCommand { information.append(getLine(line, "TPS Percentage", (int) Lag.getFullPercentage() + "%")); information.append(getSection(section, "PlotWorld")); information.append(getLine(line, "Plot Worlds", worlds)); - information.append(getLine(line, "Owned Plots", PlotMain.getPlots().size())); - // information.append(getLine(line, "PlotWorld Size", - // PlotHelper.getWorldFolderSize() + "MB")); - for (final String worldname : PlotMain.getPlotWorlds()) { - final World world = Bukkit.getWorld(worldname); - information.append(getLine(line, "World: " + world.getName() + " size", PlotHelper.getWorldFolderSize(world))); - information.append(getLine(line, " - Entities", PlotHelper.getEntities(world))); - information.append(getLine(line, " - Loaded Tile Entities", PlotHelper.getTileEntities(world))); - information.append(getLine(line, " - Loaded Chunks", PlotHelper.getLoadedChunks(world))); - } + information.append(getLine(line, "Owned Plots", PlotSquared.getPlots().size())); information.append(getSection(section, "RAM")); information.append(getLine(line, "Free Ram", RUtils.getFreeRam() + "MB")); information.append(getLine(line, "Total Ram", RUtils.getTotalRam() + "MB")); @@ -86,15 +74,15 @@ public class Debug extends SubCommand { information.append(getLine(line, "View all captions", "/plot debug msg")); } { - PlayerFunctions.sendMessage(plr, information.toString()); + MainUtil.sendMessage(plr, information.toString()); } return true; } - + private String getSection(final String line, final String val) { return line.replaceAll("%val%", val) + "\n"; } - + private String getLine(final String line, final String var, final Object val) { return line.replaceAll("%var%", var).replaceAll("%val%", "" + val) + "\n"; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java index 2d759a3bb..387f53702 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java @@ -18,164 +18,135 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.entity.Player; - import com.google.common.collect.BiMap; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.events.PlayerClaimPlotEvent; +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; 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; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class DebugClaimTest extends SubCommand { - public DebugClaimTest() { super(Command.DEBUGCLAIMTEST, "If you accidentally delete your database, this command will attempt to restore all plots based on the data from the plot signs. Execution time may vary", "debugclaimtest", CommandCategory.DEBUG, false); } - - @SuppressWarnings("unused") - public static boolean claimPlot(final Player player, final Plot plot, final boolean teleport) { + + public static boolean claimPlot(final PlotPlayer player, final Plot plot, final boolean teleport) { return claimPlot(player, plot, teleport, ""); } - - public static boolean claimPlot(final Player player, final Plot plot, final boolean teleport, @SuppressWarnings("unused") final String schematic) { - final PlayerClaimPlotEvent event = new PlayerClaimPlotEvent(player, plot, true); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - PlotHelper.createPlot(player, plot); - PlotHelper.setSign(player, plot); - PlayerFunctions.sendMessage(player, C.CLAIMED); + + public static boolean claimPlot(final PlotPlayer player, final Plot plot, final boolean teleport, final String schematic) { + // FIXME call claim event + // boolean result = event result + boolean result = true; + + if (!result) { + MainUtil.createPlot(player.getUUID(), plot); + MainUtil.setSign(player.getName(), plot); + MainUtil.sendMessage(player, C.CLAIMED); if (teleport) { - PlotMain.teleportPlayer(player, player.getLocation(), plot); + MainUtil.teleportPlayer(player, player.getLocation(), plot); } } - return event.isCancelled(); + return result; } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr == null) { if (args.length < 3) { - return !PlayerFunctions.sendMessage(null, "If you accidentally delete your database, this command will attempt to restore all plots based on the data from the plot signs. \n\n&cMissing world arg /plot debugclaimtest {world} {PlotId min} {PlotId max}"); + return !MainUtil.sendMessage(null, "If you accidentally delete your database, this command will attempt to restore all plots based on the data from the plot signs. \n\n&cMissing world arg /plot debugclaimtest {world} {PlotId min} {PlotId max}"); } - final World world = Bukkit.getWorld(args[0]); - if ((world == null) || !PlotMain.isPlotWorld(world)) { - return !PlayerFunctions.sendMessage(null, "&cInvalid plot world!"); + String world = args[0]; + if (!BlockManager.manager.isWorld(world) || !PlotSquared.isPlotWorld(world)) { + return !MainUtil.sendMessage(null, "&cInvalid plot world!"); } - PlotId min, max; - try { final String[] split1 = args[1].split(";"); final String[] split2 = args[2].split(";"); - min = new PlotId(Integer.parseInt(split1[0]), Integer.parseInt(split1[1])); max = new PlotId(Integer.parseInt(split2[0]), Integer.parseInt(split2[1])); } 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 !MainUtil.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: Found an excess of 250,000 chunks. Limiting search radius... (~3.8 min)"); - - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - + MainUtil.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Beginning sign to plot conversion. This may take a while..."); + MainUtil.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: Found an excess of 250,000 chunks. Limiting search radius... (~3.8 min)"); + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); final ArrayList plots = new ArrayList<>(); - - for (final PlotId id : PlayerFunctions.getPlotSelectionIds(min, max)) { - final Plot plot = PlotHelper.getPlot(world, id); - final boolean contains = PlotMain.getPlots(world).containsKey(plot.id); + for (final PlotId id : MainUtil.getPlotSelectionIds(min, max)) { + final Plot plot = MainUtil.getPlot(world, id); + final boolean contains = PlotSquared.getPlots(world).containsKey(plot.id); if (contains) { - PlayerFunctions.sendMessage(null, " - &cDB Already contains: " + plot.id); + MainUtil.sendMessage(null, " - &cDB Already contains: " + plot.id); continue; } - - final Location loc = manager.getSignLoc(world, plotworld, plot); - - final Chunk chunk = world.getChunkAt(loc); - - if (!chunk.isLoaded()) { - final boolean result = chunk.load(false); - if (!result) { - continue; - } + final Location loc = manager.getSignLoc(plotworld, plot); + ChunkLoc chunk = new ChunkLoc(loc.getX() >> 4, loc.getZ() >> 4); + boolean result = AChunkManager.manager.loadChunk(world, chunk); + if (!result) { + continue; } - - final Block block = world.getBlockAt(loc); - if (block != null) { - if (block.getState() instanceof Sign) { - final Sign sign = (Sign) block.getState(); - String line = sign.getLine(2); - if ((line != null) && (line.length() > 2)) { - line = line.substring(2); - - final BiMap map = UUIDHandler.getUuidMap(); - - UUID uuid = (map.get(new StringWrapper(line))); - - if (uuid == null) { - for (final StringWrapper string : map.keySet()) { - if (string.value.toLowerCase().startsWith(line.toLowerCase())) { - uuid = map.get(string); - break; - } + String[] lines = BlockManager.manager.getSign(loc); + if (lines != null) { + String line = lines[2]; + if ((line != null) && (line.length() > 2)) { + line = line.substring(2); + final BiMap map = UUIDHandler.getUuidMap(); + UUID uuid = (map.get(new StringWrapper(line))); + if (uuid == null) { + for (final StringWrapper string : map.keySet()) { + if (string.value.toLowerCase().startsWith(line.toLowerCase())) { + uuid = map.get(string); + break; } } - if (uuid == null) { - uuid = UUIDHandler.getUUID(line); - } - if (uuid != null) { - PlayerFunctions.sendMessage(null, " - &aFound plot: " + plot.id + " : " + line); - plot.owner = uuid; - plot.hasChanged = true; - plots.add(plot); - } else { - PlayerFunctions.sendMessage(null, " - &cInvalid playername: " + plot.id + " : " + line); - } + } + if (uuid == null) { + uuid = UUIDHandler.getUUID(line); + } + if (uuid != null) { + MainUtil.sendMessage(null, " - &aFound plot: " + plot.id + " : " + line); + plot.owner = uuid; + plot.hasChanged = true; + plots.add(plot); + } else { + MainUtil.sendMessage(null, " - &cInvalid playername: " + plot.id + " : " + line); } } } } - if (plots.size() > 0) { - PlayerFunctions.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Updating '" + plots.size() + "' plots!"); + MainUtil.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Updating '" + plots.size() + "' plots!"); DBFunc.createPlots(plots); DBFunc.createAllSettingsAndHelpers(plots); - for (final Plot plot : plots) { - PlotMain.updatePlot(plot); + PlotSquared.updatePlot(plot); } - - PlayerFunctions.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Complete!"); - + MainUtil.sendMessage(null, "&3Sign Block&8->&3PlotSquared&8: &7Complete!"); } else { - PlayerFunctions.sendMessage(null, "No plots were found for the given search."); + MainUtil.sendMessage(null, "No plots were found for the given search."); } - } else { - PlayerFunctions.sendMessage(plr, "&6This command can only be executed by console as it has been deemed unsafe if abused."); + MainUtil.sendMessage(plr, "&6This command can only be executed by console as it has been deemed unsafe if abused."); } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClear.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClear.java index 2bc50ca22..a741fb0ad 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClear.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClear.java @@ -18,63 +18,57 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.generator.SquarePlotWorld; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.ChunkManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class DebugClear extends SubCommand { - public DebugClear() { super(Command.DEBUGCLEAR, "Clear a plot using a fast experimental algorithm", "debugclear", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr == null) { // Is console if (args.length < 2) { - PlotMain.sendConsoleSenderMessage("You need to specify two arguments: ID (0;0) & World (world)"); + PlotSquared.log("You need to specify two arguments: ID (0;0) & World (world)"); } else { final PlotId id = PlotId.fromString(args[0]); final String world = args[1]; if (id == null) { - PlotMain.sendConsoleSenderMessage("Invalid Plot ID: " + args[0]); + PlotSquared.log("Invalid Plot ID: " + args[0]); } else { - if (!PlotMain.isPlotWorld(world) || !(PlotMain.getWorldSettings(world) instanceof SquarePlotWorld)) { - PlotMain.sendConsoleSenderMessage("Invalid plot world: " + world); + if (!PlotSquared.isPlotWorld(world) || !(PlotSquared.getPlotWorld(world) instanceof SquarePlotWorld)) { + PlotSquared.log("Invalid plot world: " + world); } else { - final Plot plot = PlotHelper.getPlot(Bukkit.getWorld(world), id); + final Plot plot = MainUtil.getPlot(world, id); if (plot == null) { - PlotMain.sendConsoleSenderMessage("Could not find plot " + args[0] + " in world " + world); + PlotSquared.log("Could not find plot " + args[0] + " in world " + world); } else { - World bukkitWorld = Bukkit.getWorld(world); - Location pos1 = PlotHelper.getPlotBottomLoc(bukkitWorld, plot.id).add(1, 0, 1); - Location pos2 = PlotHelper.getPlotTopLoc(bukkitWorld, plot.id); - if (PlotHelper.runners.containsKey(plot)) { - PlayerFunctions.sendMessage(null, C.WAIT_FOR_TIMER); + final Location pos1 = MainUtil.getPlotBottomLoc(world, plot.id).add(1, 0, 1); + final Location pos2 = MainUtil.getPlotTopLoc(world, plot.id); + if (MainUtil.runners.containsKey(plot)) { + MainUtil.sendMessage(null, C.WAIT_FOR_TIMER); return false; } - PlotHelper.runners.put(plot, 1); - ChunkManager.regenerateRegion(pos1, pos2, new Runnable() { + MainUtil.runners.put(plot, 1); + ChunkManager.manager.regenerateRegion(pos1, pos2, new Runnable() { @Override public void run() { - PlotHelper.runners.remove(plot); - PlotMain.sendConsoleSenderMessage("Plot " + plot.getId().toString() + " cleared."); - PlotMain.sendConsoleSenderMessage("&aDone!"); + MainUtil.runners.remove(plot); + PlotSquared.log("Plot " + plot.getId().toString() + " cleared."); + PlotSquared.log("&aDone!"); } }); } @@ -83,38 +77,34 @@ public class DebugClear extends SubCommand { } return true; } - - if (!PlayerFunctions.isInPlot(plr) || !(PlotMain.getWorldSettings(plr.getWorld()) instanceof SquarePlotWorld)) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null || !(PlotSquared.getPlotWorld(loc.getWorld()) instanceof SquarePlotWorld)) { return sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!PlayerFunctions.getTopPlot(plr.getWorld(), plot).equals(PlayerFunctions.getBottomPlot(plr.getWorld(), plot))) { + if (!MainUtil.getTopPlot(plot).equals(MainUtil.getBottomPlot(plot))) { return sendMessage(plr, C.UNLINK_REQUIRED); } - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.debugclear")) { + if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !Permissions.hasPermission(plr, "plots.admin.command.debugclear")) { return sendMessage(plr, C.NO_PLOT_PERMS); } assert plot != null; - World bukkitWorld = plr.getWorld(); - Location pos1 = PlotHelper.getPlotBottomLoc(bukkitWorld, plot.id).add(1, 0, 1); - Location pos2 = PlotHelper.getPlotTopLoc(bukkitWorld, plot.id); - if (PlotHelper.runners.containsKey(plot)) { - PlayerFunctions.sendMessage(null, C.WAIT_FOR_TIMER); + final Location pos1 = MainUtil.getPlotBottomLoc(loc.getWorld(), plot.id).add(1, 0, 1); + final Location pos2 = MainUtil.getPlotTopLoc(loc.getWorld(), plot.id); + if (MainUtil.runners.containsKey(plot)) { + MainUtil.sendMessage(null, C.WAIT_FOR_TIMER); return false; } - PlotHelper.runners.put(plot, 1); - ChunkManager.regenerateRegion(pos1, pos2, new Runnable() { + MainUtil.runners.put(plot, 1); + ChunkManager.manager.regenerateRegion(pos1, pos2, new Runnable() { @Override public void run() { - PlotHelper.runners.remove(plot); - PlayerFunctions.sendMessage(plr, "&aDone!"); + MainUtil.runners.remove(plot); + MainUtil.sendMessage(plr, "&aDone!"); } }); - // sign - // wall - return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java index 38f4ff9b3..66358b578 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugExec.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.io.File; @@ -34,129 +33,125 @@ import java.util.UUID; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.entity.Player; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.BukkitOfflinePlayer; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.ExpireManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class DebugExec extends SubCommand { - - private ArrayList chunks = null; - private World world; - public DebugExec() { - super("debugexec", "plots.admin", "Multi-purpose debug command", "debugexec", "exec", CommandCategory.DEBUG, false); + super("debugexec", "plots.admin", "Multi-purpose debug command", "debugexec", "exec", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player player, final String... args) { - List allowed_params = Arrays.asList(new String[]{"stop-expire","start-expire", "show-expired", "update-expired", "seen", "trim-check"}); + public boolean execute(final PlotPlayer player, final String... args) { + final List allowed_params = Arrays.asList(new String[] { "stop-expire", "start-expire", "show-expired", "update-expired", "seen", "trim-check" }); if (args.length > 0) { - String arg = args[0].toLowerCase(); - switch (arg) { - case "stop-expire": { - if (ExpireManager.task != -1) { - Bukkit.getScheduler().cancelTask(ExpireManager.task); - } - else { - return PlayerFunctions.sendMessage(null, "Task already halted"); - } - ExpireManager.task = -1; - return PlayerFunctions.sendMessage(null, "Cancelled task."); - } - case "start-expire": { - if (ExpireManager.task == -1) { - ExpireManager.runTask(); - } - else { - return PlayerFunctions.sendMessage(null, "Plot expiry task already started"); - } - return PlayerFunctions.sendMessage(null, "Started plot expiry task"); - } - case "update-expired": { - if (args.length > 1) { - World world = Bukkit.getWorld(args[1]); - if (world == null) { - return PlayerFunctions.sendMessage(null, "Invalid world: "+args[1]); - } - PlayerFunctions.sendMessage(null, "Updating expired plot list"); - ExpireManager.updateExpired(args[1]); - return true; - } - return PlayerFunctions.sendMessage(null, "Use /plot debugexec update-expired "); - } - case "show-expired": { - if (args.length > 1) { - World world = Bukkit.getWorld(args[1]); - if (world == null || !ExpireManager.expiredPlots.containsKey(args[1])) { - return PlayerFunctions.sendMessage(null, "Invalid world: "+args[1]); - } - PlayerFunctions.sendMessage(null, "Expired plots (" + ExpireManager.expiredPlots.get(args[1]).size() + "):"); - for (Entry entry : ExpireManager.expiredPlots.get(args[1]).entrySet()) { - Plot plot = entry.getKey(); - Long stamp = entry.getValue(); - PlayerFunctions.sendMessage(null, " - " + plot.world + ";" + plot.id.x + ";" + plot.id.y + ";" + UUIDHandler.getName(plot.owner) +" : " + stamp); - } - return true; - } - return PlayerFunctions.sendMessage(null, "Use /plot debugexec show-expired "); - } - case "seen": { - if (args.length != 2) { - return PlayerFunctions.sendMessage(null, "Use /plot debugexec seen "); - } - UUID uuid = UUIDHandler.getUUID(args[1]); - if (uuid == null) { - return PlayerFunctions.sendMessage(null, "player not found: " + args[1]); - } - OfflinePlayer op = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); - if (op == null || !op.hasPlayedBefore()) { - return PlayerFunctions.sendMessage(null, "player hasn't connected before: " + args[1]); - } - Timestamp stamp = new Timestamp(op.getLastPlayed()); - Date date = new Date(stamp.getTime()); - PlayerFunctions.sendMessage(null, "PLAYER: " + args[1]); - PlayerFunctions.sendMessage(null, "UUID: " + uuid); - PlayerFunctions.sendMessage(null, "Object: " + date.toGMTString()); - PlayerFunctions.sendMessage(null, "GMT: " + date.toGMTString()); - PlayerFunctions.sendMessage(null, "Local: " + date.toLocaleString()); - return true; - } - case "trim-check": { - if (args.length != 2) { - PlayerFunctions.sendMessage(null, "Use /plot debugexec trim-check "); - PlayerFunctions.sendMessage(null, "&7 - Generates a list of regions to trim"); - return PlayerFunctions.sendMessage(null, "&7 - Run after plot expiry has run"); - } - final World world = Bukkit.getWorld(args[1]); - if (world == null || !PlotMain.isPlotWorld(args[1])) { - return PlayerFunctions.sendMessage(null, "Invalid world: "+args[1]); + final String arg = args[0].toLowerCase(); + switch (arg) { + case "stop-expire": { + if (ExpireManager.task != -1) { + Bukkit.getScheduler().cancelTask(ExpireManager.task); + } else { + return MainUtil.sendMessage(null, "Task already halted"); } - final ArrayList empty = new ArrayList<>(); - boolean result = Trim.getTrimRegions(empty, world, new Runnable() { + ExpireManager.task = -1; + return MainUtil.sendMessage(null, "Cancelled task."); + } + case "start-expire": { + if (ExpireManager.task == -1) { + ExpireManager.runTask(); + } else { + return MainUtil.sendMessage(null, "Plot expiry task already started"); + } + return MainUtil.sendMessage(null, "Started plot expiry task"); + } + case "update-expired": { + if (args.length > 1) { + final String world = args[1]; + if (!BlockManager.manager.isWorld(world)) { + return MainUtil.sendMessage(null, "Invalid world: " + args[1]); + } + MainUtil.sendMessage(null, "Updating expired plot list"); + ExpireManager.updateExpired(args[1]); + return true; + } + return MainUtil.sendMessage(null, "Use /plot debugexec update-expired "); + } + case "show-expired": { + if (args.length > 1) { + final String world = args[1]; + if (!BlockManager.manager.isWorld(world)) { + return MainUtil.sendMessage(null, "Invalid world: " + args[1]); + } + if (!ExpireManager.expiredPlots.containsKey(args[1])) { + return MainUtil.sendMessage(null, "No task for world: " + args[1]); + } + MainUtil.sendMessage(null, "Expired plots (" + ExpireManager.expiredPlots.get(args[1]).size() + "):"); + for (final Entry entry : ExpireManager.expiredPlots.get(args[1]).entrySet()) { + final Plot plot = entry.getKey(); + final Long stamp = entry.getValue(); + MainUtil.sendMessage(null, " - " + plot.world + ";" + plot.id.x + ";" + plot.id.y + ";" + UUIDHandler.getName(plot.owner) + " : " + stamp); + } + return true; + } + return MainUtil.sendMessage(null, "Use /plot debugexec show-expired "); + } + case "seen": { + if (args.length != 2) { + return MainUtil.sendMessage(null, "Use /plot debugexec seen "); + } + final UUID uuid = UUIDHandler.getUUID(args[1]); + if (uuid == null) { + return MainUtil.sendMessage(null, "player not found: " + args[1]); + } + BukkitOfflinePlayer op = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); + if ((op == null) || op.getLastPlayed() == 0) { + return MainUtil.sendMessage(null, "player hasn't connected before: " + args[1]); + } + final Timestamp stamp = new Timestamp(op.getLastPlayed()); + final Date date = new Date(stamp.getTime()); + MainUtil.sendMessage(null, "PLAYER: " + args[1]); + MainUtil.sendMessage(null, "UUID: " + uuid); + MainUtil.sendMessage(null, "Object: " + date.toGMTString()); + MainUtil.sendMessage(null, "GMT: " + date.toGMTString()); + MainUtil.sendMessage(null, "Local: " + date.toLocaleString()); + return true; + } + case "trim-check": { + if (args.length != 2) { + MainUtil.sendMessage(null, "Use /plot debugexec trim-check "); + MainUtil.sendMessage(null, "&7 - Generates a list of regions to trim"); + return MainUtil.sendMessage(null, "&7 - Run after plot expiry has run"); + } + final String world = args[1]; + if (!BlockManager.manager.isWorld(world) || !PlotSquared.isPlotWorld(args[1])) { + return MainUtil.sendMessage(null, "Invalid world: " + args[1]); + } + final ArrayList empty = new ArrayList<>(); + final boolean result = Trim.getTrimRegions(empty, world, new Runnable() { @Override public void run() { Trim.sendMessage("Processing is complete! Here's how many chunks would be deleted:"); Trim.sendMessage(" - MCA #: " + empty.size()); Trim.sendMessage(" - CHUNKS: " + (empty.size() * 1024) + " (max)"); Trim.sendMessage("Exporting log for manual approval..."); - final File file = new File(PlotMain.getMain().getDataFolder() + File.separator + "trim.txt"); + final File file = new File(PlotSquared.IMP.getDirectory() + File.separator + "trim.txt"); PrintWriter writer; try { writer = new PrintWriter(file); - String worldname = world.getName(); - for (ChunkLoc loc : empty) { - writer.println(worldname +"/region/r." + loc.x + "." + loc.z +".mca" ); + for (final ChunkLoc loc : empty) { + writer.println(world + "/region/r." + loc.x + "." + loc.z + ".mca"); } writer.close(); Trim.sendMessage("File saved to 'plugins/PlotSquared/trim.txt'"); - } catch (FileNotFoundException e) { + } catch (final FileNotFoundException e) { e.printStackTrace(); Trim.sendMessage("File failed to save! :("); } @@ -166,14 +161,14 @@ public class DebugExec extends SubCommand { Trim.sendMessage(" - Add 31 to each number to get the end position"); } }); - if (!result) { - PlayerFunctions.sendMessage(null, "Trim task already started!"); - } - return result; - } - } + if (!result) { + MainUtil.sendMessage(null, "Trim task already started!"); + } + return result; + } + } } - PlayerFunctions.sendMessage(player, "Possible sub commands: /plot debugexec <" + StringUtils.join(allowed_params, "|") + ">"); + MainUtil.sendMessage(player, "Possible sub commands: /plot debugexec <" + StringUtils.join(allowed_params, "|") + ">"); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugFixFlags.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugFixFlags.java index 112f10d48..d37f12a7d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugFixFlags.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugFixFlags.java @@ -18,65 +18,60 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; import java.util.Set; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.AbstractFlag; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; public class DebugFixFlags extends SubCommand { - public DebugFixFlags() { super(Command.DEBUGFIXFLAGS, "Attempt to fix all flags for a world", "debugclear", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr != null) { - PlayerFunctions.sendMessage(plr, C.NOT_CONSOLE); + MainUtil.sendMessage(plr, C.NOT_CONSOLE); return false; } if (args.length != 1) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot debugfixflags "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot debugfixflags "); return false; } - World world = Bukkit.getWorld(args[0]); - if (world == null || !PlotMain.isPlotWorld(world)) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_WORLD, args[0]); + final String world = args[0]; + if (!BlockManager.manager.isWorld(world) || !PlotSquared.isPlotWorld(world)) { + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_WORLD, args[0]); return false; } - PlayerFunctions.sendMessage(plr, "&8--- &6Starting task &8 ---"); - for (Plot plot : PlotMain.getPlots(world).values()) { - Set flags = plot.settings.flags; - ArrayList toRemove = new ArrayList(); - for (Flag flag : flags) { - AbstractFlag af = FlagManager.getFlag(flag.getKey()); + MainUtil.sendMessage(plr, "&8--- &6Starting task &8 ---"); + for (final Plot plot : PlotSquared.getPlots(world).values()) { + final Set flags = plot.settings.flags; + final ArrayList toRemove = new ArrayList(); + for (final Flag flag : flags) { + final AbstractFlag af = FlagManager.getFlag(flag.getKey()); if (af == null) { toRemove.add(flag); } } - for (Flag flag : toRemove) { + for (final Flag flag : toRemove) { plot.settings.flags.remove(flag); } if (toRemove.size() > 0) { DBFunc.setFlags(plot.world, plot, plot.settings.flags); } } - PlayerFunctions.sendMessage(plr, "&aDone!"); - + MainUtil.sendMessage(plr, "&aDone!"); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugLoadTest.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugLoadTest.java index c8294ea6a..3edf91893 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugLoadTest.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugLoadTest.java @@ -18,40 +18,37 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.lang.reflect.Field; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; /** * @author Citymonstret */ public class DebugLoadTest extends SubCommand { - public DebugLoadTest() { super(Command.DEBUGLOADTEST, "This debug command will force the reload of all plots in the DB", "debugloadtest", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr == null) { try { - final Field fPlots = PlotMain.class.getDeclaredField("plots"); + final Field fPlots = PlotSquared.class.getDeclaredField("plots"); fPlots.setAccessible(true); fPlots.set(null, DBFunc.getPlots()); } catch (final Exception e) { - PlotMain.sendConsoleSenderMessage("&3===FAILED&3==="); + PlotSquared.log("&3===FAILED&3==="); e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&3===END OF STACKTRACE==="); + PlotSquared.log("&3===END OF STACKTRACE==="); } } else { - PlayerFunctions.sendMessage(plr, "&6This command can only be executed by console as it has been deemed unsafe if abused.."); + MainUtil.sendMessage(plr, "&6This command can only be executed by console as it has been deemed unsafe if abused.."); } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugRoadRegen.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugRoadRegen.java index 6cac063f6..e15ce7ce9 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugRoadRegen.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugRoadRegen.java @@ -18,40 +18,35 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import java.util.Arrays; - -import org.bukkit.Chunk; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.generator.HybridPlotManager; import com.intellectualcrafters.plot.generator.HybridPlotWorld; -import com.intellectualcrafters.plot.util.AbstractSetBlock; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.generator.HybridUtils; +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; public class DebugRoadRegen extends SubCommand { - public DebugRoadRegen() { super(Command.DEBUGROADREGEN, "Regenerate all road schematic in your current chunk", "debugroadregen", CommandCategory.DEBUG, true); } - + @Override - public boolean execute(final Player player, final String... args) { - if (!(PlotMain.getWorldSettings(player.getWorld()) instanceof HybridPlotWorld)) { + public boolean execute(final PlotPlayer player, final String... args) { + Location loc = player.getLocation(); + String world = loc.getWorld(); + if (!(PlotSquared.getPlotWorld(world) instanceof HybridPlotWorld)) { return sendMessage(player, C.NOT_IN_PLOT_WORLD); } - HybridPlotManager manager = (HybridPlotManager) PlotMain.getPlotManager(player.getWorld()); - - Chunk chunk = player.getLocation().getChunk(); - boolean result = manager.regenerateRoad(chunk); + ChunkLoc chunk = new ChunkLoc(loc.getX() >> 4, loc.getZ() >> 4); + boolean result = HybridUtils.manager.regenerateRoad(world, chunk); if (result) { - AbstractSetBlock.setBlockManager.update(Arrays.asList(new Chunk[] {chunk})); + MainUtil.update(loc); } - PlayerFunctions.sendMessage(player, "&6Regenerating chunk: "+chunk.getX() + "," + chunk.getZ() + "\n&6 - Result: " + (result == true ? "&aSuccess" : "&cFailed")); + MainUtil.sendMessage(player, "&6Regenerating chunk: " + chunk.x + "," + chunk.z + "\n&6 - Result: " + (result == true ? "&aSuccess" : "&cFailed")); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugSaveTest.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugSaveTest.java index 4f8417658..3391feb85 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugSaveTest.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugSaveTest.java @@ -18,36 +18,33 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; /** * @author Citymonstret */ public class DebugSaveTest extends SubCommand { - public DebugSaveTest() { super(Command.DEBUGSAVETEST, "This debug command will force the recreation of all plots in the DB", "debugsavetest", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr == null) { final ArrayList plots = new ArrayList(); - plots.addAll(PlotMain.getPlots()); + plots.addAll(PlotSquared.getPlots()); DBFunc.createPlots(plots); DBFunc.createAllSettingsAndHelpers(plots); } else { - PlayerFunctions.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused"); + MainUtil.sendMessage(plr, "This debug command can only be executed by console as it has been deemed unsafe if abused"); } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Delete.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Delete.java index e6d41006a..ae5772426 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Delete.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Delete.java @@ -18,55 +18,66 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Delete extends SubCommand { - public Delete() { super(Command.DELETE, "Delete a plot", "delete", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!PlayerFunctions.getTopPlot(plr.getWorld(), plot).equals(PlayerFunctions.getBottomPlot(plr.getWorld(), plot))) { + if (!MainUtil.getTopPlot(plot).equals(MainUtil.getBottomPlot(plot))) { return !sendMessage(plr, C.UNLINK_REQUIRED); } - if ((((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.uuidWrapper.getUUID(plr)))) && !PlotMain.hasPermission(plr, "plots.admin.command.delete")) { + if ((((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.uuidWrapper.getUUID(plr)))) && !Permissions.hasPermission(plr, "plots.admin.command.delete")) { return !sendMessage(plr, C.NO_PLOT_PERMS); } assert plot != null; - final PlotWorld pWorld = PlotMain.getWorldSettings(plot.getWorld()); - if (PlotMain.useEconomy && pWorld.USE_ECONOMY && (plot != null) && plot.hasOwner() && plot.getOwner().equals(UUIDHandler.getUUID(plr))) { + final PlotWorld pWorld = PlotSquared.getPlotWorld(plot.world); + if (PlotSquared.economy != null && pWorld.USE_ECONOMY && (plot != null) && plot.hasOwner() && plot.getOwner().equals(UUIDHandler.getUUID(plr))) { final double c = pWorld.SELL_PRICE; if (c > 0d) { - final Economy economy = PlotMain.economy; - economy.depositPlayer(plr, c); + EconHandler.depositPlayer(plr, c); sendMessage(plr, C.ADDED_BALANCE, c + ""); } } - final boolean result = PlotMain.removePlot(plr.getWorld().getName(), plot.id, true); + if (MainUtil.runners.containsKey(plot)) { + MainUtil.sendMessage(plr, C.WAIT_FOR_TIMER); + return false; + } + final boolean result = PlotSquared.removePlot(loc.getWorld(), plot.id, true); + final long start = System.currentTimeMillis(); if (result) { - plot.clear(plr, true); - DBFunc.delete(plr.getWorld().getName(), plot); + boolean result2 = MainUtil.clearAsPlayer(plot, false, new Runnable() { + @Override + public void run() { + MainUtil.sendMessage(plr, C.CLEARING_DONE, "" + (System.currentTimeMillis() - start)); + } + }); + if (!result2) { + MainUtil.sendMessage(plr, C.WAIT_FOR_TIMER); + } + DBFunc.delete(loc.getWorld(), plot); } else { - PlayerFunctions.sendMessage(plr, "Plot deletion has been denied."); + MainUtil.sendMessage(plr, "Plot deletion has been denied."); } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java index c89e7121a..923b22deb 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java @@ -18,110 +18,104 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.events.PlayerPlotDeniedEvent; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; - -@SuppressWarnings("deprecation") public class Denied extends SubCommand { +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +public class Denied extends SubCommand { public Denied() { super(Command.DENIED, "Manage plot helpers", "denied {add|remove} {player}", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 2) { - PlayerFunctions.sendMessage(plr, C.DENIED_NEED_ARGUMENT); + MainUtil.sendMessage(plr, C.DENIED_NEED_ARGUMENT); return true; } - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return true; + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if ((plot == null) || !plot.hasOwner()) { - PlayerFunctions.sendMessage(plr, C.PLOT_UNOWNED); + MainUtil.sendMessage(plr, C.PLOT_UNOWNED); return false; } - if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !PlotMain.hasPermission(plr, "plots.admin.command.denied")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !Permissions.hasPermission(plr, "plots.admin.command.denied")) { + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return true; } if (args[0].equalsIgnoreCase("add")) { UUID uuid; if (args[1].equalsIgnoreCase("*")) { uuid = DBFunc.everyone; - } else { uuid = UUIDHandler.getUUID(args[1]); } if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[1]); return false; } if (!plot.denied.contains(uuid)) { if (plot.owner.equals(uuid)) { - PlayerFunctions.sendMessage(plr, C.ALREADY_OWNER); + MainUtil.sendMessage(plr, C.ALREADY_OWNER); return false; } if (plot.trusted.contains(uuid)) { plot.trusted.remove(uuid); - DBFunc.removeTrusted(plr.getWorld().getName(), plot, uuid); + DBFunc.removeTrusted(loc.getWorld(), plot, uuid); } if (plot.helpers.contains(uuid)) { plot.helpers.remove(uuid); - DBFunc.removeHelper(plr.getWorld().getName(), plot, uuid); + DBFunc.removeHelper(loc.getWorld(), plot, uuid); } plot.addDenied(uuid); - DBFunc.setDenied(plr.getWorld().getName(), plot, uuid); - final PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, true); - Bukkit.getPluginManager().callEvent(event); + DBFunc.setDenied(loc.getWorld(), plot, uuid); + //FIXME PlayerPlotDeniedEvent } else { - PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED); + MainUtil.sendMessage(plr, C.ALREADY_ADDED); return false; } - final Player player = UUIDHandler.uuidWrapper.getPlayer(uuid); + final PlotPlayer player = UUIDHandler.getPlayer(uuid); if (!uuid.equals(DBFunc.everyone) && (player != null) && player.isOnline()) { - final Plot pl = PlayerFunctions.getCurrentPlot(player); + final Plot pl = MainUtil.getPlot(loc); if ((pl != null) && pl.id.equals(plot.id)) { - PlayerFunctions.sendMessage(player, C.YOU_BE_DENIED); - player.teleport(player.getWorld().getSpawnLocation()); + MainUtil.sendMessage(player, C.YOU_BE_DENIED); + player.teleport(BlockManager.manager.getSpawn(loc.getWorld())); } } - PlayerFunctions.sendMessage(plr, C.DENIED_ADDED); + MainUtil.sendMessage(plr, C.DENIED_ADDED); return true; } else if (args[0].equalsIgnoreCase("remove")) { if (args[1].equalsIgnoreCase("*")) { final UUID uuid = DBFunc.everyone; if (!plot.denied.contains(uuid)) { - PlayerFunctions.sendMessage(plr, C.WAS_NOT_ADDED); + MainUtil.sendMessage(plr, C.WAS_NOT_ADDED); return true; } plot.removeDenied(uuid); - DBFunc.removeDenied(plr.getWorld().getName(), plot, uuid); - PlayerFunctions.sendMessage(plr, C.DENIED_REMOVED); + DBFunc.removeDenied(loc.getWorld(), plot, uuid); + MainUtil.sendMessage(plr, C.DENIED_REMOVED); return true; } final UUID uuid = UUIDHandler.getUUID(args[1]); plot.removeDenied(uuid); - DBFunc.removeDenied(plr.getWorld().getName(), plot, uuid); - final PlayerPlotDeniedEvent event = new PlayerPlotDeniedEvent(plr, plot, uuid, false); - Bukkit.getPluginManager().callEvent(event); - PlayerFunctions.sendMessage(plr, C.DENIED_REMOVED); + DBFunc.removeDenied(loc.getWorld(), plot, uuid); + // FIXME PlayerPlotDeniedEvent + MainUtil.sendMessage(plr, C.DENIED_REMOVED); } else { - PlayerFunctions.sendMessage(plr, C.DENIED_NEED_ARGUMENT); + MainUtil.sendMessage(plr, C.DENIED_NEED_ARGUMENT); return true; } return true; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java index 65780803f..4c34cbd96 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/FlagCmd.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; @@ -26,9 +25,7 @@ import java.util.Arrays; import java.util.HashMap; import org.apache.commons.lang.StringUtils; -import org.bukkit.entity.Player; -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.AbstractFlag; @@ -36,17 +33,19 @@ import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.flag.FlagValue; import com.intellectualcrafters.plot.listeners.PlotListener; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; public class FlagCmd extends SubCommand { - public FlagCmd() { super(Command.FLAG, "Manage plot flags", "f", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player player, final String... args) { + public boolean execute(final PlotPlayer player, final String... args) { /* * plot flag set fly true * plot flag remove fly @@ -55,172 +54,171 @@ public class FlagCmd extends SubCommand { * plot flag list */ if (args.length == 0) { - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag "); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag "); return false; } - Plot plot = PlayerFunctions.getCurrentPlot(player); + Location loc = player.getLocation(); + final Plot plot = MainUtil.getPlot(loc); if (plot == null) { - PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT); + MainUtil.sendMessage(player, C.NOT_IN_PLOT); return false; } if (!plot.hasOwner()) { sendMessage(player, C.PLOT_NOT_CLAIMED); return false; } - if (!plot.hasRights(player) && !PlotMain.hasPermission(player, "plots.set.flag.other")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.set.flag.other"); + if (!plot.isAdded(player.getUUID()) && !Permissions.hasPermission(player, "plots.set.flag.other")) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag.other"); return false; } switch (args[0].toLowerCase()) { case "info": { - if (!PlotMain.hasPermission(player, "plots.set.flag")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.flag.info"); + if (!Permissions.hasPermission(player, "plots.set.flag")) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.info"); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info "); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info "); return false; } - AbstractFlag af = FlagManager.getFlag(args[1]); + final AbstractFlag af = FlagManager.getFlag(args[1]); if (af == null) { - PlayerFunctions.sendMessage(player, C.NOT_VALID_FLAG); - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info "); + MainUtil.sendMessage(player, C.NOT_VALID_FLAG); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag info "); return false; } // flag key - PlayerFunctions.sendMessage(player, C.FLAG_KEY, af.getKey()); + MainUtil.sendMessage(player, C.FLAG_KEY, af.getKey()); // flag type - PlayerFunctions.sendMessage(player, C.FLAG_TYPE, af.value.getClass().getSimpleName()); + MainUtil.sendMessage(player, C.FLAG_TYPE, af.value.getClass().getSimpleName()); // Flag type description - PlayerFunctions.sendMessage(player, C.FLAG_DESC, af.getValueDesc()); - PlayerFunctions.sendMessage(player, "&cNot implemented."); + MainUtil.sendMessage(player, C.FLAG_DESC, af.getValueDesc()); + MainUtil.sendMessage(player, "&cNot implemented."); } case "set": { - if (!PlotMain.hasPermission(player, "plots.set.flag")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.set.flag"); + if (!Permissions.hasPermission(player, "plots.set.flag")) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag"); return false; } if (args.length < 3) { - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag set "); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag set "); return false; } - AbstractFlag af = FlagManager.getFlag(args[1].toLowerCase()); + final AbstractFlag af = FlagManager.getFlag(args[1].toLowerCase()); if (af == null) { - PlayerFunctions.sendMessage(player, C.NOT_VALID_FLAG); + MainUtil.sendMessage(player, C.NOT_VALID_FLAG); return false; } - if (!PlotMain.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase()); + if (!Permissions.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase()); return false; } - String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); - Object parsed = af.parseValueRaw(value); + final String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); + final Object parsed = af.parseValueRaw(value); if (parsed == null) { - PlayerFunctions.sendMessage(player, "&c" + af.getValueDesc()); + MainUtil.sendMessage(player, "&c" + af.getValueDesc()); return false; } final Flag flag = new Flag(FlagManager.getFlag(args[1].toLowerCase(), true), parsed); - boolean result = FlagManager.addPlotFlag(plot, flag); + final boolean result = FlagManager.addPlotFlag(plot, flag); if (!result) { - PlayerFunctions.sendMessage(player, C.FLAG_NOT_ADDED); + MainUtil.sendMessage(player, C.FLAG_NOT_ADDED); return false; } - PlayerFunctions.sendMessage(player, C.FLAG_ADDED); + MainUtil.sendMessage(player, C.FLAG_ADDED); PlotListener.plotEntry(player, plot); return true; } case "remove": { - if (!PlotMain.hasPermission(player, "plots.flag.remove")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.flag.remove"); + if (!Permissions.hasPermission(player, "plots.flag.remove")) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.remove"); return false; } - if (args.length != 2 && args.length != 3) { - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag remove [values]"); + if ((args.length != 2) && (args.length != 3)) { + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag remove [values]"); return false; } - AbstractFlag af = FlagManager.getFlag(args[1].toLowerCase()); + final AbstractFlag af = FlagManager.getFlag(args[1].toLowerCase()); if (af == null) { - PlayerFunctions.sendMessage(player, C.NOT_VALID_FLAG); + MainUtil.sendMessage(player, C.NOT_VALID_FLAG); return false; } - if (!PlotMain.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase()); + if (!Permissions.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase()); return false; } - Flag flag = FlagManager.getPlotFlagAbs(plot, args[1].toLowerCase()); + final Flag flag = FlagManager.getPlotFlagAbs(plot, args[1].toLowerCase()); if (flag == null) { - PlayerFunctions.sendMessage(player, C.FLAG_NOT_IN_PLOT); + MainUtil.sendMessage(player, C.FLAG_NOT_IN_PLOT); return false; } - if (args.length == 3 && flag.getAbstractFlag().isList()) { - String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); + if ((args.length == 3) && flag.getAbstractFlag().isList()) { + final String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); ((FlagValue.ListValue) flag.getAbstractFlag().value).remove(flag.getValue(), value); DBFunc.setFlags(plot.world, plot, plot.settings.flags); - } - else { - boolean result = FlagManager.removePlotFlag(plot, flag.getKey()); + } else { + final boolean result = FlagManager.removePlotFlag(plot, flag.getKey()); if (!result) { - PlayerFunctions.sendMessage(player, C.FLAG_NOT_REMOVED); + MainUtil.sendMessage(player, C.FLAG_NOT_REMOVED); return false; } } - PlayerFunctions.sendMessage(player, C.FLAG_REMOVED); + MainUtil.sendMessage(player, C.FLAG_REMOVED); PlotListener.plotEntry(player, plot); return true; } case "add": { - if (!PlotMain.hasPermission(player, "plots.flag.add")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.flag.add"); + if (!Permissions.hasPermission(player, "plots.flag.add")) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.add"); return false; } if (args.length < 3) { - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag add "); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag add "); return false; } - AbstractFlag af = FlagManager.getFlag(args[1].toLowerCase()); + final AbstractFlag af = FlagManager.getFlag(args[1].toLowerCase()); if (af == null) { - PlayerFunctions.sendMessage(player, C.NOT_VALID_FLAG); + MainUtil.sendMessage(player, C.NOT_VALID_FLAG); return false; } - if (!PlotMain.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase()); + if (!Permissions.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase()); return false; } - String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); - Object parsed = af.parseValueRaw(value); + final String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); + final Object parsed = af.parseValueRaw(value); if (parsed == null) { - PlayerFunctions.sendMessage(player, "&c" + af.getValueDesc()); + MainUtil.sendMessage(player, "&c" + af.getValueDesc()); return false; } Flag flag = FlagManager.getPlotFlag(plot, args[1].toLowerCase()); - if (flag == null || !flag.getAbstractFlag().isList()) { + if ((flag == null) || !flag.getAbstractFlag().isList()) { flag = new Flag(FlagManager.getFlag(args[1].toLowerCase(), true), parsed); - } - else { + } else { ((FlagValue.ListValue) flag.getAbstractFlag().value).add(flag.getValue(), value); } - boolean result = FlagManager.addPlotFlag(plot, flag); + final boolean result = FlagManager.addPlotFlag(plot, flag); if (!result) { - PlayerFunctions.sendMessage(player, C.FLAG_NOT_ADDED); + MainUtil.sendMessage(player, C.FLAG_NOT_ADDED); return false; } DBFunc.setFlags(plot.world, plot, plot.settings.flags); - PlayerFunctions.sendMessage(player, C.FLAG_ADDED); + MainUtil.sendMessage(player, C.FLAG_ADDED); PlotListener.plotEntry(player, plot); return true; } case "list": { - if (!PlotMain.hasPermission(player, "plots.flag.list")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.flag.list"); + if (!Permissions.hasPermission(player, "plots.flag.list")) { + MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.flag.list"); return false; } if (args.length != 1) { - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag list"); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag list"); return false; } - HashMap> flags = new HashMap<>(); - for (AbstractFlag af : FlagManager.getFlags()) { - String type = af.value.getClass().getSimpleName().replaceAll("Value", ""); + final HashMap> flags = new HashMap<>(); + for (final AbstractFlag af : FlagManager.getFlags()) { + final String type = af.value.getClass().getSimpleName().replaceAll("Value", ""); if (!flags.containsKey(type)) { flags.put(type, new ArrayList()); } @@ -228,15 +226,15 @@ public class FlagCmd extends SubCommand { } String message = ""; String prefix = ""; - for (String flag : flags.keySet()) { - message += prefix + "&6" + flag +": &7" + StringUtils.join(flags.get(flag), ", "); + for (final String flag : flags.keySet()) { + message += prefix + "&6" + flag + ": &7" + StringUtils.join(flags.get(flag), ", "); prefix = "\n"; } - PlayerFunctions.sendMessage(player, message); + MainUtil.sendMessage(player, message); return true; } } - PlayerFunctions.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag "); + MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot flag "); return false; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Help.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Help.java index 439d630a5..978afa09b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Help.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Help.java @@ -5,18 +5,17 @@ * * >> File = Help.java >> Generated by: Citymonstret at 2014-08-11 17:32 */ - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; +import com.intellectualcrafters.plot.object.PlotPlayer; public class Help extends SubCommand { public Help() { super("help", "", "Get this help menu", "help", "he", SubCommand.CommandCategory.INFO, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { return false; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java index 791c09720..1640b2e18 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java @@ -18,45 +18,41 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.events.PlayerPlotHelperEvent; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Helpers extends SubCommand { - public Helpers() { super(Command.HELPERS, "Manage plot helpers", "helpers {add|remove} {player}", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 2) { - PlayerFunctions.sendMessage(plr, C.HELPER_NEED_ARGUMENT); + MainUtil.sendMessage(plr, C.HELPER_NEED_ARGUMENT); return true; } - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return true; + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if ((plot == null) || !plot.hasOwner()) { - PlayerFunctions.sendMessage(plr, C.PLOT_UNOWNED); + MainUtil.sendMessage(plr, C.PLOT_UNOWNED); return false; } - if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !PlotMain.hasPermission(plr, "plots.admin.command.helpers")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !Permissions.hasPermission(plr, "plots.admin.command.helpers")) { + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return true; } if (args[0].equalsIgnoreCase("add")) { @@ -67,52 +63,50 @@ public class Helpers extends SubCommand { uuid = UUIDHandler.getUUID(args[1]); } if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[1]); return false; } if (!plot.helpers.contains(uuid)) { if (plot.owner.equals(uuid)) { - PlayerFunctions.sendMessage(plr, C.ALREADY_OWNER); + MainUtil.sendMessage(plr, C.ALREADY_OWNER); return false; } if (plot.trusted.contains(uuid)) { plot.trusted.remove(uuid); - DBFunc.removeTrusted(plr.getWorld().getName(), plot, uuid); + DBFunc.removeTrusted(loc.getWorld(), plot, uuid); } if (plot.denied.contains(uuid)) { plot.denied.remove(uuid); - DBFunc.removeDenied(plr.getWorld().getName(), plot, uuid); + DBFunc.removeDenied(loc.getWorld(), plot, uuid); } plot.addHelper(uuid); - DBFunc.setHelper(plr.getWorld().getName(), plot, uuid); - final PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, true); - Bukkit.getPluginManager().callEvent(event); + DBFunc.setHelper(loc.getWorld(), plot, uuid); + // FIXME PlayerPlotHelperEvent } else { - PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED); + MainUtil.sendMessage(plr, C.ALREADY_ADDED); return false; } - PlayerFunctions.sendMessage(plr, C.HELPER_ADDED); + MainUtil.sendMessage(plr, C.HELPER_ADDED); return true; } else if (args[0].equalsIgnoreCase("remove")) { if (args[1].equalsIgnoreCase("*")) { final UUID uuid = DBFunc.everyone; if (!plot.helpers.contains(uuid)) { - PlayerFunctions.sendMessage(plr, C.WAS_NOT_ADDED); + MainUtil.sendMessage(plr, C.WAS_NOT_ADDED); return true; } plot.removeHelper(uuid); - DBFunc.removeHelper(plr.getWorld().getName(), plot, uuid); - PlayerFunctions.sendMessage(plr, C.HELPER_REMOVED); + DBFunc.removeHelper(loc.getWorld(), plot, uuid); + MainUtil.sendMessage(plr, C.HELPER_REMOVED); return true; } final UUID uuid = UUIDHandler.getUUID(args[1]); plot.removeHelper(uuid); - DBFunc.removeHelper(plr.getWorld().getName(), plot, uuid); - final PlayerPlotHelperEvent event = new PlayerPlotHelperEvent(plr, plot, uuid, false); - Bukkit.getPluginManager().callEvent(event); - PlayerFunctions.sendMessage(plr, C.HELPER_REMOVED); + DBFunc.removeHelper(loc.getWorld(), plot, uuid); + // FIXME PlayerPlotHelperEvent + MainUtil.sendMessage(plr, C.HELPER_REMOVED); } else { - PlayerFunctions.sendMessage(plr, C.HELPER_NEED_ARGUMENT); + MainUtil.sendMessage(plr, C.HELPER_NEED_ARGUMENT); return true; } return true; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Home.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Home.java index 7ddf8ef47..e09b0e419 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Home.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Home.java @@ -18,44 +18,41 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class Home extends SubCommand { - public Home() { super(Command.HOME, "Go to your plot", "home {id|alias}", CommandCategory.TELEPORT, true); } - + private Plot isAlias(final String a) { - for (final Plot p : PlotMain.getPlots()) { + for (final Plot p : PlotSquared.getPlots()) { if ((p.settings.getAlias().length() > 0) && p.settings.getAlias().equalsIgnoreCase(a)) { return p; } } return null; } - + @Override - public boolean execute(final Player plr, String... args) { - final Plot[] plots = PlotMain.getPlots(plr).toArray(new Plot[0]); + public boolean execute(final PlotPlayer plr, String... args) { + final Plot[] plots = PlotSquared.getPlots(plr).toArray(new Plot[0]); if (plots.length == 1) { - PlotMain.teleportPlayer(plr, plr.getLocation(), plots[0]); + MainUtil.teleportPlayer(plr, plr.getLocation(), plots[0]); return true; } else if (plots.length > 1) { if (args.length < 1) { - args = new String[]{"1"}; + args = new String[] { "1" }; } int id = 0; try { @@ -65,30 +62,29 @@ public class Home extends SubCommand { if ((temp = isAlias(args[0])) != null) { if (temp.hasOwner()) { if (temp.getOwner().equals(UUIDHandler.getUUID(plr))) { - teleportPlayer(plr, temp); + MainUtil.teleportPlayer(plr, plr.getLocation(), temp); return true; } } - PlayerFunctions.sendMessage(plr, C.NOT_YOUR_PLOT); + MainUtil.sendMessage(plr, C.NOT_YOUR_PLOT); return false; } - PlayerFunctions.sendMessage(plr, C.NOT_VALID_NUMBER); + MainUtil.sendMessage(plr, C.NOT_VALID_NUMBER); return true; } if ((id > (plots.length)) || (id < 1)) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_NUMBER); + MainUtil.sendMessage(plr, C.NOT_VALID_NUMBER); return false; } - teleportPlayer(plr, plots[id - 1]); + MainUtil.teleportPlayer(plr, plr.getLocation(), plots[id - 1]); return true; } else { - PlayerFunctions.sendMessage(plr, C.NO_PLOTS); + MainUtil.sendMessage(plr, C.NO_PLOTS); return true; } } - public void teleportPlayer(Player player, Plot plot) { - PlotMain.teleportPlayer(player, player.getLocation(), plot); + public void teleportPlayer(final PlotPlayer player, final Plot plot) { + MainUtil.teleportPlayer(player, player.getLocation(), plot); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inbox.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inbox.java index baec7d6ca..77bedefaf 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inbox.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inbox.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; @@ -26,63 +25,61 @@ 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.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotComment; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Inbox extends SubCommand { - public Inbox() { super(Command.INBOX, "Review the comments for a plot", "inbox", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - boolean report = false; - if (args.length == 1){ - if (args[0].equalsIgnoreCase("reports")) { - report = true; - } - } - if (!PlayerFunctions.isInPlot(plr) && !report) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); + public boolean execute(final PlotPlayer plr, final String... args) { + boolean report = false; + if (args.length == 1) { + if (args[0].equalsIgnoreCase("reports")) { + report = true; + } + } + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null && !report) { + return !sendMessage(plr, C.NOT_IN_PLOT); + } + if ((plot != null) && !plot.hasOwner()) { + MainUtil.sendMessage(plr, C.NOT_IN_PLOT); return false; } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (plot != null && !plot.hasOwner()) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return false; - } - Integer tier; final UUID uuid = UUIDHandler.getUUID(plr); - if (PlotMain.hasPermission(plr, "plots.comment.admin")) { + if (Permissions.hasPermission(plr, "plots.comment.admin")) { tier = 0; - } else if (plot != null && plot.owner.equals(uuid)) { + } else if ((plot != null) && plot.owner.equals(uuid)) { tier = 1; - } else if (plot != null && plot.helpers.contains(uuid)) { + } else if ((plot != null) && plot.helpers.contains(uuid)) { tier = 2; - } else if (plot != null && plot.trusted.contains(uuid)) { + } else if ((plot != null) && plot.trusted.contains(uuid)) { tier = 3; } else { tier = 4; } final boolean below; if (args.length > 0) { - below = false; + below = false; switch (args[0].toLowerCase()) { case "admin": if (tier <= 0) { tier = 0; } else { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.admin"); + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.admin"); return false; } break; @@ -90,7 +87,7 @@ public class Inbox extends SubCommand { if (tier <= 1) { tier = 1; } else { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.owner"); + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.owner"); return false; } break; @@ -98,7 +95,7 @@ public class Inbox extends SubCommand { if (tier <= 2) { tier = 2; } else { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.helper"); + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.helper"); return false; } break; @@ -106,7 +103,7 @@ public class Inbox extends SubCommand { if (tier <= 3) { tier = 3; } else { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.trusted"); + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.trusted"); return false; } break; @@ -114,49 +111,44 @@ public class Inbox extends SubCommand { if (tier <= 4) { tier = 4; } else { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.everyone"); + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.everyone"); return false; } break; case "reports": - if (tier <= 0) { + if (tier <= 0) { tier = -1; } else { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.admin"); + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.inbox.admin"); return false; } - break; + break; default: - PlayerFunctions.sendMessage(plr, C.INVALID_INBOX, Arrays.copyOfRange(new String[]{"admin", "owner", "helper", "trusted", "everyone"}, Math.max(0, tier), 4)); + MainUtil.sendMessage(plr, C.INVALID_INBOX, Arrays.copyOfRange(new String[] { "admin", "owner", "helper", "trusted", "everyone" }, Math.max(0, tier), 4)); return false; } + } else { + below = true; } - else { - below = true; - } - - final String world = plr.getWorld().getName(); + final String world = loc.getWorld(); final int tier2 = tier; - - Bukkit.getScheduler().runTaskAsynchronously(PlotMain.getMain(), new Runnable() { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { - ArrayList comments = null; - if (tier2 == -1) { - comments = DBFunc.getComments(world, null, 0, false); - } - else { - comments = plot.settings.getComments(tier2); - } + ArrayList comments = null; + if (tier2 == -1) { + comments = DBFunc.getComments(world, null, 0, false); + } else { + comments = plot.settings.getComments(tier2); + } if (comments == null) { comments = DBFunc.getComments(world, plot, tier2, below); plot.settings.setComments(comments); } - if (args.length == 2) { final String[] split = args[1].toLowerCase().split(":"); if (!split[0].equals("clear")) { - PlayerFunctions.sendMessage(plr, "&c/plot inbox [tier] [clear][:#]"); + MainUtil.sendMessage(plr, "&c/plot inbox [tier] [clear][:#]"); return; } if (split.length > 1) { @@ -165,10 +157,10 @@ public class Inbox extends SubCommand { final PlotComment comment = comments.get(index - 1); DBFunc.removeComment(world, plot, comment); plot.settings.removeComment(comment); - PlayerFunctions.sendMessage(plr, C.COMMENT_REMOVED, "1 comment"); + MainUtil.sendMessage(plr, C.COMMENT_REMOVED, "1 comment"); return; } catch (final Exception e) { - PlayerFunctions.sendMessage(plr, "&cInvalid index:\n/plot inbox [tier] [clear][:#]"); + MainUtil.sendMessage(plr, "&cInvalid index:\n/plot inbox [tier] [clear][:#]"); return; } } @@ -176,7 +168,7 @@ public class Inbox extends SubCommand { DBFunc.removeComment(world, plot, comment); } plot.settings.removeComments(comments); - PlayerFunctions.sendMessage(plr, C.COMMENT_REMOVED, "all comments in that category"); + MainUtil.sendMessage(plr, C.COMMENT_REMOVED, "all comments in that category"); } else { final List recipients = Arrays.asList("A", "O", "H", "T", "E"); int count = 1; @@ -190,7 +182,7 @@ public class Inbox extends SubCommand { if (comments.size() == 0) { message.append("&cNo messages."); } - PlayerFunctions.sendMessage(plr, message.toString()); + MainUtil.sendMessage(plr, message.toString()); } } }); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java index d92d38516..a58797282 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java @@ -18,106 +18,97 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.InfoInventory; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ -@SuppressWarnings({"javadoc"}) public class Info extends SubCommand { - +@SuppressWarnings({ "javadoc" }) +public class Info extends SubCommand { public Info() { super(Command.INFO, "Display plot info", "info", CommandCategory.INFO, false); } - + @Override - public boolean execute(final Player player, String... args) { - World world; + public boolean execute(final PlotPlayer player, String... args) { Plot plot; + String world; if (player != null) { - world = player.getWorld(); - if (!PlotMain.isPlotWorld(world)) { - PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT_WORLD); + Location loc = player.getLocation(); + world = loc.getWorld(); + if (!PlotSquared.isPlotWorld(world)) { + MainUtil.sendMessage(player, C.NOT_IN_PLOT_WORLD); return false; } - if (!PlayerFunctions.isInPlot(player)) { - PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT); - return false; + plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(player, C.NOT_IN_PLOT); } - plot = PlayerFunctions.getCurrentPlot(player); } else { if (args.length < 2) { - PlayerFunctions.sendMessage(null, C.INFO_SYNTAX_CONSOLE); + MainUtil.sendMessage(null, C.INFO_SYNTAX_CONSOLE); return false; } - final PlotWorld plotworld = PlotMain.getWorldSettings(args[0]); + final PlotWorld plotworld = PlotSquared.getPlotWorld(args[0]); if (plotworld == null) { - PlayerFunctions.sendMessage(player, C.NOT_VALID_WORLD); + MainUtil.sendMessage(player, C.NOT_VALID_WORLD); return false; } try { final String[] split = args[1].split(";"); final PlotId id = new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); - plot = PlotHelper.getPlot(Bukkit.getWorld(plotworld.worldname), id); + plot = MainUtil.getPlot(plotworld.worldname, id); if (plot == null) { - PlayerFunctions.sendMessage(player, C.NOT_VALID_PLOT_ID); + MainUtil.sendMessage(player, C.NOT_VALID_PLOT_ID); return false; } - world = Bukkit.getWorld(args[0]); + world = args[0]; if (args.length == 3) { - args = new String[]{args[2]}; + args = new String[] { args[2] }; } else { args = new String[0]; } } catch (final Exception e) { - PlayerFunctions.sendMessage(player, C.INFO_SYNTAX_CONSOLE); + MainUtil.sendMessage(player, C.INFO_SYNTAX_CONSOLE); return false; } } - if ((args.length == 1) && args[0].equalsIgnoreCase("inv")) { new InfoInventory(plot, player).build().display(); return true; } - final boolean hasOwner = plot.hasOwner(); boolean containsEveryone; boolean trustedEveryone; - // Wildcard player {added} { containsEveryone = (plot.helpers != null) && plot.helpers.contains(DBFunc.everyone); trustedEveryone = (plot.trusted != null) && plot.trusted.contains(DBFunc.everyone); } - // Unclaimed? if (!hasOwner && !containsEveryone && !trustedEveryone) { - PlayerFunctions.sendMessage(player, C.PLOT_INFO_UNCLAIMED, (plot.id.x + ";" + plot.id.y)); + MainUtil.sendMessage(player, C.PLOT_INFO_UNCLAIMED, (plot.id.x + ";" + plot.id.y)); return true; } - String owner = "none"; if (plot.owner != null) { owner = UUIDHandler.getName(plot.owner); @@ -126,21 +117,19 @@ import com.intellectualcrafters.plot.util.UUIDHandler; owner = plot.owner.toString(); } String info = C.PLOT_INFO.s(); - if (args.length == 1) { info = getCaption(args[0].toLowerCase()); if (info == null) { - PlayerFunctions.sendMessage(player, "&6Categories&7: &ahelpers&7, &aalias&7, &abiome&7, &adenied&7, &aflags&7, &aid&7, &asize&7, &atrusted&7, &aowner&7, &arating"); + MainUtil.sendMessage(player, "&6Categories&7: &ahelpers&7, &aalias&7, &abiome&7, &adenied&7, &aflags&7, &aid&7, &asize&7, &atrusted&7, &aowner&7, &arating"); return false; } } - info = format(info, world, plot, player); - PlayerFunctions.sendMessage(player, C.PLOT_INFO_HEADER); - PlayerFunctions.sendMessage(player, info, false); + MainUtil.sendMessage(player, C.PLOT_INFO_HEADER); + MainUtil.sendMessage(player, info, false); return true; } - + private String getCaption(final String string) { switch (string) { case "helpers": @@ -167,21 +156,19 @@ import com.intellectualcrafters.plot.util.UUIDHandler; return null; } } - - private String format(String info, final World world, final Plot plot, final Player player) { - + + private String format(String info, final String world, final Plot plot, final PlotPlayer player) { final PlotId id = plot.id; - final PlotId id2 = PlayerFunctions.getTopPlot(world, plot).id; - final int num = PlayerFunctions.getPlotSelectionIds(id, id2).size(); + final PlotId id2 = MainUtil.getTopPlot(plot).id; + final int num = MainUtil.getPlotSelectionIds(id, id2).size(); final String alias = plot.settings.getAlias().length() > 0 ? plot.settings.getAlias() : "none"; - final String biome = getBiomeAt(plot).toString(); + final String biome = BlockManager.manager.getBiome(MainUtil.getPlotBottomLoc(world, plot.id).add(1, 0, 1)); final String helpers = getPlayerList(plot.helpers); final String trusted = getPlayerList(plot.trusted); final String denied = getPlayerList(plot.denied); final String rating = String.format("%.1f", DBFunc.getRatings(plot)); final String flags = "&6" + (StringUtils.join(FlagManager.getPlotFlags(plot), "").length() > 0 ? StringUtils.join(FlagManager.getPlotFlags(plot), "&7, &6") : "none"); - final boolean build = (player == null) || plot.hasRights(player); - + final boolean build = (player == null) || plot.isAdded(player.getUUID()); String owner = "none"; if (plot.owner != null) { owner = UUIDHandler.getName(plot.owner); @@ -189,7 +176,6 @@ import com.intellectualcrafters.plot.util.UUIDHandler; if (owner == null) { owner = plot.owner.toString(); } - info = info.replaceAll("%alias%", alias); info = info.replaceAll("%id%", id.toString()); info = info.replaceAll("%id2%", id2.toString()); @@ -203,10 +189,9 @@ import com.intellectualcrafters.plot.util.UUIDHandler; info = info.replaceAll("%flags%", flags); info = info.replaceAll("%build%", build + ""); info = info.replaceAll("%desc%", "No description set."); - return info; } - + private String getPlayerList(final ArrayList l) { if ((l == null) || (l.size() < 1)) { return " none"; @@ -222,7 +207,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } return list.toString(); } - + private String getPlayerName(final UUID uuid) { if (uuid == null) { return "unknown"; @@ -230,16 +215,10 @@ import com.intellectualcrafters.plot.util.UUIDHandler; if (uuid.equals(DBFunc.everyone) || uuid.toString().equalsIgnoreCase(DBFunc.everyone.toString())) { return "everyone"; } - String name = UUIDHandler.getName(uuid); + final String name = UUIDHandler.getName(uuid); if (name == null) { return "unknown"; } return name; } - - private Biome getBiomeAt(final Plot plot) { - final World w = Bukkit.getWorld(plot.world); - final Location bl = PlotHelper.getPlotTopLoc(w, plot.id); - return bl.getBlock().getBiome(); - } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inventory.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inventory.java index 4921d16ac..785217c9c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inventory.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Inventory.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; @@ -26,18 +25,19 @@ import java.util.ArrayList; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -public class Inventory extends SubCommand { +import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.PlotPlayer; +public class Inventory extends SubCommand { public Inventory() { super("inventory", "plots.inventory", "Open a command inventory", "inventory", "inv", CommandCategory.INFO, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { final ArrayList cmds = new ArrayList<>(); for (final SubCommand cmd : MainCommand.subCommands) { if (cmd.permission.hasPermission(plr)) { @@ -49,10 +49,11 @@ public class Inventory extends SubCommand { for (final SubCommand cmd : cmds) { inventory.addItem(getItem(cmd)); } - plr.openInventory(inventory); + // FIXME unchecked cast + ((BukkitPlayer) plr).player.openInventory(inventory); return true; } - + private ItemStack getItem(final SubCommand cmd) { final ItemStack stack = new ItemStack(Material.COMMAND); final ItemMeta meta = stack.getItemMeta(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Kick.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Kick.java index 6c083384f..0e5fc4394 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Kick.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Kick.java @@ -18,49 +18,48 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; - -@SuppressWarnings({"unused", "deprecation", "javadoc"}) public class Kick extends SubCommand { +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +@SuppressWarnings({ "unused", "deprecation", "javadoc" }) +public class Kick extends SubCommand { public Kick() { super(Command.KICK, "Kick a player from your plot", "kick", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, "You're not in a plot."); - return false; + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.kick")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !Permissions.hasPermission(plr, "plots.admin.command.kick")) { + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return false; } if (args.length != 1) { - PlayerFunctions.sendMessage(plr, "&c/plot kick "); + MainUtil.sendMessage(plr, "&c/plot kick "); return false; } - if (Bukkit.getPlayer(args[0]) == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[0]); + PlotPlayer player = UUIDHandler.getPlayer(args[0]); + if (player == null) { + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[0]); return false; } - final Player player = Bukkit.getPlayer(args[0]); - if (!player.getWorld().equals(plr.getWorld()) || !PlayerFunctions.isInPlot(player) || (PlayerFunctions.getCurrentPlot(player) == null) || !PlayerFunctions.getCurrentPlot(player).equals(plot)) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER.s().replaceAll("%player%", args[0])); + if (!player.getLocation().getWorld().equals(loc.getWorld()) || !plot.equals(MainUtil.getPlot(loc))) { + MainUtil.sendMessage(plr, C.INVALID_PLAYER.s().replaceAll("%player%", args[0])); return false; } - player.teleport(player.getWorld().getSpawnLocation()); + player.teleport(BlockManager.manager.getSpawn(loc.getWorld())); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java index 54e913c49..a0d12fe46 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MainCommand.java @@ -18,63 +18,53 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.StringComparison; /** - * PlotMain command class + * PlotSquared command class * * @author Citymonstret */ -public class MainCommand implements CommandExecutor, TabCompleter { - +public class MainCommand { /** * Main Permission Node */ - public static final String MAIN_PERMISSION = "plots.use"; - - private final static SubCommand[] _subCommands = new SubCommand[]{new Setup(), new DebugSaveTest(), new DebugLoadTest(), new CreateRoadSchematic(), new RegenAllRoads(), new DebugClear(), 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 Rate(), new DebugClaimTest(), new Inbox(), new Comment(), new Database(), new Unclaim(), new Swap(), new MusicSubcommand(), new DebugRoadRegen(), new Trim(), new DebugExec(), new FlagCmd(), new Target(), new DebugFixFlags(), new Move(), new Condense() }; - + private final static SubCommand[] _subCommands = new SubCommand[] { new Setup(), new DebugSaveTest(), new DebugLoadTest(), new CreateRoadSchematic(), new RegenAllRoads(), new DebugClear(), new Claim(), 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 Rate(), new DebugClaimTest(), new Inbox(), new Comment(), new Database(), new Unclaim(), new Swap(), new MusicSubcommand(), new DebugRoadRegen(), new Trim(), new DebugExec(), new FlagCmd(), new Target(), new DebugFixFlags(), new Move(), new Condense() }; public final static ArrayList subCommands = new ArrayList() { { addAll(Arrays.asList(_subCommands)); } }; - public static boolean no_permission(final Player player, final String permission) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, permission); + public static boolean no_permission(final PlotPlayer player, final String permission) { + MainUtil.sendMessage(player, C.NO_PERMISSION, permission); return false; } - public static List getCommands(final SubCommand.CommandCategory category, final Player player) { + public static List getCommands(final SubCommand.CommandCategory category, final PlotPlayer player) { final List cmds = new ArrayList<>(); for (final SubCommand c : subCommands) { - if (!c.isPlayer || player != null) { - if ((c.category.equals(category)) && c.permission.hasPermission(player)) { - cmds.add(c); - } - } + if (!c.isPlayer || (player != null)) { + if ((c.category.equals(category)) && c.permission.hasPermission(player)) { + cmds.add(c); + } + } } return cmds; } - public static List helpMenu(final Player player, final SubCommand.CommandCategory category, int page) { + public static List helpMenu(final PlotPlayer player, final SubCommand.CommandCategory category, int page) { List commands; if (category != null) { commands = getCommands(category, player); @@ -92,15 +82,11 @@ public class MainCommand implements CommandExecutor, TabCompleter { if (max > commands.size()) { max = commands.size(); } - final List help = new ArrayList<>(); - help.add(C.HELP_HEADER.s()); // HELP_CATEGORY("&cCategory: &6%category%&c, Page: %current%&c/&6%max%&c, Displaying: &6%dis%&c/&6%total%"), help.add(C.HELP_CATEGORY.s().replace("%category%", category == null ? "All" : category.toString()).replace("%current%", "" + (page + 1)).replace("%max%", "" + (totalPages + 1)).replace("%dis%", "" + (commands.size() % perPage)).replace("%total%", "" + commands.size())); - SubCommand cmd; - final int start = page * perPage; for (int x = start; x < max; x++) { cmd = commands.get(x); @@ -113,19 +99,15 @@ public class MainCommand implements CommandExecutor, TabCompleter { } return help; } - + private static String t(final String s) { - return ChatColor.translateAlternateColorCodes('&', s); + return MainUtil.colorise('&', s); } - @Override - public boolean onCommand(final CommandSender sender, final Command cmd, final String commandLabel, final String[] args) { - final Player player = (sender instanceof Player) ? (Player) sender : null; - - if (!PlotMain.hasPermission(player, MAIN_PERMISSION)) { - return no_permission(player, MAIN_PERMISSION); + public static boolean onCommand(final PlotPlayer player, final String cmd, final String... args) { + if (!Permissions.hasPermission(player, PlotSquared.MAIN_PERMISSION)) { + return no_permission(player, PlotSquared.MAIN_PERMISSION); } - if ((args.length < 1) || ((args.length >= 1) && (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("he")))) { if (args.length < 2) { final StringBuilder builder = new StringBuilder(); @@ -134,7 +116,7 @@ public class MainCommand implements CommandExecutor, TabCompleter { builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", category.toString().toLowerCase()).replaceAll("%category_desc%", category.toString())); } builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", "all").replaceAll("%category_desc%", "Display all commands")); - return PlayerFunctions.sendMessage(player, builder.toString()); + return MainUtil.sendMessage(player, builder.toString()); } final String cat = args[1]; SubCommand.CommandCategory cato = null; @@ -144,26 +126,23 @@ public class MainCommand implements CommandExecutor, TabCompleter { break; } } - if (cato == null && !cat.equalsIgnoreCase("all")) { + if ((cato == null) && !cat.equalsIgnoreCase("all")) { final StringBuilder builder = new StringBuilder(); builder.append(C.HELP_INFO.s()); for (final SubCommand.CommandCategory category : SubCommand.CommandCategory.values()) { builder.append("\n").append(C.HELP_INFO_ITEM.s().replaceAll("%category%", category.toString().toLowerCase()).replaceAll("%category_desc%", category.toString())); } - return PlayerFunctions.sendMessage(player, builder.toString(), false); + return MainUtil.sendMessage(player, builder.toString(), false); } final StringBuilder help = new StringBuilder(); int page = 0; - boolean digit = true; - String arg2; if (args.length > 2) { arg2 = args[2]; } else { arg2 = "1"; } - for (final char c : arg2.toCharArray()) { if (!Character.isDigit(c)) { digit = false; @@ -176,11 +155,10 @@ public class MainCommand implements CommandExecutor, TabCompleter { page = 0; } } - for (final String string : helpMenu(player, cato, page)) { help.append(string).append("\n"); } - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', help.toString())); + player.sendMessage(MainUtil.colorise('&', help.toString())); // return PlayerFunctions.sendMessage(player, help.toString()); } else { for (final SubCommand command : subCommands) { @@ -191,61 +169,24 @@ public class MainCommand implements CommandExecutor, TabCompleter { if ((player != null) || !command.isPlayer) { return command.execute(player, arguments); } else { - return !PlayerFunctions.sendMessage(null, C.IS_CONSOLE); + return !MainUtil.sendMessage(null, C.IS_CONSOLE); } } else { return no_permission(player, command.permission.permission.toLowerCase()); } } } - PlayerFunctions.sendMessage(player, C.NOT_VALID_SUBCOMMAND); - + MainUtil.sendMessage(player, C.NOT_VALID_SUBCOMMAND); final String[] commands = new String[subCommands.size()]; for (int x = 0; x < subCommands.size(); x++) { commands[x] = subCommands.get(x).cmd; } - /* Let's try to get a proper usage string */ final String command = new StringComparison(args[0], commands).getBestMatch(); - return PlayerFunctions.sendMessage(player, C.DID_YOU_MEAN, "/plot " + command); + return MainUtil.sendMessage(player, C.DID_YOU_MEAN, "/plot " + command); // PlayerFunctions.sendMessage(player, C.DID_YOU_MEAN, new // StringComparsion(args[0], commands).getBestMatch()); } return true; } - - @Override - public List onTabComplete(final CommandSender commandSender, final Command command, final String s, final String[] strings) { - if (!(commandSender instanceof Player)) { - return null; - } - final Player player = (Player) commandSender; - - if (strings.length < 1) { - if ((strings.length == 0) || "plots".startsWith(s)) { - return Arrays.asList("plots"); - } - } - if (strings.length > 1) { - return null; - } - if (!command.getLabel().equalsIgnoreCase("plots")) { - return null; - } - final List tabOptions = new ArrayList<>(); - final String arg = strings[0].toLowerCase(); - for (final SubCommand cmd : subCommands) { - if (cmd.permission.hasPermission(player)) { - if (cmd.cmd.startsWith(arg)) { - tabOptions.add(cmd.cmd); - } else if (cmd.alias.get(0).startsWith(arg)) { - tabOptions.add(cmd.alias.get(0)); - } - } - } - if (tabOptions.size() > 0) { - return tabOptions; - } - return null; - } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Merge.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Merge.java index 60536a80c..8e36e9c69 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Merge.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Merge.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.ArrayList; @@ -26,32 +25,30 @@ 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.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.events.PlotMergeEvent; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class Merge extends SubCommand { - - 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[] values = new String[] { "north", "east", "south", "west" }; + public final static String[] aliases = new String[] { "n", "e", "s", "w" }; + public Merge() { super(Command.MERGE, "Merge the plot you are standing on with another plot.", "merge", CommandCategory.ACTIONS, true); } - + public static String direction(float yaw) { yaw = yaw / 90; final int i = Math.round(yaw); @@ -73,26 +70,26 @@ public class Merge extends SubCommand { return ""; } } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return true; + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if ((plot == null) || !plot.hasOwner()) { - PlayerFunctions.sendMessage(plr, C.PLOT_UNOWNED); + MainUtil.sendMessage(plr, C.PLOT_UNOWNED); return false; } - boolean admin = PlotMain.hasPermission(plr, "plots.admin.command.merge"); + final boolean admin = Permissions.hasPermission(plr, "plots.admin.command.merge"); if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !admin) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return false; } if (args.length < 1) { - PlayerFunctions.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + StringUtils.join(values, C.BLOCK_LIST_SEPARATER.s())); - PlayerFunctions.sendMessage(plr, C.DIRECTION.s().replaceAll("%dir%", direction(plr.getLocation().getYaw()))); + MainUtil.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + StringUtils.join(values, C.BLOCK_LIST_SEPARATER.s())); + MainUtil.sendMessage(plr, C.DIRECTION.s().replaceAll("%dir%", direction(plr.getLocation().getYaw()))); return false; } int direction = -1; @@ -103,81 +100,71 @@ public class Merge extends SubCommand { } } if (direction == -1) { - PlayerFunctions.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + StringUtils.join(values, C.BLOCK_LIST_SEPARATER.s())); - PlayerFunctions.sendMessage(plr, C.DIRECTION.s().replaceAll("%dir%", direction(plr.getLocation().getYaw()))); + MainUtil.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + StringUtils.join(values, C.BLOCK_LIST_SEPARATER.s())); + MainUtil.sendMessage(plr, C.DIRECTION.s().replaceAll("%dir%", direction(plr.getLocation().getYaw()))); return false; } - final World world = plr.getWorld(); - PlotId bot = PlayerFunctions.getBottomPlot(world, plot).id; - PlotId top = PlayerFunctions.getTopPlot(world, plot).id; + PlotId bot = MainUtil.getBottomPlot(plot).id; + PlotId top = MainUtil.getTopPlot(plot).id; ArrayList plots; + String world = plr.getLocation().getWorld(); switch (direction) { case 0: // north = -y - plots = PlayerFunctions.getMaxPlotSelectionIds(world, new PlotId(bot.x, bot.y - 1), new PlotId(top.x, top.y)); + plots = MainUtil.getMaxPlotSelectionIds(world, new PlotId(bot.x, bot.y - 1), new PlotId(top.x, top.y)); break; case 1: // east = +x - plots = PlayerFunctions.getMaxPlotSelectionIds(world, new PlotId(bot.x, bot.y), new PlotId(top.x + 1, top.y)); + plots = MainUtil.getMaxPlotSelectionIds(world, new PlotId(bot.x, bot.y), new PlotId(top.x + 1, top.y)); break; case 2: // south = +y - plots = PlayerFunctions.getMaxPlotSelectionIds(world, new PlotId(bot.x, bot.y), new PlotId(top.x, top.y + 1)); + plots = MainUtil.getMaxPlotSelectionIds(world, new PlotId(bot.x, bot.y), new PlotId(top.x, top.y + 1)); break; case 3: // west = -x - plots = PlayerFunctions.getMaxPlotSelectionIds(world, new PlotId(bot.x - 1, bot.y), new PlotId(top.x, top.y)); + plots = MainUtil.getMaxPlotSelectionIds(world, new PlotId(bot.x - 1, bot.y), new PlotId(top.x, top.y)); break; default: return false; } - - PlotId botId = plots.get(0); - PlotId topId = plots.get(plots.size() - 1); - - PlotId bot1 = PlayerFunctions.getBottomPlot(world, PlotHelper.getPlot(world, botId)).id; - PlotId bot2 = PlayerFunctions.getBottomPlot(world, PlotHelper.getPlot(world, topId)).id; - - PlotId top1 = PlayerFunctions.getTopPlot(world, PlotHelper.getPlot(world, topId)).id; - PlotId top2 = PlayerFunctions.getTopPlot(world, PlotHelper.getPlot(world, botId)).id; - + final PlotId botId = plots.get(0); + final PlotId topId = plots.get(plots.size() - 1); + final PlotId bot1 = MainUtil.getBottomPlot(MainUtil.getPlot(world, botId)).id; + final PlotId bot2 = MainUtil.getBottomPlot(MainUtil.getPlot(world, topId)).id; + final PlotId top1 = MainUtil.getTopPlot(MainUtil.getPlot(world, topId)).id; + final PlotId top2 = MainUtil.getTopPlot(MainUtil.getPlot(world, botId)).id; bot = new PlotId(Math.min(bot1.x, bot2.x), Math.min(bot1.y, bot2.y)); top = new PlotId(Math.max(top1.x, top2.x), Math.max(top1.y, top2.y)); - - plots = PlayerFunctions.getMaxPlotSelectionIds(world, bot, top); - + plots = MainUtil.getMaxPlotSelectionIds(world, bot, top); for (final PlotId myid : plots) { - final Plot myplot = PlotMain.getPlots(world).get(myid); + final Plot myplot = PlotSquared.getPlots(world).get(myid); if ((myplot == null) || !myplot.hasOwner() || !(myplot.getOwner().equals(UUIDHandler.getUUID(plr)) || admin)) { - PlayerFunctions.sendMessage(plr, C.NO_PERM_MERGE.s().replaceAll("%plot%", myid.toString())); + MainUtil.sendMessage(plr, C.NO_PERM_MERGE.s().replaceAll("%plot%", myid.toString())); return false; } } - - final PlotWorld plotWorld = PlotMain.getWorldSettings(world); - if (PlotMain.useEconomy && plotWorld.USE_ECONOMY) { + final PlotWorld plotWorld = PlotSquared.getPlotWorld(world); + if (PlotSquared.economy != null && plotWorld.USE_ECONOMY) { double cost = plotWorld.MERGE_PRICE; cost = plots.size() * cost; if (cost > 0d) { - final Economy economy = PlotMain.economy; - if (economy.getBalance(plr) < cost) { + final Economy economy = PlotSquared.economy; + if (EconHandler.getBalance(plr) < cost) { sendMessage(plr, C.CANNOT_AFFORD_MERGE, cost + ""); return false; } - economy.withdrawPlayer(plr, cost); + EconHandler.withdrawPlayer(plr, cost); sendMessage(plr, C.REMOVED_BALANCE, cost + ""); } } - - final PlotMergeEvent event = new PlotMergeEvent(world, plot, plots); - - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - event.setCancelled(true); - PlayerFunctions.sendMessage(plr, "&cMerge has been cancelled"); + //FIXME PlotMergeEvent + // boolean result = event.isCancelled(); + boolean result = false; + if (result) { + MainUtil.sendMessage(plr, "&cMerge has been cancelled"); return false; } - PlayerFunctions.sendMessage(plr, "&cPlots have been merged"); - PlotHelper.mergePlots(world, plots, true); - - PlotHelper.setSign(world, UUIDHandler.getName(plot.owner), plot); - PlotHelper.update(plr.getLocation()); + MainUtil.sendMessage(plr, "&cPlots have been merged"); + MainUtil.mergePlots(world, plots, true); + MainUtil.setSign(UUIDHandler.getName(plot.owner), plot); + MainUtil.update(plr.getLocation()); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Move.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Move.java index a5c945204..7c1267523 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Move.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Move.java @@ -18,24 +18,11 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import java.util.ArrayList; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; /** * Created 2014-08-01 for PlotSquared @@ -43,41 +30,39 @@ import com.intellectualcrafters.plot.util.TaskManager; * @author Empire92 */ public class Move extends SubCommand { - public Move() { super("debugmove", "plots.admin", "plot moving debug test", "debugmove", "move", CommandCategory.DEBUG, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr == null) { - PlayerFunctions.sendMessage(plr, "MUST BE EXECUTED BY PLAYER"); + MainUtil.sendMessage(plr, "MUST BE EXECUTED BY PLAYER"); } if (args.length != 2) { - PlayerFunctions.sendMessage(plr, "/plot move "); + MainUtil.sendMessage(plr, "/plot move "); return false; } - World world = plr.getWorld(); - PlotId plot1 = PlotHelper.parseId(args[0]); - PlotId plot2 = PlotHelper.parseId(args[1]); - if (plot1 == null || plot2 == null) { - PlayerFunctions.sendMessage(plr, "INVALID PLOT ID\n/plot move "); + final String world = plr.getLocation().getWorld(); + final PlotId plot1 = MainUtil.parseId(args[0]); + final PlotId plot2 = MainUtil.parseId(args[1]); + if ((plot1 == null) || (plot2 == null)) { + MainUtil.sendMessage(plr, "INVALID PLOT ID\n/plot move "); return false; } if (plot1 == plot2) { - PlayerFunctions.sendMessage(plr, "DUPLICATE ID"); + MainUtil.sendMessage(plr, "DUPLICATE ID"); return false; } - if (PlotHelper.move(world, plot1, plot2, new Runnable() { + if (MainUtil.move(world, plot1, plot2, new Runnable() { @Override public void run() { - PlayerFunctions.sendMessage(plr, "MOVE SUCCESS"); + MainUtil.sendMessage(plr, "MOVE SUCCESS"); } })) { return true; - } - else { - PlayerFunctions.sendMessage(plr, "MOVE FAILED"); + } else { + MainUtil.sendMessage(plr, "MOVE FAILED"); return false; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MusicSubcommand.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MusicSubcommand.java index b8622f16c..ced6c571d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MusicSubcommand.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/MusicSubcommand.java @@ -18,35 +18,36 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.Arrays; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.listeners.PlotPlusListener; +import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; public class MusicSubcommand extends SubCommand { public MusicSubcommand() { super("music", "plots.music", "Play music in plot", "music", "mus", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player player, final String... args) { - if (!PlayerFunctions.isInPlot(player)) { - sendMessage(player, C.NOT_IN_PLOT); - return true; + public boolean execute(final PlotPlayer player, final String... args) { + Location loc = player.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(player, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(player); - if (!plot.hasRights(player)) { + if (!plot.isAdded(player.getUUID())) { sendMessage(player, C.NO_PLOT_PERMS); return true; } @@ -59,7 +60,8 @@ public class MusicSubcommand extends SubCommand { stack.setItemMeta(itemMeta); inventory.addItem(stack); } - player.openInventory(inventory); + // FIXME unchecked casting + ((BukkitPlayer) player).player.openInventory(inventory); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/OP.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/OP.java deleted file mode 100644 index 38a3b6487..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/OP.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.intellectualcrafters.plot.commands; - -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; - -/** - * Created 2014-11-09 for PlotSquared - * - * @author Citymonstret - */ -public class OP extends SubCommand { - - public OP() { - super(Command.OP, "Alias for /plot trusted add", "/plot op [player]", CommandCategory.ACTIONS, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (args.length < 1) { - return PlayerFunctions.sendMessage(plr, "&cUsage: &c" + this.usage); - } - if (!PlayerFunctions.isInPlot(plr)) { - return sendMessage(plr, C.NOT_IN_PLOT); - } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!plot.hasRights(plr)) { - return sendMessage(plr, C.NO_PLOT_PERMS); - } - return plr.performCommand("plot trusted add " + args[0]); - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Paste.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Paste.java deleted file mode 100644 index 70b21bee3..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Paste.java +++ /dev/null @@ -1,73 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.commands; - -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.PlotSelection; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; - -public class Paste extends SubCommand { - - public Paste() { - super(Command.PASTE, "Paste a plot", "paste", CommandCategory.ACTIONS, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return false; - } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.paste")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); - return false; - } - if (!PlayerFunctions.getTopPlot(plr.getWorld(), plot).equals(PlayerFunctions.getBottomPlot(plr.getWorld(), plot))) { - PlayerFunctions.sendMessage(plr, C.UNLINK_REQUIRED); - return false; - } - assert plot != null; - final int size = (PlotHelper.getPlotTopLocAbs(plr.getWorld(), plot.getId()).getBlockX() - PlotHelper.getPlotBottomLocAbs(plr.getWorld(), plot.getId()).getBlockX()); - - if (PlotSelection.currentSelection.containsKey(plr.getName())) { - final PlotSelection selection = PlotSelection.currentSelection.get(plr.getName()); - if (size != selection.getWidth()) { - sendMessage(plr, C.PASTE_FAILED, "The size of the current plot is not the same as the paste"); - return false; - } - selection.paste(plr.getWorld(), plot); - sendMessage(plr, C.PASTED); - } else { - sendMessage(plr, C.NO_CLIPBOARD); - return false; - } - PlotSelection.currentSelection.remove(plr.getName()); - return true; - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Purge.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Purge.java index 441d901a9..a9e1b0b97 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Purge.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Purge.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.Collection; @@ -26,148 +25,143 @@ import java.util.HashSet; import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; - -@SuppressWarnings({"javadoc"}) public class Purge extends SubCommand { +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +@SuppressWarnings({ "javadoc" }) +public class Purge extends SubCommand { public Purge() { super("purge", "plots.admin", "Purge all plots for a world", "purge", "", CommandCategory.DEBUG, false); } - - public PlotId getId(String id) { + + public PlotId getId(final String id) { try { - String[] split = id.split(";"); + final String[] split = id.split(";"); return new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); - } - catch (Exception e) { + } catch (final Exception e) { return null; } } @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr != null) { - PlayerFunctions.sendMessage(plr, (C.NOT_CONSOLE)); + MainUtil.sendMessage(plr, (C.NOT_CONSOLE)); return false; } if (args.length == 1) { - String arg = args[0].toLowerCase(); - PlotId id = getId(arg); + final String arg = args[0].toLowerCase(); + final PlotId id = getId(arg); if (id != null) { - PlayerFunctions.sendMessage(plr, "/plot purge x;z &l"); + MainUtil.sendMessage(plr, "/plot purge x;z &l"); return false; } - UUID uuid = UUIDHandler.getUUID(args[0]); + final UUID uuid = UUIDHandler.getUUID(args[0]); if (uuid != null) { - PlayerFunctions.sendMessage(plr, "/plot purge "+args[0]+" &l"); + MainUtil.sendMessage(plr, "/plot purge " + args[0] + " &l"); return false; } if (arg.equals("player")) { - PlayerFunctions.sendMessage(plr, "/plot purge &l "); + MainUtil.sendMessage(plr, "/plot purge &l "); return false; } if (arg.equals("unowned")) { - PlayerFunctions.sendMessage(plr, "/plot purge unowned &l"); + MainUtil.sendMessage(plr, "/plot purge unowned &l"); return false; } if (arg.equals("unknown")) { - PlayerFunctions.sendMessage(plr, "/plot purge unknown &l"); + MainUtil.sendMessage(plr, "/plot purge unknown &l"); return false; } if (arg.equals("all")) { - PlayerFunctions.sendMessage(plr, "/plot purge all &l"); + MainUtil.sendMessage(plr, "/plot purge all &l"); return false; } - PlayerFunctions.sendMessage(plr, C.PURGE_SYNTAX); + MainUtil.sendMessage(plr, C.PURGE_SYNTAX); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(plr, C.PURGE_SYNTAX); + MainUtil.sendMessage(plr, C.PURGE_SYNTAX); return false; } - World world = Bukkit.getWorld(args[1]); - if (world == null || !PlotMain.isPlotWorld(world)) { - PlayerFunctions.sendMessage(null, C.NOT_VALID_PLOT_WORLD); + final String worldname = args[0]; + if (!BlockManager.manager.isWorld(worldname) || !PlotSquared.isPlotWorld(worldname)) { + MainUtil.sendMessage(plr, "INVALID WORLD"); return false; } - String worldname = world.getName(); - String arg = args[0].toLowerCase(); - PlotId id = getId(arg); + final String arg = args[0].toLowerCase(); + final PlotId id = getId(arg); if (id != null) { - HashSet ids = new HashSet(); - int DBid = DBFunc.getId(worldname, id); + final HashSet ids = new HashSet(); + final int DBid = DBFunc.getId(worldname, id); if (DBid != Integer.MAX_VALUE) { ids.add(DBid); } DBFunc.purgeIds(worldname, ids); return finishPurge(DBid == Integer.MAX_VALUE ? 1 : 0); } - UUID uuid = UUIDHandler.getUUID(args[0]); + final UUID uuid = UUIDHandler.getUUID(args[0]); if (uuid != null) { - Set plots = PlotMain.getPlots(world,uuid); - Set ids = new HashSet<>(); - for (Plot plot : plots) { + final Set plots = PlotSquared.getPlots(worldname, uuid); + final Set ids = new HashSet<>(); + for (final Plot plot : plots) { ids.add(plot.id); } DBFunc.purge(worldname, ids); return finishPurge(ids.size()); } if (arg.equals("all")) { - Set ids = PlotMain.getPlots(world).keySet(); + final Set ids = PlotSquared.getPlots(worldname).keySet(); if (ids.size() == 0) { - return PlayerFunctions.sendMessage(null, "&cNo plots found"); + return MainUtil.sendMessage(null, "&cNo plots found"); } DBFunc.purge(worldname, ids); return finishPurge(ids.size()); } if (arg.equals("unknown")) { - Collection plots = PlotMain.getPlots(world).values(); - Set ids = new HashSet<>(); - for (Plot plot : plots) { + final Collection plots = PlotSquared.getPlots(worldname).values(); + final Set ids = new HashSet<>(); + for (final Plot plot : plots) { if (plot.owner != null) { - String name = UUIDHandler.getName(plot.owner); + final String name = UUIDHandler.getName(plot.owner); if (name == null) { ids.add(plot.id); } } } if (ids.size() == 0) { - return PlayerFunctions.sendMessage(null, "&cNo plots found"); + return MainUtil.sendMessage(null, "&cNo plots found"); } DBFunc.purge(worldname, ids); return finishPurge(ids.size()); } if (arg.equals("unowned")) { - Collection plots = PlotMain.getPlots(world).values(); - Set ids = new HashSet<>(); - for (Plot plot : plots) { + final Collection plots = PlotSquared.getPlots(worldname).values(); + final Set ids = new HashSet<>(); + for (final Plot plot : plots) { if (plot.owner == null) { ids.add(plot.id); } } if (ids.size() == 0) { - return PlayerFunctions.sendMessage(null, "&cNo plots found"); + return MainUtil.sendMessage(null, "&cNo plots found"); } DBFunc.purge(worldname, ids); return finishPurge(ids.size()); } - PlayerFunctions.sendMessage(plr, C.PURGE_SYNTAX); + MainUtil.sendMessage(plr, C.PURGE_SYNTAX); return false; } - - private boolean finishPurge(int amount) { - PlayerFunctions.sendMessage(null, C.PURGE_SUCCESS, amount + ""); + + private boolean finishPurge(final int amount) { + MainUtil.sendMessage(null, C.PURGE_SUCCESS, amount + ""); return false; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Rate.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Rate.java index e3705a4ea..dfe8c9652 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Rate.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Rate.java @@ -18,39 +18,36 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; - import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; - -@SuppressWarnings({"unused", "deprecated", "javadoc"}) public class Rate extends SubCommand { +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +public class Rate extends SubCommand { /* * String cmd, String permission, String description, String usage, String * alias, CommandCategory category */ - public Rate() { super("rate", "plots.rate", "Rate the plot", "rate {0-10}", "rt", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { sendMessage(plr, C.RATING_NOT_VALID); return true; } - if (!PlayerFunctions.isInPlot(plr)) { - sendMessage(plr, C.NOT_IN_PLOT); - return true; + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if (!plot.hasOwner()) { sendMessage(plr, C.RATING_NOT_OWNED); return true; @@ -82,7 +79,6 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } catch (final Exception e) { rated = false; } - if (rated) { sendMessage(plr, C.RATING_ALREADY_EXISTS, plot.getId().toString()); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/RegenAllRoads.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/RegenAllRoads.java index a7d4efea3..d8d27b0d8 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/RegenAllRoads.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/RegenAllRoads.java @@ -18,66 +18,50 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import java.util.ArrayList; +import java.util.List; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.generator.HybridPlotManager; +import com.intellectualcrafters.plot.generator.HybridUtils; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.PlotManager; -import com.intellectualcrafters.plot.util.ChunkManager; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.AChunkManager; public class RegenAllRoads extends SubCommand { - public RegenAllRoads() { super(Command.REGENALLROADS, "Regenerate all roads in the map using the set road schematic", "rgar", CommandCategory.DEBUG, false); } - + @Override - public boolean execute(final Player player, final String... args) { - + public boolean execute(final PlotPlayer player, final String... args) { if (player != null) { sendMessage(player, C.NOT_CONSOLE); return false; } - if (args.length != 1) { sendMessage(player, C.NEED_PLOT_WORLD); return false; } - - String name = args[0]; - PlotManager manager = PlotMain.getPlotManager(name); - - if (manager == null || !(manager instanceof HybridPlotManager)) { + final String name = args[0]; + final PlotManager manager = PlotSquared.getPlotManager(name); + if ((manager == null) || !(manager instanceof HybridPlotManager)) { sendMessage(player, C.NOT_VALID_PLOT_WORLD); return false; } - - HybridPlotManager hpm = (HybridPlotManager) manager; - - World world = Bukkit.getWorld(name); - ArrayList chunks = ChunkManager.getChunkChunks(world); - - PlotMain.sendConsoleSenderMessage("&cIf no schematic is set, the following will not do anything"); - PlotMain.sendConsoleSenderMessage("&7 - To set a schematic, stand in a plot and use &c/plot createroadschematic"); - PlotMain.sendConsoleSenderMessage("&6Potential chunks to update: &7"+ (chunks.size() * 1024)); - PlotMain.sendConsoleSenderMessage("&6Estimated time: &7"+ (chunks.size()) + " seconds"); - - boolean result = hpm.scheduleRoadUpdate(world); - + final List chunks = AChunkManager.manager.getChunkChunks(name); + PlotSquared.log("&cIf no schematic is set, the following will not do anything"); + PlotSquared.log("&7 - To set a schematic, stand in a plot and use &c/plot createroadschematic"); + PlotSquared.log("&6Potential chunks to update: &7" + (chunks.size() * 1024)); + PlotSquared.log("&6Estimated time: &7" + (chunks.size()) + " seconds"); + final boolean result = HybridUtils.manager.scheduleRoadUpdate(name); if (!result) { - PlotMain.sendConsoleSenderMessage("&cCannot schedule mass schematic update! (Is one already in progress?)"); + PlotSquared.log("&cCannot schedule mass schematic update! (Is one already in progress?)"); return false; } - return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Reload.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Reload.java index 023e072c1..22ef1b96c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Reload.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Reload.java @@ -18,39 +18,35 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.util.MainUtil; public class Reload extends SubCommand { - public Reload() { super("reload", "plots.admin.command.reload", "Reload configurations", "", "reload", CommandCategory.INFO, false); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { try { // The following won't affect world generation, as that has to be // loaded during startup unfortunately. - PlotMain.config.load(PlotMain.configFile); - PlotMain.setupConfig(); + PlotSquared.config.load(PlotSquared.configFile); + PlotSquared.setupConfig(); C.setupTranslations(); - for (final String pw : PlotMain.getPlotWorlds()) { - final PlotWorld plotworld = PlotMain.getWorldSettings(pw); - plotworld.loadDefaultConfiguration(PlotMain.config.getConfigurationSection("worlds." + pw)); + for (final String pw : PlotSquared.getPlotWorlds()) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(pw); + plotworld.loadDefaultConfiguration(PlotSquared.config.getConfigurationSection("worlds." + pw)); } - PlotMain.BroadcastWithPerms(C.RELOADED_CONFIGS); + MainUtil.sendMessage(plr, C.RELOADED_CONFIGS); } catch (final Exception e) { - PlayerFunctions.sendMessage(plr, C.RELOAD_FAILED); + MainUtil.sendMessage(plr, C.RELOAD_FAILED); } return true; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java index 08b1aaa1c..f692996b5 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java @@ -18,45 +18,41 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.SchematicHandler; import com.intellectualcrafters.plot.util.SchematicHandler.DataCollection; import com.intellectualcrafters.plot.util.SchematicHandler.Dimension; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Schematic extends SubCommand { - private int counter = 0; private boolean running = false; private Plot[] plots; private int task; - + public Schematic() { super("schematic", "plots.schematic", "Schematic Command", "schematic {arg}", "sch", CommandCategory.ACTIONS, false); // TODO command to fetch schematic from worldedit directory } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { sendMessage(plr, C.SCHEMATIC_MISSING_ARG); return true; @@ -65,31 +61,33 @@ public class Schematic extends SubCommand { final String file; final SchematicHandler.Schematic schematic; switch (arg) { - case "paste": + case "paste": { if (plr == null) { - PlotMain.sendConsoleSenderMessage(C.IS_CONSOLE); + PlotSquared.log(C.IS_CONSOLE.s()); return false; } - if (!PlotMain.hasPermission(plr, "plots.schematic.paste")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.schematic.paste"); + if (!Permissions.hasPermission(plr, "plots.schematic.paste")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.schematic.paste"); return false; } if (args.length < 2) { sendMessage(plr, C.SCHEMATIC_MISSING_ARG); break; } - if (!PlayerFunctions.isInPlot(plr)) { + final Location loc = plr.getLocation(); + Plot plot = MainUtil.getPlot(loc); + if (plot == null) { sendMessage(plr, C.NOT_IN_PLOT); break; } if (this.running) { - PlayerFunctions.sendMessage(plr, "&cTask is already running."); + MainUtil.sendMessage(plr, "&cTask is already running."); return false; } final String file2 = args[1]; this.running = true; this.counter = 0; - Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { final SchematicHandler.Schematic schematic = SchematicHandler.getSchematic(file2); @@ -98,40 +96,32 @@ public class Schematic extends SubCommand { Schematic.this.running = false; return; } - final int x; final int z; - - final Plot plot2 = PlayerFunctions.getCurrentPlot(plr); - + final Plot plot2 = MainUtil.getPlot(loc); final Dimension dem = schematic.getSchematicDimension(); - final Location bot = PlotHelper.getPlotBottomLoc(plr.getWorld(), plot2.id).add(1, 0, 1); - final int length2 = PlotHelper.getPlotWidth(plr.getWorld(), plot2.id); - + final Location bot = MainUtil.getPlotBottomLoc(loc.getWorld(), plot2.id).add(1, 0, 1); + final int length2 = MainUtil.getPlotWidth(loc.getWorld(), plot2.id); if ((dem.getX() > length2) || (dem.getZ() > length2)) { sendMessage(plr, C.SCHEMATIC_INVALID, String.format("Wrong size (x: %s, z: %d) vs %d ", dem.getX(), dem.getZ(), length2)); Schematic.this.running = false; return; } - if ((dem.getX() != length2) || (dem.getZ() != length2)) { final Location loc = plr.getLocation(); - x = Math.min(length2 - dem.getX(), loc.getBlockX() - bot.getBlockX()); - z = Math.min(length2 - dem.getZ(), loc.getBlockZ() - bot.getBlockZ()); + x = Math.min(length2 - dem.getX(), loc.getX() - bot.getX()); + z = Math.min(length2 - dem.getZ(), loc.getZ() - bot.getZ()); } else { x = 0; z = 0; } - - final World w = plot2.getWorld(); final DataCollection[] b = schematic.getBlockCollection(); - final int sy = w.getHighestBlockYAt(bot.getBlockX(), bot.getBlockZ()); + final int sy = BlockManager.manager.getHeighestBlock(bot); final Location l1 = bot.add(0, sy - 1, 0); final int WIDTH = schematic.getSchematicDimension().getX(); final int LENGTH = schematic.getSchematicDimension().getZ(); final int blen = b.length - 1; - - Schematic.this.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(), new Runnable() { + Schematic.this.task = TaskManager.runTaskRepeat(new Runnable() { @Override public void run() { boolean result = false; @@ -139,27 +129,28 @@ public class Schematic extends SubCommand { final int start = Schematic.this.counter * 5000; if (start > blen) { sendMessage(plr, C.SCHEMATIC_PASTE_SUCCESS); - PlotHelper.update(plr.getLocation()); + MainUtil.update(plr.getLocation()); Schematic.this.running = false; - Bukkit.getScheduler().cancelTask(Schematic.this.task); + PlotSquared.TASK.cancelTask(Schematic.this.task); return; } final int end = Math.min(start + 5000, blen); - result = SchematicHandler.pastePart(w, b, l1, x, z, start, end, WIDTH, LENGTH); + result = SchematicHandler.pastePart(loc.getWorld(), b, l1, x, z, start, end, WIDTH, LENGTH); Schematic.this.counter++; } } - }, 1, 1); + }, 1); } }); break; - case "test": + } + case "test": { if (plr == null) { - PlotMain.sendConsoleSenderMessage(C.IS_CONSOLE); + PlotSquared.log(C.IS_CONSOLE.s()); return false; } - if (!PlotMain.hasPermission(plr, "plots.schematic.test")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.schematic.test"); + if (!Permissions.hasPermission(plr, "plots.schematic.test")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.schematic.test"); return false; } if (args.length < 2) { @@ -172,171 +163,164 @@ public class Schematic extends SubCommand { sendMessage(plr, C.SCHEMATIC_INVALID, "non-existent"); break; } - + Location loc = plr.getLocation(); final int l1 = schematic.getSchematicDimension().getX(); final int l2 = schematic.getSchematicDimension().getZ(); - - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - final int length = PlotHelper.getPlotWidth(plr.getWorld(), plot.id); - + final Plot plot = MainUtil.getPlot(loc); + final int length = MainUtil.getPlotWidth(loc.getWorld(), plot.id); if ((l1 < length) || (l2 < length)) { sendMessage(plr, C.SCHEMATIC_INVALID, String.format("Wrong size (x: %s, z: %d) vs %d ", l1, l2, length)); break; } sendMessage(plr, C.SCHEMATIC_VALID); break; + } case "saveall": - case "exportall": + case "exportall": { if (plr != null) { - PlayerFunctions.sendMessage(plr, C.NOT_CONSOLE); + MainUtil.sendMessage(plr, C.NOT_CONSOLE); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(null, "&cNeed world arg. Use &7/plots sch exportall "); + MainUtil.sendMessage(null, "&cNeed world arg. Use &7/plots sch exportall "); return false; } - final HashMap plotmap = PlotMain.getPlots(args[1]); + final HashMap plotmap = PlotSquared.getPlots(args[1]); if ((plotmap == null) || (plotmap.size() == 0)) { - PlayerFunctions.sendMessage(null, "&cInvalid world. Use &7/plots sch exportall "); + MainUtil.sendMessage(null, "&cInvalid world. Use &7/plots sch exportall "); return false; } if (this.running) { - PlayerFunctions.sendMessage(null, "&cTask is already running."); + MainUtil.sendMessage(null, "&cTask is already running."); return false; } - - PlotMain.sendConsoleSenderMessage("&3PlotSquared&8->&3Schemaitc&8: &7Mass export has started. This may take a while."); - PlotMain.sendConsoleSenderMessage("&3PlotSquared&8->&3Schemaitc&8: &7Found &c" + plotmap.size() + "&7 plots..."); - final World worldObj = Bukkit.getWorld(args[1]); - final String worldname = Bukkit.getWorld(args[1]).getName(); - - final Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"); - + PlotSquared.log("&3PlotSquared&8->&3Schemaitc&8: &7Mass export has started. This may take a while."); + PlotSquared.log("&3PlotSquared&8->&3Schemaitc&8: &7Found &c" + plotmap.size() + "&7 plots..."); + final String worldname = args[1]; final Collection values = plotmap.values(); this.plots = values.toArray(new Plot[values.size()]); this.running = true; this.counter = 0; - - this.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + this.task = TaskManager.runTaskRepeat(new Runnable() { @Override public void run() { if (Schematic.this.counter >= Schematic.this.plots.length) { - PlotMain.sendConsoleSenderMessage("&3PlotSquared&8->&3Schemaitc&8: &aFinished!"); + PlotSquared.log("&3PlotSquared&8->&3Schemaitc&8: &aFinished!"); Schematic.this.running = false; - Bukkit.getScheduler().cancelTask(Schematic.this.task); + PlotSquared.TASK.cancelTask(Schematic.this.task); return; } final Plot plot = Schematic.this.plots[Schematic.this.counter]; - final CompoundTag sch = SchematicHandler.getCompoundTag(worldObj, plot.id); + final CompoundTag sch = SchematicHandler.getCompoundTag(worldname, plot.id); final String o = UUIDHandler.getName(plot.owner); final String owner = o == null ? "unknown" : o; if (sch == null) { - PlayerFunctions.sendMessage(null, "&7 - Skipped plot &c" + plot.id); + MainUtil.sendMessage(null, "&7 - Skipped plot &c" + plot.id); } else { - Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { - PlayerFunctions.sendMessage(null, "&6ID: " + plot.id); + MainUtil.sendMessage(null, "&6ID: " + plot.id); final boolean result = SchematicHandler.save(sch, Settings.SCHEMATIC_SAVE_PATH + "/" + plot.id.x + ";" + plot.id.y + "," + worldname + "," + owner + ".schematic"); if (!result) { - PlayerFunctions.sendMessage(null, "&7 - Failed to save &c" + plot.id); + MainUtil.sendMessage(null, "&7 - Failed to save &c" + plot.id); } else { - PlayerFunctions.sendMessage(null, "&7 - &aExport success: " + plot.id); + MainUtil.sendMessage(null, "&7 - &aExport success: " + plot.id); } } }); } Schematic.this.counter++; } - }, 20, 20); + }, 20); break; + } case "export": case "save": - if (!PlotMain.hasPermission(plr, "plots.schematic.save")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.schematic.save"); + { + if (!Permissions.hasPermission(plr, "plots.schematic.save")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.schematic.save"); return false; } if (this.running) { - PlayerFunctions.sendMessage(plr, "&cTask is already running."); + MainUtil.sendMessage(plr, "&cTask is already running."); return false; } final String world; final Plot p2; if (plr != null) { - if (!PlayerFunctions.isInPlot(plr)) { - sendMessage(plr, C.NOT_IN_PLOT); - return false; + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot myplot = PlayerFunctions.getCurrentPlot(plr); - if (!myplot.hasRights(plr)) { + if (!plot.isAdded(plr.getUUID())) { sendMessage(plr, C.NO_PLOT_PERMS); return false; } - p2 = myplot; - world = plr.getWorld().getName(); + p2 = plot; + world = loc.getWorld(); } else { if (args.length == 3) { try { world = args[0]; final String[] split = args[2].split(";"); final PlotId i = new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); - if ((PlotMain.getPlots(world) == null) || (PlotMain.getPlots(world).get(i) == null)) { - PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save "); + if ((PlotSquared.getPlots(world) == null) || (PlotSquared.getPlots(world).get(i) == null)) { + MainUtil.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save "); return false; } - p2 = PlotMain.getPlots(world).get(i); + p2 = PlotSquared.getPlots(world).get(i); } catch (final Exception e) { - PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save "); + MainUtil.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save "); return false; } } else { - PlayerFunctions.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save "); + MainUtil.sendMessage(null, "&cInvalid world or id. Use &7/plots sch save "); return false; } } - - final Plugin plugin2 = Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"); - - this.plots = new Plot[]{p2}; + this.plots = new Plot[] { p2 }; this.running = true; this.counter = 0; - - this.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin2, new Runnable() { + this.task = TaskManager.runTaskRepeat(new Runnable() { @Override public void run() { if (Schematic.this.counter >= Schematic.this.plots.length) { - PlotMain.sendConsoleSenderMessage("&3PlotSquared&8->&3Schemaitc&8: &aFinished!"); + PlotSquared.log("&3PlotSquared&8->&3Schemaitc&8: &aFinished!"); Schematic.this.running = false; - Bukkit.getScheduler().cancelTask(Schematic.this.task); + PlotSquared.TASK.cancelTask(Schematic.this.task); return; } final Plot plot = Schematic.this.plots[Schematic.this.counter]; - final CompoundTag sch = SchematicHandler.getCompoundTag(Bukkit.getWorld(world), plot.id); + final CompoundTag sch = SchematicHandler.getCompoundTag(world, plot.id); final String o = UUIDHandler.getName(plot.owner); final String owner = o == null ? "unknown" : o; if (sch == null) { - PlayerFunctions.sendMessage(plr, "&7 - Skipped plot &c" + plot.id); + MainUtil.sendMessage(plr, "&7 - Skipped plot &c" + plot.id); } else { - Bukkit.getScheduler().runTaskAsynchronously(Bukkit.getServer().getPluginManager().getPlugin("PlotSquared"), new Runnable() { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { - PlayerFunctions.sendMessage(plr, "&6ID: " + plot.id); + MainUtil.sendMessage(plr, "&6ID: " + plot.id); final boolean result = SchematicHandler.save(sch, Settings.SCHEMATIC_SAVE_PATH + "/" + plot.id.x + ";" + plot.id.y + "," + world + "," + owner.trim() + ".schematic"); if (!result) { - PlayerFunctions.sendMessage(plr, "&7 - Failed to save &c" + plot.id); + MainUtil.sendMessage(plr, "&7 - Failed to save &c" + plot.id); } else { - PlayerFunctions.sendMessage(plr, "&7 - &aExport success: " + plot.id); + MainUtil.sendMessage(plr, "&7 - &aExport success: " + plot.id); } } }); } Schematic.this.counter++; } - }, 20, 60); + }, 60); break; - default: + } + default: { sendMessage(plr, C.SCHEMATIC_MISSING_ARG); break; + } } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java index 1278c8347..46136d4a4 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Set.java @@ -18,72 +18,62 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.entity.Player; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Configuration; -import com.intellectualcrafters.plot.config.Configuration.SettingValue; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.AbstractFlag; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; -import com.intellectualcrafters.plot.flag.FlagValue; import com.intellectualcrafters.plot.listeners.PlotListener; import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; 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.StringComparison; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class Set extends SubCommand { - - 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[] 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 Set() { super(Command.SET, "Set a plot value", "set {arg} {value...}", CommandCategory.ACTIONS, true); } - + @SuppressWarnings("deprecation") @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return false; + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if (!plot.hasOwner()) { sendMessage(plr, C.PLOT_NOT_CLAIMED); return false; } - if (!plot.hasRights(plr) && !PlotMain.hasPermission(plr, "plots.admin.command.set")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + if (!plot.isAdded(plr.getUUID()) && !Permissions.hasPermission(plr, "plots.admin.command.set")) { + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return false; } if (args.length < 1) { - PlayerFunctions.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + getArgumentList(values)); + MainUtil.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + getArgumentList(values)); return false; } for (int i = 0; i < aliases.length; i++) { @@ -94,146 +84,118 @@ public class Set extends SubCommand { } /* TODO: Implement option */ // final boolean advanced_permissions = true; - if (!PlotMain.hasPermission(plr, "plots.set." + args[0].toLowerCase())) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.set." + args[0].toLowerCase()); + if (!Permissions.hasPermission(plr, "plots.set." + args[0].toLowerCase())) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.set." + args[0].toLowerCase()); return false; } - if (args[0].equalsIgnoreCase("flag")) { if (args.length < 2) { String message = StringUtils.join(FlagManager.getFlags(plr), "&c, &6"); - if (PlotMain.worldGuardListener != null) { - if (message.equals("")) { - message = StringUtils.join(PlotMain.worldGuardListener.str_flags, "&c, &6"); - } else { - message += "," + StringUtils.join(PlotMain.worldGuardListener.str_flags, "&c, &6"); - } - } - PlayerFunctions.sendMessage(plr, C.NEED_KEY.s().replaceAll("%values%", message)); + MainUtil.sendMessage(plr, C.NEED_KEY.s().replaceAll("%values%", message)); return false; } - AbstractFlag af; - try { af = FlagManager.getFlag(args[1].toLowerCase()); } catch (final Exception e) { af = new AbstractFlag(args[1].toLowerCase()); } - - if (!FlagManager.getFlags().contains(af) && ((PlotMain.worldGuardListener == null) || !PlotMain.worldGuardListener.str_flags.contains(args[1].toLowerCase()))) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_FLAG); + if (!FlagManager.getFlags().contains(af)) { + MainUtil.sendMessage(plr, C.NOT_VALID_FLAG); return false; } - if (!PlotMain.hasPermission(plr, "plots.set.flag." + args[1].toLowerCase())) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION); + if (!Permissions.hasPermission(plr, "plots.set.flag." + args[1].toLowerCase())) { + MainUtil.sendMessage(plr, C.NO_PERMISSION); return false; } if (args.length == 2) { if (FlagManager.getPlotFlagAbs(plot, args[1].toLowerCase()) == null) { - if (PlotMain.worldGuardListener != null) { - if (PlotMain.worldGuardListener.str_flags.contains(args[1].toLowerCase())) { - PlotMain.worldGuardListener.removeFlag(plr, plr.getWorld(), plot, args[1]); - return false; - } - } - PlayerFunctions.sendMessage(plr, C.FLAG_NOT_IN_PLOT); + MainUtil.sendMessage(plr, C.FLAG_NOT_IN_PLOT); return false; } - - boolean result = FlagManager.removePlotFlag(plot, args[1].toLowerCase()); - + final boolean result = FlagManager.removePlotFlag(plot, args[1].toLowerCase()); if (!result) { - PlayerFunctions.sendMessage(plr, C.FLAG_NOT_REMOVED); + MainUtil.sendMessage(plr, C.FLAG_NOT_REMOVED); return false; } - PlayerFunctions.sendMessage(plr, C.FLAG_REMOVED); + MainUtil.sendMessage(plr, C.FLAG_REMOVED); PlotListener.plotEntry(plr, plot); return true; } try { - String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); - Object parsed_value = af.parseValueRaw(value); + final String value = StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "); + final Object parsed_value = af.parseValueRaw(value); if (parsed_value == null) { - PlayerFunctions.sendMessage(plr, af.getValueDesc()); + MainUtil.sendMessage(plr, af.getValueDesc()); return false; } - - if ((FlagManager.getFlag(args[1].toLowerCase()) == null) && (PlotMain.worldGuardListener != null)) { - PlotMain.worldGuardListener.addFlag(plr, plr.getWorld(), plot, args[1], af.toString(parsed_value)); - return false; - } - final Flag flag = new Flag(FlagManager.getFlag(args[1].toLowerCase(), true), parsed_value); - boolean result = FlagManager.addPlotFlag(plot, flag); + final boolean result = FlagManager.addPlotFlag(plot, flag); if (!result) { - PlayerFunctions.sendMessage(plr, C.FLAG_NOT_ADDED); + MainUtil.sendMessage(plr, C.FLAG_NOT_ADDED); return false; } - PlayerFunctions.sendMessage(plr, C.FLAG_ADDED); + MainUtil.sendMessage(plr, C.FLAG_ADDED); PlotListener.plotEntry(plr, plot); return true; } catch (final Exception e) { - PlayerFunctions.sendMessage(plr, "&c" + e.getMessage()); + MainUtil.sendMessage(plr, "&c" + e.getMessage()); return false; } } - if (args[0].equalsIgnoreCase("home")) { if (args.length > 1) { if (args[1].equalsIgnoreCase("none")) { plot.settings.setPosition(null); - DBFunc.setPosition(plr.getWorld().getName(), plot, ""); + DBFunc.setPosition(loc.getWorld(), plot, ""); return true; } - return PlayerFunctions.sendMessage(plr, C.HOME_ARGUMENT); + return MainUtil.sendMessage(plr, C.HOME_ARGUMENT); } //set to current location - World world = plr.getWorld(); - Location base = PlotHelper.getPlotBottomLoc(world, plot.id); + final String world = plr.getLocation().getWorld(); + final Location base = MainUtil.getPlotBottomLoc(world, plot.id); base.setY(0); - Location relative = plr.getLocation().subtract(base); - BlockLoc blockloc = new BlockLoc(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()); + final Location relative = plr.getLocation().subtract(base.getX(), base.getZ(), base.getY()); + final BlockLoc blockloc = new BlockLoc(relative.getX(), relative.getY(), relative.getZ()); plot.settings.setPosition(blockloc); - DBFunc.setPosition(plr.getWorld().getName(), plot, relative.getBlockX() + "," + relative.getBlockY() + "," + relative.getBlockZ()); - return PlayerFunctions.sendMessage(plr, C.POSITION_SET); + DBFunc.setPosition(loc.getWorld(), plot, relative.getX() + "," + relative.getY() + "," + relative.getZ()); + return MainUtil.sendMessage(plr, C.POSITION_SET); } - if (args[0].equalsIgnoreCase("alias")) { if (args.length < 2) { - PlayerFunctions.sendMessage(plr, C.MISSING_ALIAS); + MainUtil.sendMessage(plr, C.MISSING_ALIAS); return false; } final String alias = args[1]; if (alias.length() >= 50) { - PlayerFunctions.sendMessage(plr, C.ALIAS_TOO_LONG); + MainUtil.sendMessage(plr, C.ALIAS_TOO_LONG); return false; } - for (final Plot p : PlotMain.getPlots(plr.getWorld()).values()) { + for (final Plot p : PlotSquared.getPlots(plr.getLocation().getWorld()).values()) { if (p.settings.getAlias().equalsIgnoreCase(alias)) { - PlayerFunctions.sendMessage(plr, C.ALIAS_IS_TAKEN); + MainUtil.sendMessage(plr, C.ALIAS_IS_TAKEN); return false; } if (UUIDHandler.nameExists(new StringWrapper(alias))) { - PlayerFunctions.sendMessage(plr, C.ALIAS_IS_TAKEN); + MainUtil.sendMessage(plr, C.ALIAS_IS_TAKEN); return false; } } - DBFunc.setAlias(plr.getWorld().getName(), plot, alias); - PlayerFunctions.sendMessage(plr, C.ALIAS_SET_TO.s().replaceAll("%alias%", alias)); + DBFunc.setAlias(loc.getWorld(), plot, alias); + MainUtil.sendMessage(plr, C.ALIAS_SET_TO.s().replaceAll("%alias%", alias)); return true; } if (args[0].equalsIgnoreCase("biome")) { if (args.length < 2) { - PlayerFunctions.sendMessage(plr, C.NEED_BIOME); + MainUtil.sendMessage(plr, C.NEED_BIOME); return true; } if (args[1].length() < 2) { sendMessage(plr, C.NAME_LITTLE, "Biome", args[1].length() + "", "2"); return true; } - - final Biome biome = Biome.valueOf(new StringComparison(args[1], Biome.values()).getBestMatch()); + final int biome = BlockManager.manager.getBiomeFromString(args[1]); /* * for (Biome b : Biome.values()) { * if (b.toString().equalsIgnoreCase(args[1])) { @@ -242,41 +204,38 @@ public class Set extends SubCommand { * } * } */ - - if (biome == null) { - PlayerFunctions.sendMessage(plr, getBiomeList(Arrays.asList(Biome.values()))); + if (biome == -1) { + MainUtil.sendMessage(plr, getBiomeList(BlockManager.manager.getBiomeList())); return true; } - PlotHelper.setBiome(plr.getWorld(), plot, biome); - PlayerFunctions.sendMessage(plr, C.BIOME_SET_TO.s() + biome.toString().toLowerCase()); + MainUtil.setBiome(plr.getLocation().getWorld(), plot, args[1].toUpperCase()); + MainUtil.sendMessage(plr, C.BIOME_SET_TO.s() + args[1].toLowerCase()); return true; } - // Get components - World world = plr.getWorld(); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - PlotManager manager = PlotMain.getPlotManager(world); - String[] components = manager.getPlotComponents(world, plotworld, plot.id); - for (String component : components) { + final String world = plr.getLocation().getWorld(); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + final String[] components = manager.getPlotComponents(plotworld, plot.id); + for (final String component : components) { if (component.equalsIgnoreCase(args[0])) { if (args.length < 2) { - PlayerFunctions.sendMessage(plr, C.NEED_BLOCK); + MainUtil.sendMessage(plr, C.NEED_BLOCK); return true; } PlotBlock[] blocks; try { blocks = (PlotBlock[]) Configuration.BLOCKLIST.parseObject(args[2]); - } - catch (Exception e) { + } catch (final Exception e) { try { - blocks = new PlotBlock[] {new PlotBlock((short) getMaterial(args[1], PlotWorld.BLOCKS).getId(), (byte) 0)}; - } catch (Exception e2) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_BLOCK); - return false; - } + blocks = new PlotBlock[] { new PlotBlock((short) BlockManager.manager.getBlockIdFromString(args[2]), (byte) 0) }; + } catch (final Exception e2) { + MainUtil.sendMessage(plr, C.NOT_VALID_BLOCK); + return false; + } } - manager.setComponent(world, plotworld, plot.id, component, blocks); - PlayerFunctions.sendMessage(plr, C.GENERATING_COMPONENT); + manager.setComponent(plotworld, plot.id, component, blocks); + MainUtil.sendMessage(plr, C.GENERATING_COMPONENT); return true; } } @@ -294,26 +253,18 @@ public class Set extends SubCommand { a.append(" ").append(args[x]); } } - plr.performCommand("plot set flag " + args[0] + a.toString()); + MainCommand.onCommand(plr, world, ("plot set flag " + args[0] + a.toString()).split(" ")); return true; } } - PlayerFunctions.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + getArgumentList(values)); + MainUtil.sendMessage(plr, C.SUBCOMMAND_SET_OPTIONS_HEADER.s() + getArgumentList(values)); return false; } - - private String getMaterial(final Material m) { - return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", m.toString().toLowerCase())); - } - - private String getBiome(final Biome b) { - return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", b.toString().toLowerCase())); - } - + private String getString(final String s) { - return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", s)); + return MainUtil.colorise('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", s)); } - + private String getArgumentList(final String[] strings) { final StringBuilder builder = new StringBuilder(); for (final String s : strings) { @@ -321,27 +272,13 @@ public class Set extends SubCommand { } return builder.toString().substring(1, builder.toString().length() - 1); } - - private String getBiomeList(final List biomes) { + + private String getBiomeList(final String[] biomes) { final StringBuilder builder = new StringBuilder(); - builder.append(ChatColor.translateAlternateColorCodes('&', C.NOT_VALID_BLOCK_LIST_HEADER.s())); - for (final Biome b : biomes) { - builder.append(getBiome(b)); + builder.append(MainUtil.colorise('&', C.NOT_VALID_BLOCK_LIST_HEADER.s())); + for (final String b : biomes) { + builder.append(getString(b)); } return builder.toString().substring(1, builder.toString().length() - 1); } - - private Material getMaterial(final String input, final List blocks) { - return Material.valueOf(new StringComparison(input, blocks.toArray()).getBestMatch()); - } - - private String getBlockList(final List blocks) { - final StringBuilder builder = new StringBuilder(); - builder.append(ChatColor.translateAlternateColorCodes('&', C.NOT_VALID_BLOCK_LIST_HEADER.s())); - for (final Material b : blocks) { - builder.append(getMaterial(b)); - } - return builder.toString().substring(1, builder.toString().length() - 1); - } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java index e1ded1f0c..41d048662 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java @@ -18,80 +18,69 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class SetOwner extends SubCommand { - public SetOwner() { super("setowner", "plots.set.owner", "Set the plot owner", "setowner {player}", "so", CommandCategory.ACTIONS, true); } - + /* * private UUID getUUID(String string) { OfflinePlayer player = * Bukkit.getOfflinePlayer(string); return ((player != null) && * player.hasPlayedBefore()) ? UUIDHandler.getUUID(player) : null; } */ - private UUID getUUID(final String string) { return UUIDHandler.getUUID(string); } - + @Override - public boolean execute(final Player plr, final String... args) { - Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (plot == null || plot.owner == null) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if ((plot == null) || (plot.owner == null)) { + MainUtil.sendMessage(plr, C.NOT_IN_PLOT); return false; } if (args.length < 1) { - PlayerFunctions.sendMessage(plr, C.NEED_USER); + MainUtil.sendMessage(plr, C.NEED_USER); return false; } - - if (!plot.owner.equals(UUIDHandler.getUUID(plr)) && !PlotMain.hasPermission(plr, "plots.admin.command.setowner")) { - PlayerFunctions.sendMessage(plr, C.NO_PERMISSION, "plots.admin.command.setowner"); + if (!plot.owner.equals(UUIDHandler.getUUID(plr)) && !Permissions.hasPermission(plr, "plots.admin.command.setowner")) { + MainUtil.sendMessage(plr, C.NO_PERMISSION, "plots.admin.command.setowner"); return false; } - final World world = plr.getWorld(); - final PlotId bot = PlayerFunctions.getBottomPlot(world, plot).id; - final PlotId top = PlayerFunctions.getTopPlot(world, plot).id; - final ArrayList plots = PlayerFunctions.getPlotSelectionIds(bot, top); + final String world = loc.getWorld(); + final PlotId bot = MainUtil.getBottomPlot(plot).id; + final PlotId top = MainUtil.getTopPlot( plot).id; + final ArrayList plots = MainUtil.getPlotSelectionIds(bot, top); for (final PlotId id : plots) { - final Plot current = PlotMain.getPlots(world).get(id); - - UUID uuid = getUUID(args[0]); - + final Plot current = PlotSquared.getPlots(world).get(id); + final UUID uuid = getUUID(args[0]); if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[0]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[0]); return false; } - current.owner = uuid; - PlotMain.updatePlot(current); + PlotSquared.updatePlot(current); DBFunc.setOwner(current, current.owner); - - if (PlotMain.worldGuardListener != null) { - PlotMain.worldGuardListener.changeOwner(plr, current.owner, plr.getWorld(), current); - } } - PlotHelper.setSign(world, args[0], plot); - PlayerFunctions.sendMessage(plr, C.SET_OWNER); + MainUtil.setSign(args[0], plot); + MainUtil.sendMessage(plr, C.SET_OWNER); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java index 71dfc9dcb..b0e9649a6 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Setup.java @@ -18,180 +18,116 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import java.io.IOException; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; - import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.World.Environment; -import org.bukkit.WorldCreator; -import org.bukkit.entity.Player; -import org.bukkit.generator.ChunkGenerator; -import org.bukkit.plugin.Plugin; -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.config.Settings; -import com.intellectualcrafters.plot.generator.SquarePlotManager; -import com.intellectualcrafters.plot.object.PlotGenerator; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.object.SetupObject; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.SetupUtils; public class Setup extends SubCommand { - - public final static Map setupMap = new HashMap<>(); - public HashMap generators = new HashMap<>(); - public Setup() { super("setup", "plots.admin.command.setup", "Plotworld setup command", "setup", "create", CommandCategory.ACTIONS, true); } - private class SetupObject { - int current = 0; - int setup_index = 0; - String world = null; - String generator = null; - int type = 0; - int terrain = 0; - ConfigurationNode[] step = null; - } - - public void updateGenerators() { - if (generators.size() > 0) { - return; - } - String testWorld = "CheckingPlotSquaredGenerator"; - for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) { - if (plugin.isEnabled()) { - ChunkGenerator generator = plugin.getDefaultWorldGenerator(testWorld, ""); - if (generator != null) { - PlotMain.removePlotWorld(testWorld); - final String name = plugin.getDescription().getName(); - if (generator instanceof PlotGenerator) { - PlotGenerator pgen = (PlotGenerator) generator; - if (pgen.getPlotManager() instanceof SquarePlotManager) { - generators.put(name, pgen); - } - } - } - } - } - } - @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { // going through setup - - String name = plr.getName(); - if (!setupMap.containsKey(name)) { - SetupObject object = new SetupObject(); - setupMap.put(name, object); - updateGenerators(); - String prefix = "\n&8 - &7"; + final String name = plr.getName(); + if (!SetupUtils.setupMap.containsKey(name)) { + final SetupObject object = new SetupObject(); + SetupUtils.setupMap.put(name, object); + SetupUtils.manager.updateGenerators(); + final String prefix = "\n&8 - &7"; sendMessage(plr, C.SETUP_INIT); - PlayerFunctions.sendMessage(plr, "&6What generator do you want?" + prefix + StringUtils.join(generators.keySet(), prefix).replaceAll("PlotSquared", "&2PlotSquared")); + MainUtil.sendMessage(plr, "&6What generator do you want?" + prefix + StringUtils.join(SetupUtils.generators.keySet(), prefix).replaceAll("PlotSquared", "&2PlotSquared")); return false; } if (args.length == 1) { if (args[0].equalsIgnoreCase("cancel")) { - setupMap.remove(plr.getName()); - PlayerFunctions.sendMessage(plr, "&aCancelled setup"); + SetupUtils.setupMap.remove(plr.getName()); + MainUtil.sendMessage(plr, "&aCancelled setup"); return false; } if (args[0].equalsIgnoreCase("back")) { - SetupObject object = setupMap.get(plr.getName()); + final SetupObject object = SetupUtils.setupMap.get(plr.getName()); if (object.setup_index > 0) { object.setup_index--; - ConfigurationNode node = object.step[object.current]; + final ConfigurationNode node = object.step[object.current]; sendMessage(plr, C.SETUP_STEP, object.current + 1 + "", node.getDescription(), node.getType().getType(), node.getDefaultValue() + ""); return false; - } - else if (object.current > 0 ){ + } else if (object.current > 0) { object.current--; } } } - SetupObject object = setupMap.get(name); - int index = object.current; - switch(index) { + final SetupObject object = SetupUtils.setupMap.get(name); + final int index = object.current; + switch (index) { case 0: { // choose generator - if (args.length != 1 || !generators.containsKey(args[0])) { - String prefix = "\n&8 - &7"; - PlayerFunctions.sendMessage(plr, "&cYou must choose a generator!" + prefix + StringUtils.join(generators.keySet(), prefix).replaceAll("PlotSquared", "&2PlotSquared")); + if ((args.length != 1) || !SetupUtils.generators.containsKey(args[0])) { + final String prefix = "\n&8 - &7"; + MainUtil.sendMessage(plr, "&cYou must choose a generator!" + prefix + StringUtils.join(SetupUtils.generators.keySet(), prefix).replaceAll("PlotSquared", "&2PlotSquared")); sendMessage(plr, C.SETUP_INIT); return false; } object.generator = args[0]; object.current++; - - String partial = Settings.ENABLE_CLUSTERS ? "\n&8 - &7PARTIAL&8 - &7Vanilla with clusters of plots" : ""; - PlayerFunctions.sendMessage(plr, "&6What world type do you want?" - + "\n&8 - &2DEFAULT&8 - &7Standard plot generation" - + "\n&8 - &7AUGMENTED&8 - &7Plot generation with terrain" - + partial); + final String partial = Settings.ENABLE_CLUSTERS ? "\n&8 - &7PARTIAL&8 - &7Vanilla with clusters of plots" : ""; + MainUtil.sendMessage(plr, "&6What world type do you want?" + "\n&8 - &2DEFAULT&8 - &7Standard plot generation" + "\n&8 - &7AUGMENTED&8 - &7Plot generation with terrain" + partial); break; } case 1: { // choose world type List types; if (Settings.ENABLE_CLUSTERS) { - types = Arrays.asList(new String[] {"default", "augmented", "partial"}); + types = Arrays.asList(new String[] { "default", "augmented", "partial" }); + } else { + types = Arrays.asList(new String[] { "default", "augmented" }); } - else { - types = Arrays.asList(new String[] {"default", "augmented"}); - } - if (args.length != 1 || !types.contains(args[0].toLowerCase())) { - PlayerFunctions.sendMessage(plr, "&cYou must choose a world type!" - + "\n&8 - &2DEFAULT&8 - &7Standard plot generation" - + "\n&8 - &7AUGMENTED&8 - &7Plot generation with terrain" - + "\n&8 - &7PARTIAL&8 - &7Vanilla with clusters of plots"); + if ((args.length != 1) || !types.contains(args[0].toLowerCase())) { + MainUtil.sendMessage(plr, "&cYou must choose a world type!" + "\n&8 - &2DEFAULT&8 - &7Standard plot generation" + "\n&8 - &7AUGMENTED&8 - &7Plot generation with terrain" + "\n&8 - &7PARTIAL&8 - &7Vanilla with clusters of plots"); return false; } object.type = types.indexOf(args[0].toLowerCase()); if (object.type == 0) { object.current++; if (object.step == null) { - object.step = generators.get(object.generator).getNewPlotWorld(null).getSettingNodes(); + object.step = SetupUtils.generators.get(object.generator).getNewPlotWorld(null).getSettingNodes(); } - ConfigurationNode step = object.step[object.setup_index]; + final ConfigurationNode step = object.step[object.setup_index]; sendMessage(plr, C.SETUP_STEP, object.setup_index + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); - } - else { - PlayerFunctions.sendMessage(plr, "&6What terrain would you like in plots?" - + "\n&8 - &2NONE&8 - &7No terrain at all" - + "\n&8 - &7ORE&8 - &7Just some ore veins and trees" - + "\n&8 - &7ALL&8 - &7Entirely vanilla generation"); + } else { + MainUtil.sendMessage(plr, "&6What terrain would you like in plots?" + "\n&8 - &2NONE&8 - &7No terrain at all" + "\n&8 - &7ORE&8 - &7Just some ore veins and trees" + "\n&8 - &7ALL&8 - &7Entirely vanilla generation"); } object.current++; break; } case 2: { // Choose terrain - List terrain = Arrays.asList(new String[] {"none", "ore", "all"}); - if (args.length != 1 || !terrain.contains(args[0].toLowerCase())) { - PlayerFunctions.sendMessage(plr, "&cYou must choose the terrain!" - + "\n&8 - &2NONE&8 - &7No terrain at all" - + "\n&8 - &7ORE&8 - &7Just some ore veins and trees" - + "\n&8 - &7ALL&8 - &7Entirely vanilla generation"); + final List terrain = Arrays.asList(new String[] { "none", "ore", "all" }); + if ((args.length != 1) || !terrain.contains(args[0].toLowerCase())) { + MainUtil.sendMessage(plr, "&cYou must choose the terrain!" + "\n&8 - &2NONE&8 - &7No terrain at all" + "\n&8 - &7ORE&8 - &7Just some ore veins and trees" + "\n&8 - &7ALL&8 - &7Entirely vanilla generation"); return false; } object.terrain = terrain.indexOf(args[0].toLowerCase()); object.current++; if (object.step == null) { - object.step = generators.get(object.generator).getNewPlotWorld(null).getSettingNodes(); + object.step = SetupUtils.generators.get(object.generator).getNewPlotWorld(null).getSettingNodes(); } - ConfigurationNode step = object.step[object.setup_index]; + final ConfigurationNode step = object.step[object.setup_index]; sendMessage(plr, C.SETUP_STEP, object.setup_index + 1 + "", step.getDescription(), step.getType().getType(), step.getDefaultValue() + ""); break; } case 3: { // world setup if (object.setup_index == object.step.length) { - PlayerFunctions.sendMessage(plr, "&6What do you want your world to be called?"); + MainUtil.sendMessage(plr, "&6What do you want your world to be called?"); object.setup_index = 0; object.current++; return true; @@ -221,121 +157,27 @@ public class Setup extends SubCommand { } case 4: { if (args.length != 1) { - PlayerFunctions.sendMessage(plr, "&cYou need to choose a world name!"); + MainUtil.sendMessage(plr, "&cYou need to choose a world name!"); return false; } - if (Bukkit.getWorld(args[0]) != null) { - PlayerFunctions.sendMessage(plr, "&cThat world name is already taken!"); + if (BlockManager.manager.isWorld(args[0])) { + MainUtil.sendMessage(plr, "&cThat world name is already taken!"); } object.world = args[0]; - setupMap.remove(plr.getName()); - World world = setupWorld(object); + SetupUtils.setupMap.remove(plr.getName()); + final String world = SetupUtils.manager.setupWorld(object); try { - plr.teleport(world.getSpawnLocation()); - } - catch (Exception e) { + plr.teleport(BlockManager.manager.getSpawn(world)); + } catch (final Exception e) { plr.sendMessage("&cAn error occured. See console for more information"); e.printStackTrace(); } sendMessage(plr, C.SETUP_FINISHED, object.world); - setupMap.remove(plr.getName()); + SetupUtils.setupMap.remove(plr.getName()); } } - /* - * 0.0 normal hybrid no clusters - * 0.1 normal hybrid with clusters - * 0.2 normal hybrid require clusters - * 1.0 augmented whole world - * 1.1 augmented whole world with ore - * 1.2 augmented whole world with terrain - * 2.1 augmented partial world - * 2.2 augmented partial world with ore - * 2.3 augmented partial world with terrain - * 3.0 no generation + normal manager - * - * generator.TYPE: PlotSquared, augmented, partial - * generator.TERRAIN - * - * WORLD.TYPE: hybrid, augmented, partial - * if (augmented/partial) - * WORLD.TERRAIN: - * - * - * types (0, 1, 2, 3) - * 0: no options - * 1: - * - * - * - return null - * - schedule task to create world later - * - externalize multiverse/world hooks to separate class - * - create vanilla world - * - add augmented populator - * - add config option type - * - Work on heirarchy for setting nodes so you don't need to provide irrelevent info (world setup) - * - use code from setup command for world arguments (above) so that it persists - * - work on plot clearing for augmented plot worlds (terrain) (heads, banners, paintings, animals, inventoryhandler) - * - make a generic clear function for any generator - * - clean up plotmanager class (remove unnecessary methods) - * - make simple plot manager which can be used by external generators (don't make abstract) - * - plugins will override any of it's methods - * - make heirarchy of generators of increasing abstraction: - * = totally abstract (circle plots, moving plots, no tesselation) - * = tessellating generator - * = grid generator - * = square generator - * = square plot generator (must have plot section and road section) (plot height, road height) - * = hybrid generator - * - * - All will support whole world augmentation - * - Only grid will support partial plot worlds - * - */ return false; } - public World setupWorld(SetupObject object) { - // Configuration - final ConfigurationNode[] steps = object.step; - final String world = object.world; - for (final ConfigurationNode step : steps) { - PlotMain.config.set("worlds." + world + "." + step.getConstant(), step.getValue()); - } - if (object.type != 0) { - PlotMain.config.set("worlds." + world + "." + "generator.type", object.type); - PlotMain.config.set("worlds." + world + "." + "generator.terrain", object.terrain); - PlotMain.config.set("worlds." + world + "." + "generator.plugin", object.generator); - } - try { - PlotMain.config.save(PlotMain.configFile); - } catch (final IOException e) { - e.printStackTrace(); - } - if (object.type == 0) { - 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.generator); - } else { - if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { - Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world + " plugin:" + object.generator); - } else { - WorldCreator wc = new WorldCreator(object.world); - wc.generator(object.generator); - wc.environment(Environment.NORMAL); - World newWorld = Bukkit.createWorld(wc); - } - } - } - else { - if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { - Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv create " + world + " normal"); - } else { - if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { - Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world); - } else { - Bukkit.createWorld(new WorldCreator(object.world).environment(World.Environment.NORMAL)); - } - } - } - return Bukkit.getWorld(object.world); - } + } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SubCommand.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SubCommand.java index 027e4a78e..f5ca65fe3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SubCommand.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SubCommand.java @@ -18,24 +18,22 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; /** * SubCommand class * * @author Citymonstret */ -@SuppressWarnings({"deprecation", "unused"}) public abstract class SubCommand { - +@SuppressWarnings({ "deprecation", "unused" }) +public abstract class SubCommand { /** * Command */ @@ -64,7 +62,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; * Is this a player-online command? */ public final boolean isPlayer; - + /** * @param cmd Command /plot {cmd} <-- That! * @param permission Permission Node @@ -83,7 +81,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; this.category = category; this.isPlayer = isPlayer; } - + /** * @param cmd Command /plot {cmd} <-- That! * @param permission Permission Node @@ -102,7 +100,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; this.category = category; this.isPlayer = isPlayer; } - + /** * @param command Command /plot {cmd} <-- That! * @param description Simple description @@ -119,7 +117,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; this.category = category; this.isPlayer = isPlayer; } - + /** * Execute. * @@ -128,8 +126,8 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; * * @return true on success, false on failure */ - public abstract boolean execute(final Player plr, final String... args); - + public abstract boolean execute(final PlotPlayer plr, final String... args); + /** * Execute the command as console * @@ -138,7 +136,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; public void executeConsole(final String... args) { this.execute(null, args); } - + /** * Send a message * @@ -146,14 +144,14 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; * @param c Caption * @param args Arguments (%s's) * - * @see com.intellectualcrafters.plot.util.PlayerFunctions#sendMessage(org.bukkit.entity.Player, + * @see com.intellectualcrafters.plot.util.bukkit.BukkitPlayerFunctions#sendMessage(org.bukkit.entity.Player, * com.intellectualcrafters.plot.config.C, String...) */ - public boolean sendMessage(final Player plr, final C c, final String... args) { - PlayerFunctions.sendMessage(plr, c, args); + public boolean sendMessage(final PlotPlayer plr, final C c, final String... args) { + MainUtil.sendMessage(plr, c, args); return true; } - + /** * CommandCategory * @@ -191,12 +189,11 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; * Such as: /plot debug */ DEBUG("Debug"); - /** * The category name (Readable) */ private final String name; - + /** * Constructor * @@ -205,7 +202,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions; CommandCategory(final String name) { this.name = name; } - + @Override public String toString() { return this.name; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Swap.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Swap.java index df1a10bce..89629f7ac 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Swap.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Swap.java @@ -18,21 +18,19 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.object.PlotSelection; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Created 2014-08-01 for PlotSquared @@ -40,60 +38,56 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Empire92 */ public class Swap extends SubCommand { - public Swap() { super(Command.SWAP, "Swap two plots", "switch", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { - PlayerFunctions.sendMessage(plr, C.NEED_PLOT_ID); - PlayerFunctions.sendMessage(plr, C.SWAP_SYNTAX); + MainUtil.sendMessage(plr, C.NEED_PLOT_ID); + MainUtil.sendMessage(plr, C.SWAP_SYNTAX); return false; } - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return false; + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.swap")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !Permissions.hasPermission(plr, "plots.admin.command.swap")) { + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return false; } if ((plot != null) && plot.settings.isMerged()) { - PlayerFunctions.sendMessage(plr, C.UNLINK_REQUIRED); + MainUtil.sendMessage(plr, C.UNLINK_REQUIRED); return false; } final String id = args[0]; PlotId plotid; - final World world = plr.getWorld(); + final String world = loc.getWorld(); try { plotid = new PlotId(Integer.parseInt(id.split(";")[0]), Integer.parseInt(id.split(";")[1])); - final Plot plot2 = PlotMain.getPlots(world).get(plotid); - if (((plot2 == null) || !plot2.hasOwner() || (plot2.owner != UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.swap")) { - PlayerFunctions.sendMessage(plr, C.NO_PERM_MERGE, plotid.toString()); + final Plot plot2 = PlotSquared.getPlots(world).get(plotid); + if (((plot2 == null) || !plot2.hasOwner() || (plot2.owner != UUIDHandler.getUUID(plr))) && !Permissions.hasPermission(plr, "plots.admin.command.swap")) { + MainUtil.sendMessage(plr, C.NO_PERM_MERGE, plotid.toString()); return false; } } catch (final Exception e) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); - PlayerFunctions.sendMessage(plr, C.SWAP_SYNTAX); + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_ID); + MainUtil.sendMessage(plr, C.SWAP_SYNTAX); return false; } assert plot != null; if (plot.id.equals(plotid)) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); - PlayerFunctions.sendMessage(plr, C.SWAP_SYNTAX); + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_ID); + MainUtil.sendMessage(plr, C.SWAP_SYNTAX); return false; } - PlotSelection.swap(world, plot.id, plotid); - - // TODO Requires testing!! - DBFunc.dbManager.swapPlots(plot, PlotHelper.getPlot(world, plotid)); - // TODO Requires testing!! - - PlayerFunctions.sendMessage(plr, C.SWAP_SUCCESS); - PlotHelper.update(plr.getLocation()); + AChunkManager.manager.swap(world, plot.id, plotid); + // FIXME Requires testing!! + DBFunc.dbManager.swapPlots(plot, MainUtil.getPlot(world, plotid)); + MainUtil.sendMessage(plr, C.SWAP_SUCCESS); + MainUtil.update(plr.getLocation()); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/TP.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/TP.java index 9e491e771..4763f14d1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/TP.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/TP.java @@ -18,65 +18,64 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class TP extends SubCommand { - public TP() { super(Command.TP, "Teleport to a plot", "tp {alias|id}", CommandCategory.TELEPORT, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { - PlayerFunctions.sendMessage(plr, C.NEED_PLOT_ID); + MainUtil.sendMessage(plr, C.NEED_PLOT_ID); return false; } final String id = args[0]; PlotId plotid; - World world = plr.getWorld(); + Location loc = plr.getLocation(); + String pworld = loc.getWorld(); + String world = pworld; if (args.length == 2) { - if (Bukkit.getWorld(args[1]) != null) { - world = Bukkit.getWorld(args[1]); + if (BlockManager.manager.isWorld(args[1])) { + world = args[1]; } } - if (!PlotMain.isPlotWorld(world)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD); + if (!PlotSquared.isPlotWorld(world)) { + MainUtil.sendMessage(plr, C.NOT_IN_PLOT_WORLD); return false; } Plot temp; if ((temp = isAlias(world, id)) != null) { - PlotMain.teleportPlayer(plr, plr.getLocation(), temp); + MainUtil.teleportPlayer(plr, plr.getLocation(), temp); return true; } - try { plotid = new PlotId(Integer.parseInt(id.split(";")[0]), Integer.parseInt(id.split(";")[1])); - PlotMain.teleportPlayer(plr, plr.getLocation(), PlotHelper.getPlot(world, plotid)); + MainUtil.teleportPlayer(plr, plr.getLocation(), MainUtil.getPlot(world, plotid)); return true; } catch (final Exception e) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_ID); } return false; } - - private Plot isAlias(final World world, String a) { + + private Plot isAlias(final String world, String a) { int index = 0; if (a.contains(";")) { final String[] split = a.split(";"); @@ -85,16 +84,16 @@ public class TP extends SubCommand { } a = split[0]; } - @SuppressWarnings("deprecation") final Player player = Bukkit.getPlayer(a); + final PlotPlayer player = UUIDHandler.getPlayer(a); if (player != null) { - final java.util.Set plotMainPlots = PlotMain.getPlots(world, player); + final java.util.Set plotMainPlots = PlotSquared.getPlots(world, player); final Plot[] plots = plotMainPlots.toArray(new Plot[plotMainPlots.size()]); if (plots.length > index) { return plots[index]; } return null; } - for (final Plot p : PlotMain.getPlots(world).values()) { + for (final Plot p : PlotSquared.getPlots(world).values()) { if ((p.settings.getAlias().length() > 0) && p.settings.getAlias().equalsIgnoreCase(a)) { return p; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Target.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Target.java index a40f6ef4e..b037251b4 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Target.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Target.java @@ -18,42 +18,39 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.Location; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; public class Target extends SubCommand { - public Target() { super(Command.TARGET, "Target a plot with your compass", "target ", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlotMain.isPlotWorld(plr.getWorld())) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD); + public boolean execute(final PlotPlayer plr, final String... args) { + Location ploc = plr.getLocation(); + if (!PlotSquared.isPlotWorld(ploc.getWorld())) { + MainUtil.sendMessage(plr, C.NOT_IN_PLOT_WORLD); return false; } if (args.length == 1) { - PlotId id = PlotHelper.parseId(args[1]); + final PlotId id = MainUtil.parseId(args[1]); if (id == null) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_ID); + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_ID); return false; } - Location loc = PlotHelper.getPlotHome(plr.getWorld(), id); + final Location loc = MainUtil.getPlotHome(ploc.getWorld(), id); plr.setCompassTarget(loc); - PlayerFunctions.sendMessage(plr, C.COMPASS_TARGET); + MainUtil.sendMessage(plr, C.COMPASS_TARGET); return true; } - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot target "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot target "); return false; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Template.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Template.java index 410535b17..0f18ea275 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Template.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Template.java @@ -18,31 +18,66 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.zip.GZIPOutputStream; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; public class Template extends SubCommand { - public Template() { super("template", "plots.admin", "Create or use a world template", "template", "", CommandCategory.DEBUG, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length != 2) { - PlayerFunctions.sendMessage(plr, C.COMMAND_SYNTAX, "/plot template "); + MainUtil.sendMessage(plr, C.COMMAND_SYNTAX, "/plot template "); return false; } - + String world = args[1]; + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if (!BlockManager.manager.isWorld(world) || (plotworld == null)) { + MainUtil.sendMessage(plr, C.NOT_VALID_PLOT_WORLD); + return false; + } + switch (args[0].toLowerCase()) { + case "import": { + // TODO import template + MainUtil.sendMessage(plr, "TODO"); + return true; + } + case "export": { + MainUtil.sendMessage(plr, "TODO"); + } + } // TODO allow world settings (including schematics to be packed into a single file) - // TODO allow world created based on these packaged files - return true; } + + public void gzipIt(final String output, final String input) { + final byte[] buffer = new byte[1024]; + try { + final GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(output)); + final FileInputStream in = new FileInputStream(input); + int len; + while ((len = in.read(buffer)) > 0) { + gzos.write(buffer, 0, len); + } + in.close(); + gzos.finish(); + gzos.close(); + } catch (final IOException ex) { + ex.printStackTrace(); + } + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trim.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trim.java index b3e200b1c..bce3fa5fa 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trim.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trim.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.io.File; @@ -28,85 +27,75 @@ import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.HashSet; -import java.util.Set; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.generator.SquarePlotManager; -import com.intellectualcrafters.plot.generator.SquarePlotWorld; import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.ExpireManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.ChunkManager; public class Trim extends SubCommand { - public static boolean TASK = false; private static int TASK_ID = 0; public Trim() { super("trim", "plots.admin", "Delete unmodified portions of your plotworld", "trim", "", CommandCategory.DEBUG, false); } - - public PlotId getId(String id) { + + public PlotId getId(final String id) { try { - String[] split = id.split(";"); + final String[] split = id.split(";"); return new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); - } - catch (Exception e) { + } catch (final Exception e) { return null; } } @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (plr != null) { - PlayerFunctions.sendMessage(plr, (C.NOT_CONSOLE)); + MainUtil.sendMessage(plr, (C.NOT_CONSOLE)); return false; } if (args.length == 1) { - String arg = args[0].toLowerCase(); - PlotId id = getId(arg); + final String arg = args[0].toLowerCase(); + final PlotId id = getId(arg); if (id != null) { - PlayerFunctions.sendMessage(plr, "/plot trim x;z &l"); + MainUtil.sendMessage(plr, "/plot trim x;z &l"); return false; } if (arg.equals("all")) { - PlayerFunctions.sendMessage(plr, "/plot trim all &l"); + MainUtil.sendMessage(plr, "/plot trim all &l"); return false; } - PlayerFunctions.sendMessage(plr, C.TRIM_SYNTAX); + MainUtil.sendMessage(plr, C.TRIM_SYNTAX); return false; } if (args.length != 2) { - PlayerFunctions.sendMessage(plr, C.TRIM_SYNTAX); + MainUtil.sendMessage(plr, C.TRIM_SYNTAX); return false; } - String arg = args[0].toLowerCase(); + final String arg = args[0].toLowerCase(); if (!arg.equals("all")) { - PlayerFunctions.sendMessage(plr, C.TRIM_SYNTAX); + MainUtil.sendMessage(plr, C.TRIM_SYNTAX); return false; } - final World world = Bukkit.getWorld(args[1]); - if (world == null || PlotMain.getWorldSettings(world) == null) { - PlayerFunctions.sendMessage(plr, C.NOT_VALID_WORLD); + final String world = args[1]; + if (!BlockManager.manager.isWorld(world) || (PlotSquared.getPlotWorld(world) == null)) { + MainUtil.sendMessage(plr, C.NOT_VALID_WORLD); return false; } - if (Trim.TASK) { sendMessage(C.TRIM_IN_PROGRESS.s()); return false; } - sendMessage(C.TRIM_START.s()); final ArrayList empty = new ArrayList<>(); getTrimRegions(empty, world, new Runnable() { @@ -118,52 +107,48 @@ public class Trim extends SubCommand { return true; } - public static boolean getBulkRegions(final ArrayList empty, final World world, final Runnable whenDone) { + public static boolean getBulkRegions(final ArrayList empty, final String world, final Runnable whenDone) { if (Trim.TASK) { return false; } TaskManager.runTaskAsync(new Runnable() { @Override public void run() { - String directory = world.getName() + File.separator + "region"; - File folder = new File(directory); - File[] regionFiles = folder.listFiles(); - for (File file : regionFiles) { - String name = file.getName(); + final String directory = world + File.separator + "region"; + final File folder = new File(directory); + final File[] regionFiles = folder.listFiles(); + for (final File file : regionFiles) { + final String name = file.getName(); if (name.endsWith("mca")) { if (file.getTotalSpace() <= 8192) { try { - String[] split = name.split("\\."); - int x = Integer.parseInt(split[1]); - int z = Integer.parseInt(split[2]); - ChunkLoc loc = new ChunkLoc(x, z); + final String[] split = name.split("\\."); + final int x = Integer.parseInt(split[1]); + final int z = Integer.parseInt(split[2]); + final ChunkLoc loc = new ChunkLoc(x, z); empty.add(loc); - } - catch (Exception e) { + } catch (final Exception e) { System.out.print("INVALID MCA: " + name); } - } - else { - Path path = Paths.get(file.getPath()); + } else { + final Path path = Paths.get(file.getPath()); try { - BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class); - long creation = attr.creationTime().toMillis(); - long modification = file.lastModified(); - long diff = Math.abs(creation - modification); + final BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class); + final long creation = attr.creationTime().toMillis(); + final long modification = file.lastModified(); + final long diff = Math.abs(creation - modification); if (diff < 10000) { try { - String[] split = name.split("\\."); - int x = Integer.parseInt(split[1]); - int z = Integer.parseInt(split[2]); - ChunkLoc loc = new ChunkLoc(x, z); + final String[] split = name.split("\\."); + final int x = Integer.parseInt(split[1]); + final int z = Integer.parseInt(split[2]); + final ChunkLoc loc = new ChunkLoc(x, z); empty.add(loc); - } - catch (Exception e) { + } catch (final Exception e) { System.out.print("INVALID MCA: " + name); } } - } catch (Exception e) { - + } catch (final Exception e) { } } } @@ -176,91 +161,57 @@ public class Trim extends SubCommand { return true; } - public static boolean getTrimRegions(final ArrayList empty, final World world, final Runnable whenDone) { + public static boolean getTrimRegions(final ArrayList empty, final String world, final Runnable whenDone) { if (Trim.TASK) { return false; } final long startOld = System.currentTimeMillis(); sendMessage("Collecting region data..."); final ArrayList plots = new ArrayList<>(); - plots.addAll(PlotMain.getPlots(world).values()); - final HashSet chunks = new HashSet<>(ChunkManager.getChunkChunks(world)); + plots.addAll(PlotSquared.getPlots(world).values()); + final HashSet chunks = new HashSet<>(AChunkManager.manager.getChunkChunks(world)); sendMessage(" - MCA #: " + chunks.size()); - sendMessage(" - CHUNKS: " + (chunks.size() * 1024) +" (max)"); - sendMessage(" - TIME ESTIMATE: " + (chunks.size()/1200) +" minutes"); - Trim.TASK_ID = Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(), new Runnable() { + sendMessage(" - CHUNKS: " + (chunks.size() * 1024) + " (max)"); + sendMessage(" - TIME ESTIMATE: " + (chunks.size() / 1200) + " minutes"); + Trim.TASK_ID = TaskManager.runTaskRepeat(new Runnable() { @Override public void run() { - long start = System.currentTimeMillis(); - while (System.currentTimeMillis() - start < 50) { + final long start = System.currentTimeMillis(); + while ((System.currentTimeMillis() - start) < 50) { if (plots.size() == 0) { empty.addAll(chunks); System.out.print("DONE!"); Trim.TASK = false; TaskManager.runTaskAsync(whenDone); - Bukkit.getScheduler().cancelTask(Trim.TASK_ID); + PlotSquared.TASK.cancelTask(Trim.TASK_ID); return; } - Plot plot = plots.get(0); + final Plot plot = plots.get(0); plots.remove(0); - Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id); - Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id); - - Location pos3 = new Location(world, pos1.getBlockX(), 64, pos2.getBlockZ()); - Location pos4 = new Location(world, pos2.getBlockX(), 64, pos1.getBlockZ()); - + final Location pos1 = MainUtil.getPlotBottomLoc(world, plot.id); + final Location pos2 = MainUtil.getPlotTopLoc(world, plot.id); + final Location pos3 = new Location(world, pos1.getX(), 64, pos2.getZ()); + final Location pos4 = new Location(world, pos2.getX(), 64, pos1.getZ()); chunks.remove(ChunkManager.getChunkChunk(pos1)); chunks.remove(ChunkManager.getChunkChunk(pos2)); chunks.remove(ChunkManager.getChunkChunk(pos3)); chunks.remove(ChunkManager.getChunkChunk(pos4)); } } - }, 20L, 20L); + }, 20); Trim.TASK = true; return true; } public static ArrayList expired = null; -// public static void updateUnmodifiedPlots(final World world) { -// final SquarePlotManager manager = (SquarePlotManager) PlotMain.getPlotManager(world); -// final SquarePlotWorld plotworld = (SquarePlotWorld) PlotMain.getWorldSettings(world); -// final ArrayList expired = new ArrayList<>(); -// final Set plots = ExpireManager.getOldPlots(world.getName()).keySet(); -// sendMessage("Checking " + plots.size() +" plots! This may take a long time..."); -// Trim.TASK_ID = Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(), new Runnable() { -// @Override -// public void run() { -// if (manager != null && plots.size() > 0) { -// Plot plot = plots.iterator().next(); -// if (plot.hasOwner()) { -// SquarePlotManager.checkModified(plot, 0); -// } -// if (plot.owner == null || !SquarePlotManager.checkModified(plot, plotworld.REQUIRED_CHANGES)) { -// expired.add(plot); -// sendMessage("found expired: " + plot); -// } -// } -// else { -// Trim.expired = expired; -// Trim.TASK = false; -// sendMessage("Done!"); -// Bukkit.getScheduler().cancelTask(Trim.TASK_ID); -// return; -// } -// } -// }, 1, 1); -// } -// - public static void deleteChunks(World world, ArrayList chunks) { - String worldname = world.getName(); - for (ChunkLoc loc : chunks) { - ChunkManager.deleteRegionFile(worldname, loc); + public static void deleteChunks(final String world, final ArrayList chunks) { + for (final ChunkLoc loc : chunks) { + AChunkManager.manager.deleteRegionFile(world, loc); } } public static void sendMessage(final String message) { - PlotMain.sendConsoleSenderMessage("&3PlotSquared -> World trim&8: &7" + message); + PlotSquared.log("&3PlotSquared -> World trim&8: &7" + message); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java index 75e44bf8b..ae707efdc 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java @@ -18,102 +18,96 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.events.PlayerPlotTrustedEvent; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; - -@SuppressWarnings("deprecation") public class Trusted extends SubCommand { +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; +@SuppressWarnings("deprecation") +public class Trusted extends SubCommand { public Trusted() { super(Command.TRUSTED, "Manage trusted users for a plot", "trusted {add|remove} {player}", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 2) { - PlayerFunctions.sendMessage(plr, C.TRUSTED_NEED_ARGUMENT); + MainUtil.sendMessage(plr, C.TRUSTED_NEED_ARGUMENT); return true; } - if (!PlayerFunctions.isInPlot(plr)) { - PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT); - return true; + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); if ((plot == null) || !plot.hasOwner()) { - PlayerFunctions.sendMessage(plr, C.PLOT_UNOWNED); + MainUtil.sendMessage(plr, C.PLOT_UNOWNED); return false; } - if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !PlotMain.hasPermission(plr, "plots.admin.command.trusted")) { - PlayerFunctions.sendMessage(plr, C.NO_PLOT_PERMS); + if (!plot.getOwner().equals(UUIDHandler.getUUID(plr)) && !Permissions.hasPermission(plr, "plots.admin.command.trusted")) { + MainUtil.sendMessage(plr, C.NO_PLOT_PERMS); return true; } if (args[0].equalsIgnoreCase("add")) { UUID uuid; if (args[1].equalsIgnoreCase("*")) { uuid = DBFunc.everyone; - } else { uuid = UUIDHandler.getUUID(args[1]); } if (uuid == null) { - PlayerFunctions.sendMessage(plr, C.INVALID_PLAYER, args[1]); + MainUtil.sendMessage(plr, C.INVALID_PLAYER, args[1]); return false; } if (!plot.trusted.contains(uuid)) { if (plot.owner.equals(uuid)) { - PlayerFunctions.sendMessage(plr, C.ALREADY_OWNER); + MainUtil.sendMessage(plr, C.ALREADY_OWNER); return false; } if (plot.helpers.contains(uuid)) { plot.helpers.remove(uuid); - DBFunc.removeHelper(plr.getWorld().getName(), plot, uuid); + DBFunc.removeHelper(loc.getWorld(), plot, uuid); } if (plot.denied.contains(uuid)) { plot.denied.remove(uuid); - DBFunc.removeDenied(plr.getWorld().getName(), plot, uuid); + DBFunc.removeDenied(loc.getWorld(), plot, uuid); } plot.addTrusted(uuid); - DBFunc.setTrusted(plr.getWorld().getName(), plot, uuid); - final PlayerPlotTrustedEvent event = new PlayerPlotTrustedEvent(plr, plot, uuid, true); - Bukkit.getPluginManager().callEvent(event); + DBFunc.setTrusted(loc.getWorld(), plot, uuid); + // FIXME PlayerPlotTrustedEvent } else { - PlayerFunctions.sendMessage(plr, C.ALREADY_ADDED); + MainUtil.sendMessage(plr, C.ALREADY_ADDED); return false; } - PlayerFunctions.sendMessage(plr, C.TRUSTED_ADDED); + MainUtil.sendMessage(plr, C.TRUSTED_ADDED); return true; } else if (args[0].equalsIgnoreCase("remove")) { if (args[1].equalsIgnoreCase("*")) { final UUID uuid = DBFunc.everyone; if (!plot.trusted.contains(uuid)) { - PlayerFunctions.sendMessage(plr, C.T_WAS_NOT_ADDED); + MainUtil.sendMessage(plr, C.T_WAS_NOT_ADDED); return true; } plot.removeTrusted(uuid); - DBFunc.removeTrusted(plr.getWorld().getName(), plot, uuid); - PlayerFunctions.sendMessage(plr, C.TRUSTED_REMOVED); + DBFunc.removeTrusted(loc.getWorld(), plot, uuid); + MainUtil.sendMessage(plr, C.TRUSTED_REMOVED); return true; } final UUID uuid = UUIDHandler.getUUID(args[1]); plot.removeTrusted(uuid); - DBFunc.removeTrusted(plr.getWorld().getName(), plot, uuid); - final PlayerPlotTrustedEvent event = new PlayerPlotTrustedEvent(plr, plot, uuid, false); - Bukkit.getPluginManager().callEvent(event); - PlayerFunctions.sendMessage(plr, C.TRUSTED_REMOVED); + DBFunc.removeTrusted(loc.getWorld(), plot, uuid); + // FIXME PlayerPlotTrustedEvent + MainUtil.sendMessage(plr, C.TRUSTED_REMOVED); } else { - PlayerFunctions.sendMessage(plr, C.TRUSTED_NEED_ARGUMENT); + MainUtil.sendMessage(plr, C.TRUSTED_NEED_ARGUMENT); return true; } return true; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unban.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unban.java deleted file mode 100644 index 6598d4c6e..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unban.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.intellectualcrafters.plot.commands; - -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; - -/** - * Created 2014-11-09 for PlotSquared - * - * @author Citymonstret - */ -public class Unban extends SubCommand { - - public Unban() { - super(Command.UNBAN, "Alias for /plot denied remove", "/plot unban [player]", CommandCategory.ACTIONS, true); - } - - @Override - public boolean execute(final Player plr, final String... args) { - if (args.length < 1) { - return PlayerFunctions.sendMessage(plr, "&cUsage: &c" + this.usage); - } - if (!PlayerFunctions.isInPlot(plr)) { - return sendMessage(plr, C.NOT_IN_PLOT); - } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!plot.hasRights(plr)) { - return sendMessage(plr, C.NO_PLOT_PERMS); - } - return plr.performCommand("plot denied remove " + args[0]); - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unclaim.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unclaim.java index b564c4d12..ec49c1abf 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unclaim.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unclaim.java @@ -18,61 +18,60 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import net.milkbowl.vault.economy.Economy; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Unclaim extends SubCommand { - public Unclaim() { super(Command.UNCLAIM, "Unclaim a plot", "unclaim", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (!PlayerFunctions.getTopPlot(plr.getWorld(), plot).equals(PlayerFunctions.getBottomPlot(plr.getWorld(), plot))) { + if (!MainUtil.getTopPlot(plot).equals(MainUtil.getBottomPlot(plot))) { return !sendMessage(plr, C.UNLINK_REQUIRED); } - if ((((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr)))) && !PlotMain.hasPermission(plr, "plots.admin.command.unclaim")) { + if ((((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr)))) && !Permissions.hasPermission(plr, "plots.admin.command.unclaim")) { return !sendMessage(plr, C.NO_PLOT_PERMS); } assert plot != null; - final PlotWorld pWorld = PlotMain.getWorldSettings(plot.getWorld()); - if (PlotMain.useEconomy && pWorld.USE_ECONOMY) { + final PlotWorld pWorld = PlotSquared.getPlotWorld(plot.world); + if (PlotSquared.economy != null && pWorld.USE_ECONOMY) { final double c = pWorld.SELL_PRICE; if (c > 0d) { - final Economy economy = PlotMain.economy; - economy.depositPlayer(plr, c); + final Economy economy = PlotSquared.economy; + EconHandler.depositPlayer(plr, c); sendMessage(plr, C.ADDED_BALANCE, c + ""); } } - final boolean result = PlotMain.removePlot(plr.getWorld().getName(), plot.id, true); + final boolean result = PlotSquared.removePlot(loc.getWorld(), plot.id, true); if (result) { - World world = plr.getWorld(); - String worldname = world.getName(); - PlotMain.getPlotManager(world).unclaimPlot(world, pWorld, plot); + final String worldname = plr.getLocation().getWorld(); + PlotSquared.getPlotManager(worldname).unclaimPlot(pWorld, plot); DBFunc.delete(worldname, plot); // TODO set wall block } else { - PlayerFunctions.sendMessage(plr, "Plot removal has been denied."); + MainUtil.sendMessage(plr, "Plot removal has been denied."); } - PlayerFunctions.sendMessage(plr, C.UNCLAIM_SUCCESS); + MainUtil.sendMessage(plr, C.UNCLAIM_SUCCESS); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java index 27afe382c..097cc77a0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java @@ -18,26 +18,22 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.events.PlotUnlinkEvent; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Created 2014-08-01 for PlotSquared @@ -45,68 +41,46 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Citymonstret */ public class Unlink extends SubCommand { - public Unlink() { super(Command.UNLINK, "Unlink a mega-plot", "unlink", CommandCategory.ACTIONS, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (!PlayerFunctions.isInPlot(plr)) { - return sendMessage(plr, C.NOT_IN_PLOT); + public boolean execute(final PlotPlayer plr, final String... args) { + Location loc = plr.getLocation(); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return !sendMessage(plr, C.NOT_IN_PLOT); } - final Plot plot = PlayerFunctions.getCurrentPlot(plr); - if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !PlotMain.hasPermission(plr, "plots.admin.command.unlink")) { + if (((plot == null) || !plot.hasOwner() || !plot.getOwner().equals(UUIDHandler.getUUID(plr))) && !Permissions.hasPermission(plr, "plots.admin.command.unlink")) { return sendMessage(plr, C.NO_PLOT_PERMS); } - if (PlayerFunctions.getTopPlot(plr.getWorld(), plot).equals(PlayerFunctions.getBottomPlot(plr.getWorld(), plot))) { + if (MainUtil.getTopPlot(plot).equals(MainUtil.getBottomPlot(plot))) { return sendMessage(plr, C.UNLINK_IMPOSSIBLE); } - - final World world = plr.getWorld(); - if (!unlinkPlot(world, plot)) { - PlayerFunctions.sendMessage(plr, "&cUnlink has been cancelled"); + if (!unlinkPlot(plot)) { + MainUtil.sendMessage(plr, "&cUnlink has been cancelled"); return false; } - try { - PlotHelper.update(plr.getLocation()); - } catch (final Exception e) { - // execute(final Player plr, final String... args) { - try { - PlotMain.sendConsoleSenderMessage("Error on: " + getClass().getMethod("execute", Player.class, String[].class).toGenericString() + ":119, when trying to use \"SetBlockFast#update\""); - } catch (final Exception ex) { - ex.printStackTrace(); - } - } - PlayerFunctions.sendMessage(plr, "&6Plots unlinked successfully!"); + MainUtil.update(plr.getLocation()); + MainUtil.sendMessage(plr, "&6Plots unlinked successfully!"); return true; } - public static boolean unlinkPlot(World world, Plot plot) { - final PlotId pos1 = PlayerFunctions.getBottomPlot(world, plot).id; - final PlotId pos2 = PlayerFunctions.getTopPlot(world, plot).id; - final ArrayList ids = PlayerFunctions.getPlotSelectionIds(pos1, pos2); - - final PlotUnlinkEvent event = new PlotUnlinkEvent(world, ids); - - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - event.setCancelled(true); - return false; - } - - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - - manager.startPlotUnlink(world, plotworld, ids); - + public static boolean unlinkPlot(final Plot plot) { + String world = plot.world; + final PlotId pos1 = MainUtil.getBottomPlot(plot).id; + final PlotId pos2 = MainUtil.getTopPlot(plot).id; + final ArrayList ids = MainUtil.getPlotSelectionIds(pos1, pos2); + // FIXME PlotUnlinkEvent (cancellable) + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + manager.startPlotUnlink(plotworld, ids); for (final PlotId id : ids) { - final Plot myplot = PlotMain.getPlots(world).get(id); - + final Plot myplot = PlotSquared.getPlots(world).get(id); if (plot == null) { continue; } - if (plot.helpers != null) { myplot.helpers = plot.helpers; } @@ -114,38 +88,33 @@ public class Unlink extends SubCommand { myplot.denied = plot.denied; } myplot.deny_entry = plot.deny_entry; - myplot.settings.setMerged(new boolean[]{false, false, false, false}); - DBFunc.setMerged(world.getName(), myplot, myplot.settings.getMerged()); + myplot.settings.setMerged(new boolean[] { false, false, false, false }); + DBFunc.setMerged(world, myplot, myplot.settings.getMerged()); } - for (int x = pos1.x; x <= pos2.x; x++) { for (int y = pos1.y; y <= pos2.y; y++) { final boolean lx = x < pos2.x; final boolean ly = y < pos2.y; - - final Plot p = PlotHelper.getPlot(world, new PlotId(x, y)); - + final Plot p = MainUtil.getPlot(world, new PlotId(x, y)); if (lx) { manager.createRoadEast(plotworld, p); if (ly) { manager.createRoadSouthEast(plotworld, p); } - } - if (ly) { manager.createRoadSouth(plotworld, p); } - PlotHelper.setSign(world, UUIDHandler.getName(plot.owner), plot); + MainUtil.setSign(UUIDHandler.getName(plot.owner), plot); } } - manager.finishPlotUnlink(world, plotworld, ids); - for (PlotId id : ids) { - Plot myPlot = PlotHelper.getPlot(world, id); + manager.finishPlotUnlink(plotworld, ids); + for (final PlotId id : ids) { + final Plot myPlot = MainUtil.getPlot(world, id); if (plot.hasOwner()) { - String name = UUIDHandler.getName(myPlot.owner); + final String name = UUIDHandler.getName(myPlot.owner); if (name != null) { - PlotHelper.setSign(world, name, myPlot); + MainUtil.setSign(name, myPlot); } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java index ad4756559..692fa7637 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java @@ -18,37 +18,36 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class Visit extends SubCommand { public Visit() { super("visit", "plots.visit", "Visit someones plot", "visit {player} [#]", "v", CommandCategory.TELEPORT, true); } - + public List getPlots(final UUID uuid) { final List plots = new ArrayList<>(); - for (final Plot p : PlotMain.getPlots()) { + for (final Plot p : PlotSquared.getPlots()) { if (p.hasOwner() && p.owner.equals(uuid)) { plots.add(p); } } return plots; } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { return sendMessage(plr, C.NEED_USER); } @@ -62,7 +61,7 @@ public class Visit extends SubCommand { return sendMessage(plr, C.FOUND_NO_PLOTS); } if (args.length < 2) { - PlotMain.teleportPlayer(plr, plr.getLocation(), plots.get(0)); + MainUtil.teleportPlayer(plr, plr.getLocation(), plots.get(0)); return true; } int i; @@ -74,7 +73,7 @@ public class Visit extends SubCommand { if ((i < 0) || (i >= plots.size())) { return sendMessage(plr, C.NOT_VALID_NUMBER); } - PlotMain.teleportPlayer(plr, plr.getLocation(), plots.get(i)); + MainUtil.teleportPlayer(plr, plr.getLocation(), plots.get(i)); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/WE_Anywhere.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/WE_Anywhere.java index aa6519d35..83054b54a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/WE_Anywhere.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/WE_Anywhere.java @@ -18,35 +18,31 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.util.PWE; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.PWE; public class WE_Anywhere extends SubCommand { - public WE_Anywhere() { super("weanywhere", "plots.weanywhere", "Force bypass of WorldEdit", "weanywhere", "wea", CommandCategory.DEBUG, true); } - + @Override - public boolean execute(final Player plr, final String... args) { - if (PlotMain.worldEdit == null) { - PlayerFunctions.sendMessage(plr, "&cWorldEdit is not enabled on this server"); + public boolean execute(final PlotPlayer plr, final String... args) { + if (PlotSquared.worldEdit == null) { + MainUtil.sendMessage(plr, "&cWorldEdit is not enabled on this server"); return false; } - - if (PlotMain.hasPermission(plr, "plots.worldedit.bypass") && PWE.hasMask(plr)) { + if (Permissions.hasPermission(plr, "plots.worldedit.bypass") && PWE.hasMask(plr)) { PWE.removeMask(plr); - PlayerFunctions.sendMessage(plr, "&6Cleared your WorldEdit mask"); - } - else { + MainUtil.sendMessage(plr, "&6Cleared your WorldEdit mask"); + } else { PWE.setMask(plr, plr.getLocation(), true); - PlayerFunctions.sendMessage(plr, "&6Updated your WorldEdit mask"); + MainUtil.sendMessage(plr, "&6Updated your WorldEdit mask"); } return true; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java index 4da3617a3..3d0f89b5b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java @@ -18,110 +18,105 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - 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.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.StringComparison; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class list extends SubCommand { - public list() { super(Command.LIST, "List all plots", "list {mine|shared|all|world|forsale}", CommandCategory.INFO, false); } - + private static String getName(final UUID id) { if (id == null) { return "none"; } - String name = UUIDHandler.getName(id); + final String name = UUIDHandler.getName(id); if (name == null) { return "unknown"; } return name; } - + @Override - public boolean execute(final Player plr, final String... args) { + public boolean execute(final PlotPlayer plr, final String... args) { if (args.length < 1) { final StringBuilder builder = new StringBuilder(); builder.append(C.SUBCOMMAND_SET_OPTIONS_HEADER.s()); if (plr != null) { - builder.append(getArgumentList(new String[]{"mine", "shared", "world", "all", "forsale"})); + builder.append(getArgumentList(new String[] { "mine", "shared", "world", "all", "forsale" })); } else { - builder.append(getArgumentList(new String[]{"all"})); + builder.append(getArgumentList(new String[] { "all" })); } - PlayerFunctions.sendMessage(plr, builder.toString()); + MainUtil.sendMessage(plr, builder.toString()); return true; } if (args[0].equalsIgnoreCase("forsale") && (plr != null)) { - if (PlotMain.economy == null) { + if (PlotSquared.economy == null) { return sendMessage(plr, C.ECON_DISABLED); } final StringBuilder string = new StringBuilder(); string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "buyable")).append("\n"); int idx = 0; - for (final Plot p : PlotMain.getPlots(plr.getWorld()).values()) { - Flag price = FlagManager.getPlotFlag(p, "price"); + for (final Plot p : PlotSquared.getPlots(plr.getLocation().getWorld()).values()) { + final Flag price = FlagManager.getPlotFlag(p, "price"); if (price != null) { string.append(C.PLOT_LIST_ITEM_ORDERED.s().replaceAll("%in", idx + 1 + "").replaceAll("%id", p.id.toString()).replaceAll("%world", price.getValueString()).replaceAll("%owner", getName(p.owner))).append("\n"); idx++; } } if (idx == 0) { - PlayerFunctions.sendMessage(plr, C.NO_PLOTS); + MainUtil.sendMessage(plr, C.NO_PLOTS); return true; } string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "Includes").replaceAll("%num%", idx + "").replaceAll("%plot%", idx == 1 ? "plot" : "plots")); - PlayerFunctions.sendMessage(plr, string.toString()); + MainUtil.sendMessage(plr, string.toString()); return true; } if (args[0].equalsIgnoreCase("mine") && (plr != null)) { final StringBuilder string = new StringBuilder(); string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "your")).append("\n"); int idx = 0; - for (final Plot p : PlotMain.getPlots(plr)) { + for (final Plot p : PlotSquared.getPlots(plr)) { string.append(C.PLOT_LIST_ITEM_ORDERED.s().replaceAll("%in", idx + 1 + "").replaceAll("%id", p.id.toString()).replaceAll("%world", p.world).replaceAll("%owner", getName(p.owner))).append("\n"); idx++; } if (idx == 0) { - PlayerFunctions.sendMessage(plr, C.NO_PLOTS); + MainUtil.sendMessage(plr, C.NO_PLOTS); return true; } 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()); + MainUtil.sendMessage(plr, string.toString()); return true; } else if (args[0].equalsIgnoreCase("shared") && (plr != null)) { final StringBuilder string = new StringBuilder(); string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all")).append("\n"); - for (final Plot p : PlotMain.getPlotsSorted()) { + for (final Plot p : PlotSquared.getPlotsSorted()) { if (p.helpers.contains(UUIDHandler.getUUID(plr))) { string.append(C.PLOT_LIST_ITEM.s().replaceAll("%id", p.id.toString()).replaceAll("%world", p.world).replaceAll("%owner", getName(p.owner))).append("\n"); } } - 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()); + string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There are").replaceAll("%num%", PlotSquared.getPlotsSorted().size() + "").replaceAll("%plot%", PlotSquared.getPlotsSorted().size() == 1 ? "plot" : "plots")); + MainUtil.sendMessage(plr, string.toString()); return true; } else if (args[0].equalsIgnoreCase("all")) { // Current page int page = 0; - // is a page specified? else use 0 if (args.length > 1) { try { @@ -134,64 +129,51 @@ public class list extends SubCommand { page = 0; } } - // Get the total pages // int totalPages = ((int) Math.ceil(12 * - // (PlotMain.getPlotsSorted().size()) / 100)); - final int totalPages = (int) Math.ceil(PlotMain.getPlotsSorted().size() / 12); - + // (PlotSquared.getPlotsSorted().size()) / 100)); + final int totalPages = (int) Math.ceil(PlotSquared.getPlotsSorted().size() / 12); if (page > totalPages) { page = totalPages; } - // Only display 12! int max = (page * 12) + 12; - - if (max > PlotMain.getPlotsSorted().size()) { - max = PlotMain.getPlotsSorted().size(); + if (max > PlotSquared.getPlotsSorted().size()) { + max = PlotSquared.getPlotsSorted().size(); } - final StringBuilder string = new StringBuilder(); - string.append(C.PLOT_LIST_HEADER_PAGED.s().replaceAll("%cur", page + 1 + "").replaceAll("%max", totalPages + 1 + "").replaceAll("%word%", "all")).append("\n"); Plot p; - // This might work xD for (int x = (page * 12); x < max; x++) { - p = (Plot) PlotMain.getPlotsSorted().toArray()[x]; + p = (Plot) PlotSquared.getPlotsSorted().toArray()[x]; string.append(C.PLOT_LIST_ITEM_ORDERED.s().replaceAll("%in", x + 1 + "").replaceAll("%id", p.id.toString()).replaceAll("%world", p.world).replaceAll("%owner", getName(p.owner))).append("\n"); } - - 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()); + string.append(C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", PlotSquared.getPlotsSorted().size() + "").replaceAll("%plot%", PlotSquared.getPlotsSorted().size() == 1 ? "plot" : "plots")); + MainUtil.sendMessage(plr, string.toString()); return true; } else if (args[0].equalsIgnoreCase("world") && (plr != null)) { final StringBuilder string = new StringBuilder(); string.append(C.PLOT_LIST_HEADER.s().replaceAll("%word%", "all")).append("\n"); - final HashMap plots = PlotMain.getPlots(plr.getWorld()); + final HashMap plots = PlotSquared.getPlots(plr.getLocation().getWorld()); for (final Plot p : plots.values()) { string.append(C.PLOT_LIST_ITEM.s().replaceAll("%id", p.id.toString()).replaceAll("%world", p.world).replaceAll("%owner", getName(p.owner))).append("\n"); } 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()); + MainUtil.sendMessage(plr, string.toString()); return true; } else { // 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; } } - + private String getArgumentList(final String[] strings) { final StringBuilder builder = new StringBuilder(); for (final String s : strings) { - builder.append(getString(s)); + builder.append(MainUtil.colorise('&', s)); } return builder.toString().substring(1, builder.toString().length() - 1); } - - private String getString(final String s) { - return ChatColor.translateAlternateColorCodes('&', C.BLOCK_LIST_ITEM.s().replaceAll("%mat%", s)); - } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/plugin.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/plugin.java index b569d6368..f65091931 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/plugin.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/plugin.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.commands; import java.io.BufferedReader; @@ -27,23 +26,20 @@ import java.net.URL; import java.net.URLConnection; 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; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.TaskManager; public class plugin extends SubCommand { - public static String downloads, version; - + public plugin() { super("plugin", "plots.use", "Show plugin information", "plugin", "version", CommandCategory.INFO, false); } - - public static void setup(final JavaPlugin plugin) { - plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { + + public static void setup() { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { try { @@ -52,8 +48,8 @@ public class plugin extends SubCommand { downloads = "unknown"; } } - }, 1l); - plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { + }); + TaskManager.runTaskLaterAsync(new Runnable() { @Override public void run() { try { @@ -63,9 +59,9 @@ public class plugin extends SubCommand { version = "unknown"; } } - }, 200l); + }, 200); } - + private static String convertToNumericString(final String str, final boolean dividers) { final StringBuilder builder = new StringBuilder(); for (final char c : str.toCharArray()) { @@ -77,7 +73,7 @@ public class plugin extends SubCommand { } return builder.toString(); } - + private static String getInfo(final String link) throws Exception { final URLConnection connection = new URL(link).openConnection(); connection.addRequestProperty("User-Agent", "Mozilla/4.0"); @@ -89,15 +85,15 @@ public class plugin extends SubCommand { reader.close(); return document; } - + @Override - public boolean execute(final Player plr, final String... args) { - Bukkit.getScheduler().runTaskAsynchronously(PlotMain.getMain(), new Runnable() { + public boolean execute(final PlotPlayer plr, final String... args) { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { final ArrayList strings = new ArrayList() { { - add(String.format("&c>> &6PlotSquared (Version: %s)", PlotMain.getMain().getDescription().getVersion())); + add(String.format("&c>> &6PlotSquared (Version: %s)", PlotSquared.IMP.getVersion())); add(String.format("&c>> &6Made by Citymonstret and Empire92")); add(String.format("&c>> &6Download at &lhttp://www.spigotmc.org/resources/1177")); add(String.format("&c>> &cNewest Version (Spigot): %s", version)); @@ -105,11 +101,10 @@ public class plugin extends SubCommand { } }; for (final String s : strings) { - PlayerFunctions.sendMessage(plr, s); + MainUtil.sendMessage(plr, s); } } }); return true; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java index 0363ed188..479355b21 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/C.java @@ -18,14 +18,17 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.config; -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualsites.translation.*; -import com.intellectualsites.translation.bukkit.BukkitTranslation; import org.bukkit.ChatColor; +import com.intellectualsites.translation.TranslationFile; +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; + /** * Captions class. * @@ -197,7 +200,6 @@ public enum C { CANT_CLAIM_MORE_PLOTS("$2You can't claim more plots."), CANT_CLAIM_MORE_PLOTS_NUM("$2You can't claim more than $1%s $2plots at once"), YOU_BE_DENIED("$2You are not allowed to enter this plot"), - NO_PERM_MERGE("$2You are not the owner of the plot: $1%plot%"), UNLINK_REQUIRED("$2An unlink is required to do this."), UNLINK_IMPOSSIBLE("$2You can only unlink a mega-plot"), @@ -325,7 +327,6 @@ public enum C { PLOT_INFO_ID("$1ID:$2 %id%"), PLOT_INFO_ALIAS("$1Alias:$2 %alias%"), PLOT_INFO_SIZE("$1Size:$2 %size%"), - PLOT_USER_LIST(" $1%user%$2,"), INFO_SYNTAX_CONSOLE("$2/plot info X;Y"), /* @@ -385,7 +386,6 @@ public enum C { FLAG_KEY("$2Key: %s"), FLAG_TYPE("$2Type: %s"), FLAG_DESC("$2Desc: %s"), - NEED_KEY("$2Possible values: $1%values%"), NOT_VALID_FLAG("$2That is not a valid flag"), NOT_VALID_VALUE("$2Flag values must be alphanumerical"), @@ -438,14 +438,13 @@ public enum C { * Custom */ CUSTOM_STRING("-"); - /** * Special Language * * @see com.intellectualsites.translation.TranslationLanguage */ protected final static TranslationLanguage lang = new TranslationLanguage("PlotSquared", "this", "use"); - public static ChatColor COLOR_1 = ChatColor.GOLD, COLOR_2 = ChatColor.GRAY, COLOR_3 = ChatColor.DARK_GRAY, COLOR_4 = ChatColor.DARK_AQUA; + public static String COLOR_1 = "\u00A76", COLOR_2 = "\u00A77", COLOR_3 = "\u00A78", COLOR_4 = "\u00A73"; /** * The TranslationManager * @@ -470,8 +469,7 @@ public enum C { * Should the string be prefixed? */ private boolean prefix; - private ChatColor[] sColors = null; - + /** * Constructor for custom strings. */ @@ -480,7 +478,7 @@ public enum C { * use setCustomString(); */ } - + /** * Constructor * @@ -494,7 +492,7 @@ public enum C { } this.prefix = prefix; } - + /** * Constructor * @@ -503,24 +501,24 @@ public enum C { C(final String d) { this(d, true); } - + public static void setupTranslations() { manager = new TranslationManager(); - defaultFile = new YamlTranslationFile(BukkitTranslation.getParent(PlotMain.getMain()), lang, "PlotSquared", manager).read(); + defaultFile = new YamlTranslationFile(BukkitTranslation.getParent(), lang, "PlotSquared", manager).read(); // register everything in this class for (final C c : values()) { manager.addTranslationObject(new TranslationObject(c.toString(), c.d, "", "")); } } - + public static void saveTranslations() { try { manager.saveAll(defaultFile).saveFile(defaultFile); - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); } } - + /** * Get the default string * @@ -529,18 +527,18 @@ public enum C { public String d() { return this.d; } - + /** * Get translated if exists * * @return translated if exists else default */ public String s() { - String s = manager.getTranslated(toString(), lang).getTranslated().replaceAll("&-", "\n").replaceAll("\\n", "\n"); + final String s = manager.getTranslated(toString(), lang).getTranslated().replaceAll("&-", "\n").replaceAll("\\n", "\n"); return s.replace("$1", COLOR_1.toString()).replace("$2", COLOR_2.toString()).replace("$3", COLOR_3.toString()).replace("$4", COLOR_4.toString()); /* - * if (PlotMain.translations != null) { - * final String t = PlotMain.translations.getString(this.toString()); + * if (PlotSquared.translations != null) { + * final String t = PlotSquared.translations.getString(this.toString()); * if (t != null) { * this.s = t; * } @@ -551,11 +549,11 @@ public enum C { * return this.s.replace("\\n", "\n"); */ } - + public boolean usePrefix() { return this.prefix; } - + /** * @return translated and color decoded * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Configuration.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Configuration.java index f0b7b5b50..e47f641df 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Configuration.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Configuration.java @@ -18,46 +18,42 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.config; import java.util.ArrayList; -import org.bukkit.block.Biome; - import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.util.BlockManager; /** * Main Configuration Utility * * @author Empire92 */ -@SuppressWarnings("unused") public class Configuration { - +@SuppressWarnings("unused") +public class Configuration { public static final SettingValue STRING = new SettingValue("STRING") { @Override public boolean validateValue(final String string) { return true; } - + @Override public Object parseString(final String string) { return string; } }; - public static final SettingValue STRINGLIST = new SettingValue("STRINGLIST") { @Override public boolean validateValue(final String string) { return true; } - + @Override public Object parseString(final String string) { return string.split(","); } }; - public static final SettingValue INTEGER = new SettingValue("INTEGER") { @Override public boolean validateValue(final String string) { @@ -68,13 +64,12 @@ import com.intellectualcrafters.plot.object.PlotBlock; return false; } } - + @Override public Object parseString(final String string) { return Integer.parseInt(string); } }; - public static final SettingValue BOOLEAN = new SettingValue("BOOLEAN") { @Override public boolean validateValue(final String string) { @@ -85,13 +80,12 @@ import com.intellectualcrafters.plot.object.PlotBlock; return false; } } - + @Override public Object parseString(final String string) { return Boolean.parseBoolean(string); } }; - public static final SettingValue DOUBLE = new SettingValue("DOUBLE") { @Override public boolean validateValue(final String string) { @@ -102,40 +96,39 @@ import com.intellectualcrafters.plot.object.PlotBlock; return false; } } - + @Override public Object parseString(final String string) { return Double.parseDouble(string); } }; - public static final SettingValue BIOME = new SettingValue("BIOME") { @Override public boolean validateValue(final String string) { try { - Biome.valueOf(string.toUpperCase()); + int biome = BlockManager.manager.getBiomeFromString(string.toUpperCase()); + if (biome == -1) { + return false; + } return true; } catch (final Exception e) { return false; } } - + @Override public Object parseString(final String string) { - for (final Biome biome : Biome.values()) { - if (biome.name().equals(string.toUpperCase())) { - return biome; - } + if (validateValue(string)) { + return string.toUpperCase(); } - return Biome.FOREST; + return "FOREST"; } - + @Override public Object parseObject(final Object object) { - return (((Biome) object)).toString(); + return object.toString(); } }; - public static final SettingValue BLOCK = new SettingValue("BLOCK") { @Override public boolean validateValue(final String string) { @@ -152,7 +145,7 @@ import com.intellectualcrafters.plot.object.PlotBlock; return false; } } - + @Override public Object parseString(final String string) { if (string.contains(":")) { @@ -162,7 +155,7 @@ import com.intellectualcrafters.plot.object.PlotBlock; return new PlotBlock(Short.parseShort(string), (byte) 0); } } - + @Override public Object parseObject(final Object object) { return object; @@ -191,12 +184,11 @@ import com.intellectualcrafters.plot.object.PlotBlock; return false; } } - + @Override public Object parseString(final String string) { final String[] blocks = string.split(","); final ArrayList parsedvalues = new ArrayList<>(); - final PlotBlock[] values = new PlotBlock[blocks.length]; final int[] counts = new int[blocks.length]; int min = 100; @@ -229,23 +221,22 @@ import com.intellectualcrafters.plot.object.PlotBlock; parsedvalues.add(values[i]); } } - return parsedvalues.toArray(new PlotBlock[parsedvalues.size()]); } - + @Override public Object parseObject(final Object object) { return object; } }; - + public static int gcd(final int a, final int b) { if (b == 0) { return a; } return gcd(b, a % b); } - + private static int gcd(final int[] a) { int result = a[0]; for (int i = 1; i < a.length; i++) { @@ -253,27 +244,27 @@ import com.intellectualcrafters.plot.object.PlotBlock; } return result; } - + /** * Create your own SettingValue object to make the management of plotworld configuration easier */ public static abstract class SettingValue { private final String type; - + public SettingValue(final String type) { this.type = type; } - + public String getType() { return this.type; } - + public Object parseObject(final Object object) { return object; } - + public abstract Object parseString(final String string); - + public abstract boolean validateValue(final String string); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/ConfigurationNode.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/ConfigurationNode.java index 0c0fceca9..da13195e6 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/ConfigurationNode.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/ConfigurationNode.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.config; import java.util.ArrayList; @@ -41,7 +40,7 @@ public class ConfigurationNode { private final String description; private final SettingValue type; private Object value; - + public ConfigurationNode(final String constant, final Object default_value, final String description, final SettingValue type, final boolean required) { this.constant = constant; this.default_value = default_value; @@ -49,11 +48,11 @@ public class ConfigurationNode { this.value = default_value; this.type = type; } - + public SettingValue getType() { return this.type; } - + public boolean isValid(final String string) { try { final Object result = this.type.parseString(string); @@ -62,7 +61,7 @@ public class ConfigurationNode { return false; } } - + public boolean setValue(final String string) { if (!this.type.validateValue(string)) { return false; @@ -70,35 +69,33 @@ public class ConfigurationNode { this.value = this.type.parseString(string); return true; } - + public Object getValue() { if (this.value instanceof String[]) { return Arrays.asList((String[]) this.value); - } - else if (this.value instanceof Object[]) { - List values = new ArrayList(); - for (Object value : (Object[]) this.value) { + } else if (this.value instanceof Object[]) { + final List values = new ArrayList(); + for (final Object value : (Object[]) this.value) { values.add(value.toString()); } return values; - } - else if (this.value instanceof PlotBlock) { + } else if (this.value instanceof PlotBlock) { return this.value.toString(); } return this.value; } - + public String getConstant() { return this.constant; } - + public Object getDefaultValue() { if (this.default_value instanceof Object[]) { return StringUtils.join((Object[]) this.default_value, ","); } return this.default_value; } - + public String getDescription() { return this.description; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Settings.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Settings.java index e9cd1f485..bc9d8e51f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Settings.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/config/Settings.java @@ -18,10 +18,8 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.config; - /** * Updater and DB settings * @@ -29,15 +27,15 @@ package com.intellectualcrafters.plot.config; * @author Empire92 */ public class Settings { - public static boolean ENABLE_CLUSTERS = false; + public static boolean ENABLE_CLUSTERS = false; /** * Default UUID_FECTHING: false */ public static boolean UUID_FECTHING = false; public static boolean UUID_FROM_DISK = false; /** - * - */ + * + */ public static boolean CONVERT_PLOTME = true; public static boolean USE_PLOTME_ALIAS = false; /** @@ -63,11 +61,11 @@ public class Settings { /** * Mob Cap Enabled */ -// public static boolean MOB_CAP_ENABLED = false; + // public static boolean MOB_CAP_ENABLED = false; /** * The Mob Cap */ -// public static int MOB_CAP = 20; + // public static int MOB_CAP = 20; /** * Display titles */ @@ -104,7 +102,6 @@ public class Settings { * Delete plots on ban? */ public static boolean DELETE_PLOTS_ON_BAN = false; - /** * Verbose? */ @@ -113,7 +110,6 @@ public class Settings { * Have colored console messages? */ public static boolean CONSOLE_COLOR = true; - /** * The delay (in seconds) before teleportation commences */ @@ -122,30 +118,25 @@ public class Settings { * Auto clear enabled */ public static boolean AUTO_CLEAR = false; - /** * Days until a plot gets cleared */ public static int AUTO_CLEAR_DAYS = 360; public static boolean AUTO_CLEAR_CHECK_DISK = false; - public static int MIN_BLOCKS_CHANGED = -1; - /** * API Location */ public static String API_URL = "http://www.intellectualsites.com/minecraft.php"; - /** * Use the custom API */ public static boolean CUSTOM_API = true; - /** * Use offline mode storage */ public static boolean OFFLINE_MODE = false; - + /** * Database settings * @@ -155,10 +146,10 @@ public class Settings { /** * MongoDB enabled? */ - public static boolean USE_MONGO = false; /* - * TODO: Implement Mongo - * @Brandon - */ + public static boolean USE_MONGO = false; /* + * TODO: Implement Mongo + * @Brandon + */ /** * SQLite enabled? */ @@ -166,7 +157,7 @@ public class Settings { /** * MySQL Enabled? */ - public static boolean USE_MYSQL = true; /* NOTE: Fixed connector */ + public static boolean USE_MYSQL = true; /* NOTE: Fixed connector */ /** * SQLite Database name */ diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/AbstractDB.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/AbstractDB.java index 37594fdfa..f898bd9af 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/AbstractDB.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/AbstractDB.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.sql.SQLException; @@ -41,14 +40,12 @@ import com.intellectualcrafters.plot.object.PlotId; * @author Empire92 */ public interface AbstractDB { - // TODO MongoDB @Brandon - /** * The UUID that will count as everyone */ public UUID everyone = UUID.fromString("1-1-3-3-7"); - + /** * Set Plot owner * @@ -56,28 +53,28 @@ public interface AbstractDB { * @param uuid The uuid of the new owner */ public void setOwner(final Plot plot, final UUID uuid); - + /** * Create all settings, and create default helpers, trusted + denied lists * * @param plots Plots for which the default table entries should be created */ public void createAllSettingsAndHelpers(final ArrayList plots); - + /** * Create a plot * * @param plots Plots that should be created */ public void createPlots(final ArrayList plots); - + /** * Create a plot * * @param plot That should be created */ public void createPlot(final Plot plot); - + /** * Create tables * @@ -86,7 +83,7 @@ public interface AbstractDB { * @throws SQLException If the database manager is unable to create the tables */ public void createTables(final String database, final boolean add_constraint) throws Exception; - + /** * Delete a plot * @@ -95,7 +92,7 @@ public interface AbstractDB { public void delete(final String world, final Plot plot); public void delete(final PlotCluster cluster); - + /** * Create plot settings * @@ -103,7 +100,7 @@ public interface AbstractDB { * @param plot Plot Object */ public void createPlotSettings(final int id, final Plot plot); - + /** * Get the table entry ID * @@ -118,7 +115,7 @@ public interface AbstractDB { * Get the id of a given plot cluster * * @param world Which the plot is located in - * @param pos1 bottom Plot ID + * @param pos1 bottom Plot ID * @param pos2 top Plot ID * * @return Integer = Cluster Entry Id @@ -129,7 +126,7 @@ public interface AbstractDB { * @return A linked hashmap containing all plots */ public LinkedHashMap> getPlots(); - + /** * @return A hashmap containing all plot clusters */ @@ -143,14 +140,14 @@ public interface AbstractDB { * @param merged boolean[] */ public void setMerged(final String world, final Plot plot, final boolean[] merged); - + /** * Swap the settings, helpers etc. of two plots * @param p1 Plot1 * @param p2 Plot2 */ public void swapPlots(final Plot p1, final Plot p2); - + /** * Set plot flags * @@ -174,7 +171,6 @@ public interface AbstractDB { */ public void setClusterName(final PlotCluster cluster, final String name); - /** * Set the plot alias * @@ -182,7 +178,7 @@ public interface AbstractDB { * @param alias Plot Alias */ public void setAlias(final String world, final Plot plot, final String alias); - + /** * Purgle a plot * @@ -190,14 +186,14 @@ public interface AbstractDB { * @param id Plot ID */ public void purgeIds(final String world, final Set uniqueIds); - + /** * Purge a whole world * * @param world World in which the plots should be purged */ public void purge(final String world, final Set plotIds); - + /** * Set Plot Home Position * @@ -207,12 +203,12 @@ public interface AbstractDB { public void setPosition(final String world, final Plot plot, final String position); /** - * + * * @param cluster * @param position */ public void setPosition(final PlotCluster cluster, final String position); - + /** * @param id Plot Entry ID * @@ -221,12 +217,12 @@ public interface AbstractDB { public HashMap getSettings(final int id); /** - * + * * @param id * @return */ public HashMap getClusterSettings(final int id); - + /** * @param plot Plot Object * @param uuid Player that should be removed @@ -238,18 +234,20 @@ public interface AbstractDB { * @param uuid Player that should be removed */ public void removeHelper(final PlotCluster cluster, final UUID uuid); - + /** * @param plot Plot Object * @param uuid Player that should be removed */ public void removeTrusted(final String world, final Plot plot, final UUID uuid); + /** - * + * * @param cluster * @param uuid */ public void removeInvited(final PlotCluster cluster, final UUID uuid); + /** * @param plot Plot Object * @param uuid Player that should be removed @@ -261,32 +259,33 @@ public interface AbstractDB { * @param uuid Player that should be removed */ public void setHelper(final PlotCluster cluster, final UUID uuid); - + /** * @param plot Plot Object * @param uuid Player that should be added */ public void setTrusted(final String world, final Plot plot, final UUID uuid); + /** - * + * * @param world * @param cluster * @param uuid */ public void setInvited(final String world, final PlotCluster cluster, final UUID uuid); - + /** * @param plot Plot Object * @param player Player that should be added */ public void removeDenied(final String world, final Plot plot, final UUID uuid); - + /** * @param plot Plot Object * @param player Player that should be added */ public void setDenied(final String world, final Plot plot, final UUID uuid); - + /** * Get Plots ratings * @@ -295,7 +294,7 @@ public interface AbstractDB { * @return Plot Ratings (pre-calculated) */ public double getRatings(final Plot plot); - + /** * Remove a plot comment * @@ -304,7 +303,7 @@ public interface AbstractDB { * @param comment Comment to remove */ public void removeComment(final String world, final Plot plot, final PlotComment comment); - + /** * Set a plot comment * @@ -313,7 +312,7 @@ public interface AbstractDB { * @param comment Comment to add */ public void setComment(final String world, final Plot plot, final PlotComment comment); - + /** * Get Plot Comments * @@ -324,12 +323,12 @@ public interface AbstractDB { * @return Plot Comments within the specified tier */ public ArrayList getComments(final String world, final Plot plot, final int tier, boolean below); - + public void createPlotAndSettings(Plot plot); public void createCluster(PlotCluster cluster); public void resizeCluster(PlotCluster current, PlotClusterId resize); - + public void movePlot(String world, PlotId originalPlot, PlotId newPlot); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/DBFunc.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/DBFunc.java index 02cfb20c9..9f5ae964f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/DBFunc.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/DBFunc.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.util.ArrayList; @@ -42,7 +41,6 @@ import com.intellectualcrafters.plot.object.PlotId; * @author Citymonstret */ public class DBFunc { - /** * The "global" uuid */ @@ -51,8 +49,8 @@ public class DBFunc { * Abstract Database Manager */ public static AbstractDB dbManager; - - public static void movePlot(String world, PlotId originalPlot, PlotId newPlot) { + + public static void movePlot(final String world, final PlotId originalPlot, final PlotId newPlot) { dbManager.movePlot(world, originalPlot, newPlot); } @@ -65,7 +63,7 @@ public class DBFunc { public static void setOwner(final Plot plot, final UUID uuid) { dbManager.setOwner(plot, uuid); } - + /** * Create all settings + (helpers, denied, trusted) * @@ -74,7 +72,7 @@ public class DBFunc { public static void createAllSettingsAndHelpers(final ArrayList plots) { dbManager.createAllSettingsAndHelpers(plots); } - + /** * Create all plots * @@ -83,7 +81,7 @@ public class DBFunc { public static void createPlots(final ArrayList plots) { dbManager.createPlots(plots); } - + /** * Create a plot * @@ -101,7 +99,7 @@ public class DBFunc { public static void createPlotAndSettings(final Plot plot) { dbManager.createPlotAndSettings(plot); } - + /** * Create tables * @@ -110,7 +108,7 @@ public class DBFunc { public static void createTables(final String database, final boolean add_constraint) throws Exception { dbManager.createTables(database, add_constraint); } - + /** * Delete a plot * @@ -123,7 +121,7 @@ public class DBFunc { public static void delete(final PlotCluster toDelete) { dbManager.delete(toDelete); } - + /** * Create plot settings * @@ -133,7 +131,7 @@ public class DBFunc { public static void createPlotSettings(final int id, final Plot plot) { dbManager.createPlotSettings(id, plot); } - + /** * Get a plot id * @@ -155,18 +153,18 @@ public class DBFunc { public static int getId(final String world, final PlotId id2) { return dbManager.getId(world, id2); } - + /** * @return Plots */ public static LinkedHashMap> getPlots() { return dbManager.getPlots(); } - + public static void setMerged(final String world, final Plot plot, final boolean[] merged) { dbManager.setMerged(world, plot, merged); } - + public static void setFlags(final String world, final Plot plot, final Set flags) { dbManager.setFlags(world, plot, flags); } @@ -174,7 +172,7 @@ public class DBFunc { public static void setFlags(final PlotCluster cluster, final Set flags) { dbManager.setFlags(cluster, flags); } - + /** * @param plot * @param alias @@ -182,15 +180,15 @@ public class DBFunc { public static void setAlias(final String world, final Plot plot, final String alias) { dbManager.setAlias(world, plot, alias); } - + public static void purgeIds(final String world, final Set uniqueIds) { dbManager.purgeIds(world, uniqueIds); } - + public static void purge(final String world, final Set plotIds) { dbManager.purge(world, plotIds); } - + /** * @param plot * @param position @@ -198,7 +196,7 @@ public class DBFunc { public static void setPosition(final String world, final Plot plot, final String position) { dbManager.setPosition(world, plot, position); } - + /** * @param id * @@ -207,7 +205,7 @@ public class DBFunc { public static HashMap getSettings(final int id) { return dbManager.getSettings(id); } - + /** * @param plot * @param comment @@ -215,7 +213,7 @@ public class DBFunc { public static void removeComment(final String world, final Plot plot, final PlotComment comment) { dbManager.removeComment(world, plot, comment); } - + /** * @param plot * @param comment @@ -223,14 +221,14 @@ public class DBFunc { public static void setComment(final String world, final Plot plot, final PlotComment comment) { dbManager.setComment(world, plot, comment); } - + /** * @param plot */ public static ArrayList getComments(final String world, final Plot plot, final int tier, final boolean below) { return dbManager.getComments(world, plot, tier, below); } - + /** * @param plot * @param player @@ -246,25 +244,25 @@ public class DBFunc { public static void removeHelper(final PlotCluster cluster, final UUID uuid) { dbManager.removeHelper(cluster, uuid); } - + /** * @param world * @param cluster * @param name */ - public static void createCluster(String world, PlotCluster cluster) { - dbManager.createCluster(cluster); + public static void createCluster(final String world, final PlotCluster cluster) { + dbManager.createCluster(cluster); } - + /** * @param world * @param current * @param resize */ - public static void resizeCluster(PlotCluster current, PlotClusterId resize) { - dbManager.resizeCluster(current, resize); + public static void resizeCluster(final PlotCluster current, final PlotClusterId resize) { + dbManager.resizeCluster(current, resize); } - + /** * @param plot * @param player @@ -274,7 +272,7 @@ public class DBFunc { } /** - * + * * @param world * @param plot * @param uuid @@ -282,7 +280,7 @@ public class DBFunc { public static void removeInvited(final PlotCluster cluster, final UUID uuid) { dbManager.removeInvited(cluster, uuid); } - + /** * @param plot * @param player @@ -294,7 +292,7 @@ public class DBFunc { public static void setHelper(final PlotCluster cluster, final UUID uuid) { dbManager.setHelper(cluster, uuid); } - + /** * @param plot * @param player @@ -306,7 +304,7 @@ public class DBFunc { public static void setInvited(final String world, final PlotCluster cluster, final UUID uuid) { dbManager.setInvited(world, cluster, uuid); } - + /** * @param plot * @param player @@ -314,7 +312,7 @@ public class DBFunc { public static void removeDenied(final String world, final Plot plot, final UUID uuid) { dbManager.removeDenied(world, plot, uuid); } - + /** * @param plot * @param player @@ -328,14 +326,14 @@ public class DBFunc { } public static HashMap> getClusters() { - return dbManager.getClusters(); + return dbManager.getClusters(); } - public static void setPosition(PlotCluster cluster, String position) { - dbManager.setPosition(cluster, position); + public static void setPosition(final PlotCluster cluster, final String position) { + dbManager.setPosition(cluster, position); } - public static HashMap getClusterSettings(int id) { + public static HashMap getClusterSettings(final int id) { return dbManager.getClusterSettings(id); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/Database.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/Database.java index 5d45248e1..fba75f6b3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/Database.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/Database.java @@ -18,14 +18,13 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; -import org.bukkit.plugin.Plugin; +import com.intellectualcrafters.plot.PlotSquared; /** * Abstract Database class, serves as a base for any connection method (MySQL, SQLite, etc.) @@ -34,21 +33,20 @@ import org.bukkit.plugin.Plugin; * @author tips48 */ public abstract class Database { - /** * Plugin instance, use for plugin.getDataFolder() */ - protected final Plugin plugin; - + protected final PlotSquared plotsquared; + /** * Creates a new Database * - * @param plugin Plugin instance + * @param plotsquared Plugin instance */ - protected Database(final Plugin plugin) { - this.plugin = plugin; + protected Database(final PlotSquared plotsquared) { + this.plotsquared = plotsquared; } - + /** * Opens a connection with the database * @@ -58,7 +56,7 @@ public abstract class Database { * @throws ClassNotFoundException if the driver cannot be found */ public abstract Connection openConnection() throws SQLException, ClassNotFoundException; - + /** * Checks if a connection is open with the database * @@ -67,14 +65,14 @@ public abstract class Database { * @throws SQLException if the connection cannot be checked */ public abstract boolean checkConnection() throws SQLException; - + /** * Gets the connection with the database * * @return Connection with the database, null if none */ public abstract Connection getConnection(); - + /** * Closes the connection with the database * @@ -83,7 +81,7 @@ public abstract class Database { * @throws SQLException if the connection cannot be closed */ public abstract boolean closeConnection() throws SQLException; - + /** * Executes a SQL Query
If the connection is closed, it will be opened * @@ -95,7 +93,7 @@ public abstract class Database { * @throws ClassNotFoundException If the driver cannot be found; see {@link #openConnection()} */ public abstract ResultSet querySQL(final String query) throws SQLException, ClassNotFoundException; - + /** * Executes an Update SQL Query
See {@link java.sql.Statement#executeUpdate(String)}
If the connection is * closed, it will be opened diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/MySQL.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/MySQL.java index 4ba7bc7ad..4f7856d70 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/MySQL.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/MySQL.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.sql.Connection; @@ -27,7 +26,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import org.bukkit.plugin.Plugin; +import com.intellectualcrafters.plot.PlotSquared; /** * Connects to and uses a MySQL database @@ -41,9 +40,8 @@ public class MySQL extends Database { private final String password; private final String port; private final String hostname; - private Connection connection; - + /** * Creates a new MySQL instance * @@ -54,8 +52,8 @@ public class MySQL extends Database { * @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) { - super(plugin); + public MySQL(final PlotSquared plotsquared, final String hostname, final String port, final String database, final String username, final String password) { + super(plotsquared); this.hostname = hostname; this.port = port; this.database = database; @@ -63,13 +61,13 @@ public class MySQL extends Database { this.password = password; this.connection = null; } - + public Connection forceConnection() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); this.connection = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password); return this.connection; } - + @Override public Connection openConnection() throws SQLException, ClassNotFoundException { if (checkConnection()) { @@ -79,17 +77,17 @@ public class MySQL extends Database { this.connection = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password); return this.connection; } - + @Override public boolean checkConnection() throws SQLException { return (this.connection != null) && !this.connection.isClosed(); } - + @Override public Connection getConnection() { return this.connection; } - + @Override public boolean closeConnection() throws SQLException { if (this.connection == null) { @@ -98,27 +96,22 @@ public class MySQL extends Database { this.connection.close(); return true; } - + @Override public ResultSet querySQL(final String query) throws SQLException, ClassNotFoundException { if (checkConnection()) { openConnection(); } - final Statement statement = this.connection.createStatement(); - return statement.executeQuery(query); } - + @Override public int updateSQL(final String query) throws SQLException, ClassNotFoundException { if (checkConnection()) { openConnection(); } - final Statement statement = this.connection.createStatement(); - return statement.executeUpdate(query); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/PlotMeConverter.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/PlotMeConverter.java index 8e8b6ffef..35ebaabf1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/PlotMeConverter.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/PlotMeConverter.java @@ -18,12 +18,10 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.io.File; import java.io.IOException; -import java.nio.ByteBuffer; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; @@ -40,11 +38,12 @@ import org.bukkit.WorldCreator; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.generator.HybridGen; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Created 2014-08-17 for PlotSquared @@ -53,28 +52,18 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Empire92 */ public class PlotMeConverter { - - /** - * PlotMain Object - */ - private final PlotMain plugin; - /** * Constructor * * @param plugin Plugin Used to run the converter */ - public PlotMeConverter(final PlotMain plugin) { - this.plugin = plugin; - } - private void sendMessage(final String message) { - PlotMain.sendConsoleSenderMessage("&3PlotMe&8->&3PlotSquared&8: &7" + message); + PlotSquared.log("&3PlotMe&8->&3PlotSquared&8: &7" + message); } public void runAsync() throws Exception { // We have to make it wait a couple of seconds - Bukkit.getScheduler().runTaskLaterAsynchronously(this.plugin, new Runnable() { + TaskManager.runTaskLaterAsync(new Runnable() { @Override public void run() { try { @@ -88,7 +77,6 @@ public class PlotMeConverter { sendMessage("Connecting to PlotMe DB"); final FileConfiguration plotConfig = YamlConfiguration.loadConfiguration(plotMeFile); int count = 0; - Connection connection; if (plotConfig.getBoolean("usemySQL")) { final String user = plotConfig.getString("mySQLuname"); @@ -96,7 +84,7 @@ public class PlotMeConverter { final String con = plotConfig.getString("mySQLconn"); connection = DriverManager.getConnection(con, user, password); } else { - connection = new SQLite(PlotMain.getMain(), dataFolder + File.separator + "plots.db").openConnection(); + connection = new SQLite(PlotSquared.THIS, dataFolder + File.separator + "plots.db").openConnection(); } sendMessage("Collecting plot data"); sendMessage(" - plotmePlots"); @@ -105,7 +93,6 @@ public class PlotMeConverter { final HashMap plotSize = new HashMap<>(); final HashMap> plots = new HashMap<>(); final Set worlds = plotConfig.getConfigurationSection("worlds").getKeys(false); - stmt = connection.createStatement(); r = stmt.executeQuery("SELECT * FROM `plotmePlots`"); while (r.next()) { @@ -113,8 +100,6 @@ public class PlotMeConverter { final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ")); final String name = r.getString("owner"); final String world = getWorld(r.getString("world")); - - if (!plotSize.containsKey(world)) { final int size = r.getInt("topZ") - r.getInt("bottomZ"); plotSize.put(world, size); @@ -124,9 +109,8 @@ public class PlotMeConverter { if (owner == null) { if (name.equals("*")) { owner = DBFunc.everyone; - } - else { - sendMessage("&cCould not identify owner for plot: " + id +" -> " + name); + } else { + sendMessage("&cCould not identify owner for plot: " + id + " -> " + name); continue; } } @@ -171,112 +155,95 @@ public class PlotMeConverter { plots.get(world).get(id).denied.add(denied); } } - sendMessage("Collected " + count + " plots from PlotMe"); - for (final String world : plots.keySet()) { sendMessage("Copying config for: " + world); try { - String plotMeWorldName = world.toLowerCase(); + final String plotMeWorldName = world.toLowerCase(); final Integer pathwidth = plotConfig.getInt("worlds." + plotMeWorldName + ".PathWidth"); // - PlotMain.config.set("worlds." + world + ".road.width", pathwidth); - + PlotSquared.config.set("worlds." + world + ".road.width", pathwidth); final Integer plotsize = plotConfig.getInt("worlds." + plotMeWorldName + ".PlotSize"); // - PlotMain.config.set("worlds." + world + ".plot.size", plotsize); - + PlotSquared.config.set("worlds." + world + ".plot.size", plotsize); final String wallblock = plotConfig.getString("worlds." + plotMeWorldName + ".WallBlockId"); // - PlotMain.config.set("worlds." + world + ".wall.block", wallblock); - + PlotSquared.config.set("worlds." + world + ".wall.block", wallblock); final String floor = plotConfig.getString("worlds." + plotMeWorldName + ".PlotFloorBlockId"); // - PlotMain.config.set("worlds." + world + ".plot.floor", Arrays.asList(floor)); - + PlotSquared.config.set("worlds." + world + ".plot.floor", Arrays.asList(floor)); final String filling = plotConfig.getString("worlds." + plotMeWorldName + ".PlotFillingBlockId"); // - PlotMain.config.set("worlds." + world + ".plot.filling", Arrays.asList(filling)); - + PlotSquared.config.set("worlds." + world + ".plot.filling", Arrays.asList(filling)); final String road = plotConfig.getString("worlds." + plotMeWorldName + ".RoadMainBlockId"); - PlotMain.config.set("worlds." + world + ".road.block", road); - + PlotSquared.config.set("worlds." + world + ".road.block", road); Integer height = plotConfig.getInt("worlds." + plotMeWorldName + ".RoadHeight"); // if (height == null) { height = 64; } - PlotMain.config.set("worlds." + world + ".road.height", height); + PlotSquared.config.set("worlds." + world + ".road.height", height); } catch (final Exception e) { sendMessage("&c-- &lFailed to save configuration for world '" + world + "'\nThis will need to be done using the setup command, or manually"); } } - final File PLOTME_DG_FILE = new File(dataFolder + File.separator + "PlotMe-DefaultGenerator" + File.separator + "config.yml"); if (PLOTME_DG_FILE.exists()) { final YamlConfiguration PLOTME_DG_YML = YamlConfiguration.loadConfiguration(PLOTME_DG_FILE); try { for (final String world : plots.keySet()) { - String plotMeWorldName = world.toLowerCase(); + final String plotMeWorldName = world.toLowerCase(); Integer pathwidth = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".PathWidth"); // if (pathwidth == null) { pathwidth = 7; } - PlotMain.config.set("worlds." + world + ".road.width", pathwidth); - + PlotSquared.config.set("worlds." + world + ".road.width", pathwidth); Integer plotsize = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".PlotSize"); // if (plotsize == null) { plotsize = 32; } - PlotMain.config.set("worlds." + world + ".plot.size", plotsize); - + PlotSquared.config.set("worlds." + world + ".plot.size", plotsize); String wallblock = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".WallBlock"); // if (wallblock == null) { wallblock = "44"; } - PlotMain.config.set("worlds." + world + ".wall.block", wallblock); - + PlotSquared.config.set("worlds." + world + ".wall.block", wallblock); String floor = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".PlotFloorBlock"); // if (floor == null) { floor = "2"; } - PlotMain.config.set("worlds." + world + ".plot.floor", Arrays.asList(floor)); - + PlotSquared.config.set("worlds." + world + ".plot.floor", Arrays.asList(floor)); String filling = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".FillBlock"); // if (filling == null) { filling = "3"; } - PlotMain.config.set("worlds." + world + ".plot.filling", Arrays.asList(filling)); - + PlotSquared.config.set("worlds." + world + ".plot.filling", Arrays.asList(filling)); String road = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".RoadMainBlock"); if (road == null) { road = "5"; } - PlotMain.config.set("worlds." + world + ".road.block", road); - + PlotSquared.config.set("worlds." + world + ".road.block", road); Integer height = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".RoadHeight"); // - if (height == null || height == 0) { + if ((height == null) || (height == 0)) { height = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".GroundHeight"); // - if (height == null || height == 0) { + if ((height == null) || (height == 0)) { height = 64; } } - PlotMain.config.set("worlds." + world + ".road.height", height); - PlotMain.config.set("worlds." + world + ".plot.height", height); - PlotMain.config.set("worlds." + world + ".wall.height", height); + PlotSquared.config.set("worlds." + world + ".road.height", height); + PlotSquared.config.set("worlds." + world + ".plot.height", height); + PlotSquared.config.set("worlds." + world + ".wall.height", height); } } catch (final Exception e) { - } } for (final String world : plots.keySet()) { int duplicate = 0; for (final Plot plot : plots.get(world).values()) { - if (!PlotMain.getPlots(world).containsKey(plot.id)) { + if (!PlotSquared.getPlots(world).containsKey(plot.id)) { createdPlots.add(plot); } else { duplicate++; } } if (duplicate > 0) { - PlotMain.sendConsoleSenderMessage("&c[WARNING] Found " + duplicate + " duplicate plots already in DB for world: '" + world + "'. Have you run the converter already?"); + PlotSquared.log("&c[WARNING] Found " + duplicate + " duplicate plots already in DB for world: '" + world + "'. Have you run the converter already?"); } } - sendMessage("Creating plot DB"); Thread.sleep(1000); DBFunc.createPlots(createdPlots); @@ -284,31 +251,26 @@ public class PlotMeConverter { DBFunc.createAllSettingsAndHelpers(createdPlots); sendMessage("Saving configuration..."); try { - PlotMain.config.save(PlotMain.configFile); + PlotSquared.config.save(PlotSquared.configFile); } catch (final IOException e) { sendMessage(" - &cFailed to save configuration."); } - - Bukkit.getScheduler().scheduleSyncDelayedTask(PlotMain.getMain(), new Runnable() { + TaskManager.runTask(new Runnable() { @Override public void run() { try { boolean MV = false; boolean MW = false; - if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { MV = true; } else if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { MW = true; } - for (final String worldname : worlds) { final World world = Bukkit.getWorld(getWorld(worldname)); final String actualWorldName = world.getName(); sendMessage("Reloading generator for world: '" + actualWorldName + "'..."); - - PlotMain.removePlotWorld(actualWorldName); - + PlotSquared.removePlotWorld(actualWorldName); if (MV) { // unload Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv unload " + actualWorldName); @@ -335,35 +297,26 @@ public class PlotMeConverter { myworld.save(); } } - - PlotMain.setAllPlotsRaw(DBFunc.getPlots()); + PlotSquared.setAllPlotsRaw(DBFunc.getPlots()); sendMessage("Conversion has finished"); - PlotMain.sendConsoleSenderMessage("&cPlease disable 'plotme-convert.enabled' in the settings.yml to indicate that you conversion is no longer required."); + PlotSquared.log("&cPlease disable 'plotme-convert.enabled' in the settings.yml to indicate that you conversion is no longer required."); } catch (final Exception e) { e.printStackTrace(); } } }); } catch (final Exception e) { - } } }, 20); } - public String getWorld(String world) { - for (World newworld : Bukkit.getWorlds()) { + public String getWorld(final String world) { + for (final World newworld : Bukkit.getWorlds()) { if (newworld.getName().equalsIgnoreCase(world)) { return newworld.getName(); } } return world; } - - private UUID uuidFromBytes(byte[] byteArray) { - ByteBuffer wrapped = ByteBuffer.wrap(byteArray); - long minor = wrapped.getLong(); - long major = wrapped.getLong(); - return new UUID(major, minor); - } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java index 12d7c865b..c28886d01 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.sql.Connection; @@ -36,10 +35,9 @@ import java.util.Set; import java.util.UUID; import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; import org.bukkit.block.Biome; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.BlockLoc; @@ -55,7 +53,6 @@ import com.intellectualcrafters.plot.util.TaskManager; * @author Citymonstret */ public class SQLManager implements AbstractDB { - // Public final public final String SET_OWNER; public final String GET_ALL_PLOTS; @@ -67,7 +64,7 @@ public class SQLManager implements AbstractDB { private final String prefix; // Private Final private Connection connection; - + /** * Constructor * @@ -80,7 +77,6 @@ public class SQLManager implements AbstractDB { this.prefix = p; // Set timout // setTimout(); - // Public final this.SET_OWNER = "UPDATE `" + this.prefix + "plot` SET `owner` = ? WHERE `plot_id_x` = ? AND `plot_id_z` = ?"; this.GET_ALL_PLOTS = "SELECT `id`, `plot_id_x`, `plot_id_z`, `world` FROM `" + this.prefix + "plot`"; @@ -89,23 +85,21 @@ public class SQLManager implements AbstractDB { this.CREATE_HELPERS = "INSERT INTO `" + this.prefix + "plot_helpers` (`plot_plot_id`, `user_uuid`) values "; this.CREATE_PLOT = "INSERT INTO `" + this.prefix + "plot`(`plot_id_x`, `plot_id_z`, `owner`, `world`) VALUES(?, ?, ?, ?)"; this.CREATE_CLUSTER = "INSERT INTO `" + this.prefix + "cluster`(`pos1_x`, `pos1_z`, `pos2_x`, `pos2_z`, `owner`, `world`) VALUES(?, ?, ?, ?, ?, ?)"; - // schedule reconnect - if (PlotMain.getMySQL() != null) { - Bukkit.getScheduler().runTaskTimer(PlotMain.getMain(), new Runnable() { + if (PlotSquared.getMySQL() != null) { + TaskManager.runTaskRepeat(new Runnable() { @Override public void run() { try { - SQLManager.this.connection = PlotMain.getMySQL().forceConnection(); + SQLManager.this.connection = PlotSquared.getMySQL().forceConnection(); } catch (final Exception e) { e.printStackTrace(); } } - }, 11000, 11000); + }, 11000); } - } - + /** * Set Plot owner * @@ -126,25 +120,24 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Could not set owner for plot " + plot.id); + PlotSquared.log("&c[ERROR] " + "Could not set owner for plot " + plot.id); } } }); } - + @Override public void createAllSettingsAndHelpers(final ArrayList mylist) { - int size = mylist.size(); + final int size = mylist.size(); int packet; - if (PlotMain.getMySQL() != null) { + if (PlotSquared.getMySQL() != null) { packet = Math.min(size, 50000); - } - else { + } else { packet = Math.min(size, 5000); } - int amount = size/packet; - for (int j = 0; j <= amount;j++) { - List plots = mylist.subList(j * packet, Math.min(size, (j + 1) * packet)); + final int amount = size / packet; + for (int j = 0; j <= amount; j++) { + final List plots = mylist.subList(j * packet, Math.min(size, (j + 1) * packet)); final HashMap> stored = new HashMap<>(); final HashMap> helpers = new HashMap<>(); try { @@ -155,12 +148,12 @@ public class SQLManager implements AbstractDB { final int idx = result.getInt("plot_id_x"); final int idz = result.getInt("plot_id_z"); final String world = result.getString("world"); - if (!stored.containsKey(world)) { stored.put(world, new HashMap()); } stored.get(world).put(new PlotId(idx, idz), id); } + result.close(); stmt.close(); } catch (final SQLException e) { e.printStackTrace(); @@ -193,8 +186,8 @@ public class SQLManager implements AbstractDB { stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { - for (int i = 0; i < ids.length; i++) { - createPlotSettings(ids[i], null); + for (final Integer id : ids) { + createPlotSettings(id, null); } } // add plot helpers @@ -214,7 +207,6 @@ public class SQLManager implements AbstractDB { int counter = 0; for (final Integer id : helpers.keySet()) { for (final UUID helper : helpers.get(id)) { - stmt.setInt((counter * 2) + 1, id); stmt.setString((counter * 2) + 2, helper.toString()); counter++; @@ -229,13 +221,13 @@ public class SQLManager implements AbstractDB { setHelper(id, helper); } } + } catch (final Exception e2) { } - catch (Exception e2) {} - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set all helpers for plots"); + PlotSquared.log("&7[WARN] " + "Failed to set all helpers for plots"); } } } - + /** * Create a plot * @@ -243,27 +235,24 @@ public class SQLManager implements AbstractDB { */ @Override public void createPlots(final ArrayList mylist) { - int size = mylist.size(); + final int size = mylist.size(); int packet; - if (PlotMain.getMySQL() != null) { + if (PlotSquared.getMySQL() != null) { packet = Math.min(size, 50000); - } - else { + } else { packet = Math.min(size, 5000); } - int amount = size/packet; - for (int j = 0; j <= amount;j++) { - List plots = mylist.subList(j * packet, Math.min(size, (j + 1) * packet)); + final int amount = size / packet; + for (int j = 0; j <= amount; j++) { + final List plots = mylist.subList(j * packet, Math.min(size, (j + 1) * packet)); if (plots.size() == 0) { return; } final StringBuilder statement = new StringBuilder(this.CREATE_PLOTS); - for (int i = 0; i < (plots.size() - 1); i++) { statement.append("(?,?,?,?),"); } statement.append("(?,?,?,?)"); - PreparedStatement stmt = null; try { stmt = this.connection.prepareStatement(statement.toString()); @@ -273,8 +262,7 @@ public class SQLManager implements AbstractDB { stmt.setInt((i * 4) + 2, plot.id.y); try { stmt.setString((i * 4) + 3, plot.owner.toString()); - } - catch (Exception e) { + } catch (final Exception e) { stmt.setString((i * 4) + 3, DBFunc.everyone.toString()); } stmt.setString((i * 4) + 4, plot.world); @@ -283,25 +271,23 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final Exception e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&6[WARN] "+"Could not bulk save. Conversion may be slower..."); + PlotSquared.log("&6[WARN] " + "Could not bulk save. Conversion may be slower..."); try { - for (Plot plot : plots) { + for (final Plot plot : plots) { try { createPlot(plot); - } - catch (Exception e3) { - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Failed to save plot: "+plot.id); + } catch (final Exception e3) { + PlotSquared.log("&c[ERROR] " + "Failed to save plot: " + plot.id); } } - } - catch (Exception e2) { + } catch (final Exception e2) { e2.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Failed to save plots!"); + PlotSquared.log("&c[ERROR] " + "Failed to save plots!"); } } } } - + /** * Create a plot * @@ -323,12 +309,12 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final Exception e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Failed to save plot " + plot.id); + PlotSquared.log("&c[ERROR] " + "Failed to save plot " + plot.id); } } }); } - + @Override public void createPlotAndSettings(final Plot plot) { TaskManager.runTaskAsync(new Runnable() { @@ -343,20 +329,18 @@ public class SQLManager implements AbstractDB { stmt.setString(4, plot.world); stmt.executeUpdate(); stmt.close(); - - int id = getId(plot.world, plot.id); + final int id = getId(plot.world, plot.id); stmt = SQLManager.this.connection.prepareStatement("INSERT INTO `" + SQLManager.this.prefix + "plot_settings`(`plot_plot_id`) VALUES(" + "?)"); stmt.setInt(1, id); stmt.executeUpdate(); stmt.close(); } catch (final Exception e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Failed to save plot " + plot.id); + PlotSquared.log("&c[ERROR] " + "Failed to save plot " + plot.id); } } }); } - /** * Create tables @@ -365,7 +349,6 @@ public class SQLManager implements AbstractDB { */ @Override public void createTables(final String database, final boolean add_constraint) throws SQLException { - final boolean mysql = database.equals("mysql"); final Statement stmt = this.connection.createStatement(); if (mysql) { @@ -381,18 +364,16 @@ public class SQLManager implements AbstractDB { } stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster` (" + "`id` INT(11) NOT NULL AUTO_INCREMENT," + "`pos1_x` INT(11) NOT NULL," + "`pos1_z` INT(11) NOT NULL," + "`pos2_x` INT(11) NOT NULL," + "`pos2_z` INT(11) NOT NULL," + "`owner` VARCHAR(40) NOT NULL," + "`world` VARCHAR(45) NOT NULL," + "`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," + "PRIMARY KEY (`id`)" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster_helpers` (" + "`cluster_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8"); - stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster_invited` (" + "`cluster_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8"); + stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster_invited` (" + "`cluster_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster_settings` (" + " `cluster_id` INT(11) NOT NULL," + " `biome` VARCHAR(45) DEFAULT 'FOREST'," + " `rain` INT(1) DEFAULT 0," + " `custom_time` TINYINT(1) DEFAULT '0'," + " `time` INT(11) DEFAULT '8000'," + " `deny_entry` TINYINT(1) DEFAULT '0'," + " `alias` VARCHAR(50) DEFAULT NULL," + " `flags` VARCHAR(512) DEFAULT NULL," + " `merged` INT(11) DEFAULT NULL," + " `position` VARCHAR(50) NOT NULL DEFAULT 'DEFAULT'," + " PRIMARY KEY (`cluster_id`)" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8"); - } 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_helpers` (" + "`plot_plot_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_trusted` (" + "`plot_plot_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_comments` (" + "`plot_plot_id` INT(11) NOT NULL," + "`comment` VARCHAR(40) NOT NULL," + "`tier` INT(11) NOT NULL," + "`sender` VARCHAR(40) NOT NULL" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_settings` (" + " `plot_plot_id` INT(11) NOT NULL," + " `biome` VARCHAR(45) DEFAULT 'FOREST'," + " `rain` INT(1) DEFAULT 0," + " `custom_time` TINYINT(1) DEFAULT '0'," + " `time` INT(11) DEFAULT '8000'," + " `deny_entry` TINYINT(1) DEFAULT '0'," + " `alias` VARCHAR(50) DEFAULT NULL," + " `flags` VARCHAR(512) DEFAULT NULL," + " `merged` INT(11) DEFAULT NULL," + " `position` VARCHAR(50) NOT NULL DEFAULT 'DEFAULT'," + " PRIMARY KEY (`plot_plot_id`)" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot_ratings` (`plot_plot_id` INT(11) NOT NULL, `rating` INT(2) NOT NULL, `player` VARCHAR(40) NOT NULL, PRIMARY KEY(`plot_plot_id`))"); - stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster` (" + "`id` INTEGER PRIMARY KEY AUTOINCREMENT," + "`pos1_x` INT(11) NOT NULL," + "`pos1_z` INT(11) NOT NULL," + "`pos2_x` INT(11) NOT NULL," + "`pos2_z` INT(11) NOT NULL," + "`owner` VARCHAR(40) NOT NULL," + "`world` VARCHAR(45) NOT NULL," + "`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster_helpers` (" + "`cluster_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "cluster_invited` (" + "`cluster_id` INT(11) NOT NULL," + "`user_uuid` VARCHAR(40) NOT NULL" + ")"); @@ -402,7 +383,7 @@ public class SQLManager implements AbstractDB { stmt.clearBatch(); stmt.close(); } - + /** * Delete a plot * @@ -410,7 +391,7 @@ public class SQLManager implements AbstractDB { */ @Override public void delete(final String world, final Plot plot) { - PlotMain.removePlot(world, plot.id, false); + PlotSquared.removePlot(world, plot.id, false); TaskManager.runTaskAsync(new Runnable() { @Override public void run() { @@ -438,12 +419,12 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] " + "Failed to delete plot " + plot.id); + PlotSquared.log("&c[ERROR] " + "Failed to delete plot " + plot.id); } } }); } - + /** * Create plot settings * @@ -464,11 +445,10 @@ public class SQLManager implements AbstractDB { } catch (final SQLException e) { e.printStackTrace(); } - } }); } - + @Override public int getId(final String world, final PlotId id2) { PreparedStatement stmt = null; @@ -482,6 +462,7 @@ public class SQLManager implements AbstractDB { while (r.next()) { id = r.getInt("id"); } + r.close(); stmt.close(); return id; } catch (final SQLException e) { @@ -489,7 +470,7 @@ public class SQLManager implements AbstractDB { } return Integer.MAX_VALUE; } - + /** * Load all plots, helpers, denied, trusted, and every setting from DB into a hashmap */ @@ -515,23 +496,21 @@ public class SQLManager implements AbstractDB { final Statement statement = this.connection.createStatement(); statement.addBatch("ALTER TABLE `" + this.prefix + "plot_settings` ADD `merged` int(11) DEFAULT NULL"); statement.executeBatch(); + rs.close(); statement.close(); } } catch (final Exception e) { e.printStackTrace(); } final HashMap plots = new HashMap<>(); - Statement stmt = null; try { - Set worlds = new HashSet<>(); - if (PlotMain.config.contains("worlds")) { - worlds = PlotMain.config.getConfigurationSection("worlds").getKeys(false); + if (PlotSquared.config.contains("worlds")) { + worlds = PlotSquared.config.getConfigurationSection("worlds").getKeys(false); } final HashMap uuids = new HashMap(); final HashMap noExist = new HashMap(); - /* * Getting plots */ @@ -559,10 +538,9 @@ public class SQLManager implements AbstractDB { user = UUID.fromString(o); uuids.put(o, user); } - p = new Plot(plot_id, user, new ArrayList(), new ArrayList(), new ArrayList(), "", null, null, worldname, new boolean[]{false, false, false, false}); + p = new Plot(plot_id, user, new ArrayList(), new ArrayList(), new ArrayList(), "", null, null, worldname, new boolean[] { false, false, false, false }); plots.put(id, p); } - /* * Getting helpers */ @@ -579,7 +557,7 @@ public class SQLManager implements AbstractDB { if (plot != null) { plot.addHelper(user); } else { - PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_helpers does not exist. Please create the plot or remove this entry."); + PlotSquared.log("&cPLOT " + id + " in plot_helpers does not exist. Please create the plot or remove this entry."); } } /* @@ -598,7 +576,7 @@ public class SQLManager implements AbstractDB { if (plot != null) { plot.addTrusted(user); } else { - PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_trusted does not exist. Please create the plot or remove this entry."); + PlotSquared.log("&cPLOT " + id + " in plot_trusted does not exist. Please create the plot or remove this entry."); } } /* @@ -617,7 +595,7 @@ public class SQLManager implements AbstractDB { if (plot != null) { plot.addDenied(user); } else { - PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_denied does not exist. Please create the plot or remove this entry."); + PlotSquared.log("&cPLOT " + id + " in plot_denied does not exist. Please create the plot or remove this entry."); } } r = stmt.executeQuery("SELECT * FROM `" + this.prefix + "plot_settings`"); @@ -625,7 +603,6 @@ public class SQLManager implements AbstractDB { id = r.getInt("plot_plot_id"); final Plot plot = plots.get(id); if (plot != null) { - final String b = r.getString("biome"); if (b != null) { for (final Biome mybiome : Biome.values()) { @@ -634,14 +611,11 @@ public class SQLManager implements AbstractDB { } } } - final String alias = r.getString("alias"); if (alias != null) { plot.settings.setAlias(alias); } - final String pos = r.getString("position"); - switch (pos.toLowerCase()) { case "": case "default": @@ -650,11 +624,11 @@ public class SQLManager implements AbstractDB { break; default: try { - String[] split = pos.split(","); - BlockLoc loc = new BlockLoc(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2])); + final String[] split = pos.split(","); + final BlockLoc loc = new BlockLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2])); plot.settings.setPosition(loc); + } catch (final Exception e) { } - catch (Exception e) {} } final Integer m = r.getInt("merged"); if (m != null) { @@ -664,19 +638,17 @@ public class SQLManager implements AbstractDB { } plot.settings.setMerged(merged); } else { - plot.settings.setMerged(new boolean[]{false, false, false, false}); + plot.settings.setMerged(new boolean[] { false, false, false, false }); } - String[] flags_string; final String myflags = r.getString("flags"); if (myflags == null) { - flags_string = new String[]{}; + flags_string = new String[] {}; } else { if (myflags.length() > 0) { flags_string = myflags.split(","); - } - else { - flags_string = new String[]{}; + } else { + flags_string = new String[] {}; } } final Set flags = new HashSet(); @@ -685,8 +657,8 @@ public class SQLManager implements AbstractDB { if (element.contains(":")) { final String[] split = element.split(":"); try { - String flag_str = split[1].replaceAll("\u00AF", ":").replaceAll("\u00B4", ","); - Flag flag = new Flag(FlagManager.getFlag(split[0], true), flag_str); + final String flag_str = split[1].replaceAll("\u00AF", ":").replaceAll("\u00B4", ","); + final Flag flag = new Flag(FlagManager.getFlag(split[0], true), flag_str); flags.add(flag); } catch (final Exception e) { e.printStackTrace(); @@ -697,15 +669,16 @@ public class SQLManager implements AbstractDB { } } if (exception) { - PlotMain.sendConsoleSenderMessage("&cPlot " + id + " had an invalid flag. A fix has been attempted."); + PlotSquared.log("&cPlot " + id + " had an invalid flag. A fix has been attempted."); setFlags(id, flags.toArray(new Flag[0])); } plot.settings.flags = flags; } else { - PlotMain.sendConsoleSenderMessage("&cPLOT " + id + " in plot_settings does not exist. Please create the plot or remove this entry."); + PlotSquared.log("&cPLOT " + id + " in plot_settings does not exist. Please create the plot or remove this entry."); } } stmt.close(); + r.close(); for (final Plot plot : plots.values()) { final String world = plot.world; if (!newplots.containsKey(world)) { @@ -716,18 +689,18 @@ public class SQLManager implements AbstractDB { boolean invalidPlot = false; for (final String worldname : noExist.keySet()) { invalidPlot = true; - PlotMain.sendConsoleSenderMessage("&c[WARNING] Found " + noExist.get(worldname) + " plots in DB for non existant world; '" + worldname + "'."); + PlotSquared.log("&c[WARNING] Found " + noExist.get(worldname) + " plots in DB for non existant world; '" + worldname + "'."); } if (invalidPlot) { - PlotMain.sendConsoleSenderMessage("&c[WARNING] - Please create the world/s or remove the plots using the purge command"); + PlotSquared.log("&c[WARNING] - Please create the world/s or remove the plots using the purge command"); } } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to load plots."); + PlotSquared.log("&7[WARN] " + "Failed to load plots."); e.printStackTrace(); } return newplots; } - + @Override public void setMerged(final String world, final Plot plot, final boolean[] merged) { plot.settings.setMerged(merged); @@ -746,71 +719,67 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Could not set merged for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Could not set merged for plot " + plot.id); } } }); } - + @Override public void swapPlots(final Plot p1, final Plot p2) { - TaskManager.runTaskAsync( - new Runnable() { - @Override - public void run() { - /* - * We don't need to actually swap all the rows - * - Just switch the plot_id_x and plot_id_z - * - The other tables reference the `id` so it will cascade - */ - try { - String world = p1.world; - int id1 = getId(world, p1.id); - int id2 = getId(world, p2.id); - PlotId pos1 = p1.getId(); - PlotId pos2 = p2.getId(); - PreparedStatement stmt = SQLManager.this.connection.prepareStatement("UPDATE `" + SQLManager.this.prefix + "plot` SET `plot_id_x` = ?, `plot_id_z` = ? WHERE `id` = ?"); - stmt.setInt(1, pos2.x); - stmt.setInt(2, pos2.y); - stmt.setInt(3, id1); - stmt.executeUpdate(); - stmt.close(); - stmt = SQLManager.this.connection.prepareStatement("UPDATE `" + SQLManager.this.prefix + "plot` SET `plot_id_x` = ?, `plot_id_z` = ? WHERE `id` = ?"); - stmt.setInt(1, pos1.x); - stmt.setInt(2, pos1.y); - stmt.setInt(3, id2); - stmt.executeUpdate(); - stmt.close(); - } catch (final Exception e) { - e.printStackTrace(); - } - } + TaskManager.runTaskAsync(new Runnable() { + @Override + public void run() { + /* + * We don't need to actually swap all the rows + * - Just switch the plot_id_x and plot_id_z + * - The other tables reference the `id` so it will cascade + */ + try { + final String world = p1.world; + final int id1 = getId(world, p1.id); + final int id2 = getId(world, p2.id); + final PlotId pos1 = p1.getId(); + final PlotId pos2 = p2.getId(); + PreparedStatement stmt = SQLManager.this.connection.prepareStatement("UPDATE `" + SQLManager.this.prefix + "plot` SET `plot_id_x` = ?, `plot_id_z` = ? WHERE `id` = ?"); + stmt.setInt(1, pos2.x); + stmt.setInt(2, pos2.y); + stmt.setInt(3, id1); + stmt.executeUpdate(); + stmt.close(); + stmt = SQLManager.this.connection.prepareStatement("UPDATE `" + SQLManager.this.prefix + "plot` SET `plot_id_x` = ?, `plot_id_z` = ? WHERE `id` = ?"); + stmt.setInt(1, pos1.x); + stmt.setInt(2, pos1.y); + stmt.setInt(3, id2); + stmt.executeUpdate(); + stmt.close(); + } catch (final Exception e) { + e.printStackTrace(); } - ); + } + }); } @Override public void movePlot(final String world, final PlotId originalPlot, final PlotId newPlot) { - TaskManager.runTaskAsync( - new Runnable() { - @Override - public void run() { - try { - int id = getId(world, originalPlot); - PreparedStatement stmt = SQLManager.this.connection.prepareStatement("UPDATE `" + SQLManager.this.prefix + "plot` SET `plot_id_x` = ?, `plot_id_z` = ? WHERE `id` = ?"); - stmt.setInt(1, newPlot.x); - stmt.setInt(2, newPlot.y); - stmt.setInt(3, id); - stmt.executeUpdate(); - stmt.close(); - } catch (final Exception e) { - e.printStackTrace(); - } - } + TaskManager.runTaskAsync(new Runnable() { + @Override + public void run() { + try { + final int id = getId(world, originalPlot); + final PreparedStatement stmt = SQLManager.this.connection.prepareStatement("UPDATE `" + SQLManager.this.prefix + "plot` SET `plot_id_x` = ?, `plot_id_z` = ? WHERE `id` = ?"); + stmt.setInt(1, newPlot.x); + stmt.setInt(2, newPlot.y); + stmt.setInt(3, id); + stmt.executeUpdate(); + stmt.close(); + } catch (final Exception e) { + e.printStackTrace(); } - ); + } + }); } - + @Override public void setFlags(final String world, final Plot plot, final Set flags) { final StringBuilder flag_string = new StringBuilder(); @@ -833,12 +802,12 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Could not set flag for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Could not set flag for plot " + plot.id); } } }); } - + public void setFlags(final int id, final Flag[] flags) { final ArrayList newflags = new ArrayList(); for (final Flag flag : flags) { @@ -858,12 +827,12 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Could not set flag for plot " + id); + PlotSquared.log("&7[WARN] " + "Could not set flag for plot " + id); } } }); } - + /** * @param plot * @param alias @@ -882,24 +851,22 @@ public class SQLManager implements AbstractDB { stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set alias for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to set alias for plot " + plot.id); e.printStackTrace(); } - } }); } - + /** * Purge all plots with the following database IDs */ + @Override public void purgeIds(final String world, final Set uniqueIds) { if (uniqueIds.size() > 0) { try { - String stmt_prefix = ""; final StringBuilder idstr = new StringBuilder(""); - for (final Integer id : uniqueIds) { idstr.append(stmt_prefix + id); stmt_prefix = " OR `plot_plot_id` = "; @@ -907,43 +874,40 @@ public class SQLManager implements AbstractDB { PreparedStatement stmt = SQLManager.this.connection.prepareStatement("DELETE FROM `" + this.prefix + "plot_helpers` WHERE `plot_plot_id` = " + idstr + ""); stmt.executeUpdate(); stmt.close(); - stmt = SQLManager.this.connection.prepareStatement("DELETE FROM `" + this.prefix + "plot_denied` WHERE `plot_plot_id` = " + idstr + ""); stmt.executeUpdate(); stmt.close(); - stmt = SQLManager.this.connection.prepareStatement("DELETE FROM `" + this.prefix + "plot_settings` WHERE `plot_plot_id` = " + idstr + ""); stmt.executeUpdate(); stmt.close(); - stmt = SQLManager.this.connection.prepareStatement("DELETE FROM `" + this.prefix + "plot_trusted` WHERE `plot_plot_id` = " + idstr + ""); stmt.executeUpdate(); stmt.close(); - stmt = SQLManager.this.connection.prepareStatement("DELETE FROM `" + this.prefix + "plot` WHERE `world` = ?"); stmt.setString(1, world); stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"FAILED TO PURGE WORLD '" + world + "'!"); + PlotSquared.log("&c[ERROR] " + "FAILED TO PURGE WORLD '" + world + "'!"); return; } } - PlotMain.sendConsoleSenderMessage("&6[INFO] "+"SUCCESSFULLY PURGED WORLD '" + world + "'!"); + PlotSquared.log("&6[INFO] " + "SUCCESSFULLY PURGED WORLD '" + world + "'!"); } + @Override - public void purge(final String world, Set plots) { - for (PlotId id : plots) { - PlotMain.removePlot(world, id, true); - } + public void purge(final String world, final Set plots) { + for (final PlotId id : plots) { + PlotSquared.removePlot(world, id, true); + } PreparedStatement stmt; try { stmt = SQLManager.this.connection.prepareStatement("SELECT `id`, `plot_id_x`, `plot_id_z` FROM `" + this.prefix + "plot` WHERE `world` = ?"); stmt.setString(1, world); - ResultSet r = stmt.executeQuery(); + final ResultSet r = stmt.executeQuery(); PlotId plot_id; - Set ids = new HashSet<>(); + final Set ids = new HashSet<>(); while (r.next()) { plot_id = new PlotId(r.getInt("plot_id_x"), r.getInt("plot_id_z")); if (plots.contains(plot_id)) { @@ -951,9 +915,11 @@ public class SQLManager implements AbstractDB { } } purgeIds(world, ids); - } catch (SQLException e) { + stmt.close(); + r.close(); + } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"FAILED TO PURGE WORLD '" + world + "'!"); + PlotSquared.log("&c[ERROR] " + "FAILED TO PURGE WORLD '" + world + "'!"); } } @@ -974,13 +940,13 @@ public class SQLManager implements AbstractDB { stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set position for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to set position for plot " + plot.id); e.printStackTrace(); } } }); } - + /** * @param id * @@ -1026,56 +992,55 @@ public class SQLManager implements AbstractDB { h.put(var, val); } stmt.close(); + r.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to load settings for plot: " + id); + PlotSquared.log("&7[WARN] " + "Failed to load settings for plot: " + id); e.printStackTrace(); } return h; } - + @Override public void removeComment(final String world, final Plot plot, final PlotComment comment) { TaskManager.runTaskAsync(new Runnable() { @Override public void run() { try { - PreparedStatement statement; - if (plot != null) { - statement = SQLManager.this.connection.prepareStatement("DELETE FROM `" + SQLManager.this.prefix + "plot_comments` WHERE `plot_plot_id` = ? AND `comment` = ? AND `tier` = ? AND `sender` = ?"); - statement.setInt(1, getId(world, plot.id)); - statement.setString(2, comment.comment); - statement.setInt(3, comment.tier); - statement.setString(4, comment.senderName); - } - else { - statement = SQLManager.this.connection.prepareStatement("DELETE FROM `" + SQLManager.this.prefix + "plot_comments` WHERE `comment` = ? AND `tier` = ? AND `sender` = ?"); - statement.setString(1, comment.comment); - statement.setInt(2, comment.tier); - statement.setString(3, comment.senderName); - } + PreparedStatement statement; + if (plot != null) { + statement = SQLManager.this.connection.prepareStatement("DELETE FROM `" + SQLManager.this.prefix + "plot_comments` WHERE `plot_plot_id` = ? AND `comment` = ? AND `tier` = ? AND `sender` = ?"); + statement.setInt(1, getId(world, plot.id)); + statement.setString(2, comment.comment); + statement.setInt(3, comment.tier); + statement.setString(4, comment.senderName); + } else { + statement = SQLManager.this.connection.prepareStatement("DELETE FROM `" + SQLManager.this.prefix + "plot_comments` WHERE `comment` = ? AND `tier` = ? AND `sender` = ?"); + statement.setString(1, comment.comment); + statement.setInt(2, comment.tier); + statement.setString(3, comment.senderName); + } statement.executeUpdate(); statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to remove helper for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to remove helper for plot " + plot.id); } } }); } - + @Override - public ArrayList getComments(final String world, final Plot plot, final int tier, boolean below) { + public ArrayList getComments(final String world, final Plot plot, final int tier, final boolean below) { final ArrayList comments = new ArrayList(); try { final PreparedStatement statement; - String comparison = below ? ">=" : "="; + final String comparison = below ? ">=" : "="; if (plot != null) { - statement = this.connection.prepareStatement("SELECT * FROM `" + this.prefix + "plot_comments` WHERE `plot_plot_id` = ? AND `tier` " + comparison + " ?"); - statement.setInt(1, getId(plot.getWorld().getName(), plot.id)); + statement = this.connection.prepareStatement("SELECT * FROM `" + this.prefix + "plot_comments` WHERE `plot_plot_id` = ? AND `tier` " + comparison + " ?"); + statement.setInt(1, getId(plot.world, plot.id)); statement.setInt(2, tier); - } - else { - statement = this.connection.prepareStatement("SELECT * FROM `" + this.prefix + "plot_comments` WHERE `tier` " + comparison + " ?"); + } else { + statement = this.connection.prepareStatement("SELECT * FROM `" + this.prefix + "plot_comments` WHERE `tier` " + comparison + " ?"); statement.setInt(1, tier); } final ResultSet set = statement.executeQuery(); @@ -1087,13 +1052,14 @@ public class SQLManager implements AbstractDB { comments.add(comment); } statement.close(); + set.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to fetch comment"); + PlotSquared.log("&7[WARN] " + "Failed to fetch comment"); e.printStackTrace(); } return comments; } - + @Override public void setComment(final String world, final Plot plot, final PlotComment comment) { TaskManager.runTaskAsync(new Runnable() { @@ -1109,13 +1075,12 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set comment for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to set comment for plot " + plot.id); } } }); - } - + /** * @param plot * @param player @@ -1133,12 +1098,12 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to remove helper for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to remove helper for plot " + plot.id); } } }); } - + /** * @param plot * @param player @@ -1156,12 +1121,12 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to remove trusted user for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to remove trusted user for plot " + plot.id); } } }); } - + /** * @param plot * @param player @@ -1178,7 +1143,7 @@ public class SQLManager implements AbstractDB { statement.executeUpdate(); statement.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set helper for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to set helper for plot " + plot.id); e.printStackTrace(); } } @@ -1196,7 +1161,7 @@ public class SQLManager implements AbstractDB { statement.executeUpdate(); statement.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set helper for id " + id); + PlotSquared.log("&7[WARN] " + "Failed to set helper for id " + id); e.printStackTrace(); } } @@ -1219,13 +1184,13 @@ public class SQLManager implements AbstractDB { statement.executeUpdate(); statement.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set plot trusted for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to set plot trusted for plot " + plot.id); e.printStackTrace(); } } }); } - + /** * @param plot * @param player @@ -1243,12 +1208,12 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to remove denied for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to remove denied for plot " + plot.id); } } }); } - + /** * @param plot * @param player @@ -1265,35 +1230,36 @@ public class SQLManager implements AbstractDB { statement.executeUpdate(); statement.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set denied for plot " + plot.id); + PlotSquared.log("&7[WARN] " + "Failed to set denied for plot " + plot.id); e.printStackTrace(); } } }); } - + @Override public double getRatings(final Plot plot) { try { final PreparedStatement statement = this.connection.prepareStatement("SELECT AVG(`rating`) AS `rating` FROM `" + this.prefix + "plot_ratings` WHERE `plot_plot_id` = ? "); - statement.setInt(1, getId(plot.getWorld().getName(), plot.id)); + statement.setInt(1, getId(plot.world, plot.id)); final ResultSet set = statement.executeQuery(); double rating = 0; while (set.next()) { rating = set.getDouble("rating"); } statement.close(); + set.close(); return rating; } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to fetch rating for plot " + plot.getId().toString()); + PlotSquared.log("&7[WARN] " + "Failed to fetch rating for plot " + plot.getId().toString()); e.printStackTrace(); } return 0.0d; } - - @Override - public void delete(final PlotCluster cluster) { - ClusterManager.removeCluster(cluster); + + @Override + public void delete(final PlotCluster cluster) { + ClusterManager.removeCluster(cluster); TaskManager.runTaskAsync(new Runnable() { @Override public void run() { @@ -1316,15 +1282,15 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Failed to delete plot cluster: " + cluster.getP1() + ":" + cluster.getP2()); + PlotSquared.log("&c[ERROR] " + "Failed to delete plot cluster: " + cluster.getP1() + ":" + cluster.getP2()); } } }); - } - - @Override - public int getClusterId(String world, PlotClusterId id) { - PreparedStatement stmt = null; + } + + @Override + public int getClusterId(final String world, final PlotClusterId id) { + PreparedStatement stmt = null; try { stmt = this.connection.prepareStatement("SELECT `id` FROM `" + this.prefix + "cluster` WHERE `pos1_x` = ? AND `pos1_z` = ? AND `pos2_x` = ? AND `pos2_z` = ? AND `world` = ? ORDER BY `timestamp` ASC"); stmt.setInt(1, id.pos1.x); @@ -1335,30 +1301,29 @@ public class SQLManager implements AbstractDB { final ResultSet r = stmt.executeQuery(); int c_id = Integer.MAX_VALUE; while (r.next()) { - c_id = r.getInt("id"); + c_id = r.getInt("id"); } stmt.close(); + r.close(); return c_id; } catch (final SQLException e) { e.printStackTrace(); } return Integer.MAX_VALUE; - } - - @Override - public HashMap> getClusters() { - final LinkedHashMap> newClusters = new LinkedHashMap<>(); + } + + @Override + public HashMap> getClusters() { + final LinkedHashMap> newClusters = new LinkedHashMap<>(); final HashMap clusters = new HashMap<>(); Statement stmt = null; try { - Set worlds = new HashSet<>(); - if (PlotMain.config.contains("worlds")) { - worlds = PlotMain.config.getConfigurationSection("worlds").getKeys(false); + if (PlotSquared.config.contains("worlds")) { + worlds = PlotSquared.config.getConfigurationSection("worlds").getKeys(false); } final HashMap uuids = new HashMap(); final HashMap noExist = new HashMap(); - /* * Getting clusters */ @@ -1366,14 +1331,14 @@ public class SQLManager implements AbstractDB { ResultSet r = stmt.executeQuery("SELECT * FROM `" + this.prefix + "cluster`"); PlotId pos1; PlotId pos2; - PlotCluster cluster; + PlotCluster cluster; String owner; String worldname; UUID user; int id; while (r.next()) { - pos1 = new PlotId(r.getInt("pos1_x"), r.getInt("pos1_z")); - pos2 = new PlotId(r.getInt("pos2_x"), r.getInt("pos2_z")); + pos1 = new PlotId(r.getInt("pos1_x"), r.getInt("pos1_z")); + pos2 = new PlotId(r.getInt("pos2_x"), r.getInt("pos2_z")); id = r.getInt("id"); worldname = r.getString("world"); if (!worlds.contains(worldname)) { @@ -1392,7 +1357,6 @@ public class SQLManager implements AbstractDB { cluster = new PlotCluster(worldname, pos1, pos2, user); clusters.put(id, cluster); } - /* * Getting helpers */ @@ -1409,7 +1373,7 @@ public class SQLManager implements AbstractDB { if (cluster != null) { cluster.helpers.add(user); } else { - PlotMain.sendConsoleSenderMessage("&cCluster " + id + " in cluster_helpers does not exist. Please create the cluster or remove this entry."); + PlotSquared.log("&cCluster " + id + " in cluster_helpers does not exist. Please create the cluster or remove this entry."); } } /* @@ -1428,7 +1392,7 @@ public class SQLManager implements AbstractDB { if (cluster != null) { cluster.invited.add(user); } else { - PlotMain.sendConsoleSenderMessage("&cCluster " + id + " in cluster_invited does not exist. Please create the cluster or remove this entry."); + PlotSquared.log("&cCluster " + id + " in cluster_invited does not exist. Please create the cluster or remove this entry."); } } r = stmt.executeQuery("SELECT * FROM `" + this.prefix + "cluster_settings`"); @@ -1444,14 +1408,11 @@ public class SQLManager implements AbstractDB { } } } - final String alias = r.getString("alias"); if (alias != null) { cluster.settings.setAlias(alias); } - final String pos = r.getString("position"); - switch (pos.toLowerCase()) { case "": case "default": @@ -1460,11 +1421,11 @@ public class SQLManager implements AbstractDB { break; default: try { - String[] split = pos.split(","); - BlockLoc loc = new BlockLoc(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2])); + final String[] split = pos.split(","); + final BlockLoc loc = new BlockLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2])); cluster.settings.setPosition(loc); + } catch (final Exception e) { } - catch (Exception e) {} } final Integer m = r.getInt("merged"); if (m != null) { @@ -1474,19 +1435,17 @@ public class SQLManager implements AbstractDB { } cluster.settings.setMerged(merged); } else { - cluster.settings.setMerged(new boolean[]{false, false, false, false}); + cluster.settings.setMerged(new boolean[] { false, false, false, false }); } - String[] flags_string; final String myflags = r.getString("flags"); if (myflags == null) { - flags_string = new String[]{}; + flags_string = new String[] {}; } else { if (myflags.length() > 0) { flags_string = myflags.split(","); - } - else { - flags_string = new String[]{}; + } else { + flags_string = new String[] {}; } } final Set flags = new HashSet(); @@ -1495,8 +1454,8 @@ public class SQLManager implements AbstractDB { if (element.contains(":")) { final String[] split = element.split(":"); try { - String flag_str = split[1].replaceAll("\u00AF", ":").replaceAll("�", ","); - Flag flag = new Flag(FlagManager.getFlag(split[0], true), flag_str); + final String flag_str = split[1].replaceAll("\u00AF", ":").replaceAll("�", ","); + final Flag flag = new Flag(FlagManager.getFlag(split[0], true), flag_str); flags.add(flag); } catch (final Exception e) { e.printStackTrace(); @@ -1507,40 +1466,41 @@ public class SQLManager implements AbstractDB { } } if (exception) { - PlotMain.sendConsoleSenderMessage("&cPlot " + id + " had an invalid flag. A fix has been attempted."); + PlotSquared.log("&cPlot " + id + " had an invalid flag. A fix has been attempted."); setFlags(id, flags.toArray(new Flag[0])); } cluster.settings.flags = flags; } else { - PlotMain.sendConsoleSenderMessage("&cCluster " + id + " in cluster_settings does not exist. Please create the cluster or remove this entry."); + PlotSquared.log("&cCluster " + id + " in cluster_settings does not exist. Please create the cluster or remove this entry."); } } stmt.close(); + r.close(); for (final PlotCluster c : clusters.values()) { final String world = c.world; if (!newClusters.containsKey(world)) { - newClusters.put(world, new HashSet()); + newClusters.put(world, new HashSet()); } newClusters.get(world).add(c); } boolean invalidPlot = false; for (final String w : noExist.keySet()) { invalidPlot = true; - PlotMain.sendConsoleSenderMessage("&c[WARNING] Found " + noExist.get(w) + " clusters in DB for non existant world; '" + w + "'."); + PlotSquared.log("&c[WARNING] Found " + noExist.get(w) + " clusters in DB for non existant world; '" + w + "'."); } if (invalidPlot) { - PlotMain.sendConsoleSenderMessage("&c[WARNING] - Please create the world/s or remove the clusters using the purge command"); + PlotSquared.log("&c[WARNING] - Please create the world/s or remove the clusters using the purge command"); } } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to load clusters."); + PlotSquared.log("&7[WARN] " + "Failed to load clusters."); e.printStackTrace(); } return newClusters; - } - - @Override - public void setFlags(final PlotCluster cluster, Set flags) { - final StringBuilder flag_string = new StringBuilder(); + } + + @Override + public void setFlags(final PlotCluster cluster, final Set flags) { + final StringBuilder flag_string = new StringBuilder(); int i = 0; for (final Flag flag : flags) { if (i != 0) { @@ -1560,16 +1520,15 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Could not set flag for plot " + cluster); + PlotSquared.log("&7[WARN] " + "Could not set flag for plot " + cluster); } } }); - - } - - @Override - public void setClusterName(final PlotCluster cluster, final String name) { - cluster.settings.setAlias(name); + } + + @Override + public void setClusterName(final PlotCluster cluster, final String name) { + cluster.settings.setAlias(name); TaskManager.runTaskAsync(new Runnable() { @Override public void run() { @@ -1581,17 +1540,16 @@ public class SQLManager implements AbstractDB { stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set alias for cluster " + cluster); + PlotSquared.log("&7[WARN] " + "Failed to set alias for cluster " + cluster); e.printStackTrace(); } - } }); - } - - @Override - public void removeHelper(final PlotCluster cluster, final UUID uuid) { - TaskManager.runTaskAsync(new Runnable() { + } + + @Override + public void removeHelper(final PlotCluster cluster, final UUID uuid) { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { try { @@ -1602,15 +1560,15 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to remove helper for cluster " + cluster); + PlotSquared.log("&7[WARN] " + "Failed to remove helper for cluster " + cluster); } } }); - } - - @Override - public void setHelper(final PlotCluster cluster, final UUID uuid) { - TaskManager.runTaskAsync(new Runnable() { + } + + @Override + public void setHelper(final PlotCluster cluster, final UUID uuid) { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { try { @@ -1620,16 +1578,16 @@ public class SQLManager implements AbstractDB { statement.executeUpdate(); statement.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set helper for cluster " + cluster); + PlotSquared.log("&7[WARN] " + "Failed to set helper for cluster " + cluster); e.printStackTrace(); } } }); - } - - @Override - public void createCluster(final PlotCluster cluster) { - TaskManager.runTaskAsync(new Runnable() { + } + + @Override + public void createCluster(final PlotCluster cluster) { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { PreparedStatement stmt = null; @@ -1643,8 +1601,7 @@ public class SQLManager implements AbstractDB { stmt.setString(6, cluster.world); stmt.executeUpdate(); stmt.close(); - - int id = getClusterId(cluster.world, ClusterManager.getClusterId(cluster)); + final int id = getClusterId(cluster.world, ClusterManager.getClusterId(cluster)); stmt = SQLManager.this.connection.prepareStatement("INSERT INTO `" + SQLManager.this.prefix + "cluster_settings`(`cluster_id`, `alias`) VALUES(?, ?" + ")"); stmt.setInt(1, id); stmt.setString(2, cluster.settings.getAlias()); @@ -1652,19 +1609,19 @@ public class SQLManager implements AbstractDB { stmt.close(); } catch (final Exception e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&c[ERROR] "+"Failed to save cluster " + cluster); + PlotSquared.log("&c[ERROR] " + "Failed to save cluster " + cluster); } } }); - } - - @Override - public void resizeCluster(final PlotCluster current, final PlotClusterId resize) { - final PlotId pos1 = new PlotId(current.getP1().x, current.getP1().y); - final PlotId pos2 = new PlotId(current.getP2().x, current.getP2().y); - current.setP1(resize.pos1); - current.setP2(resize.pos2); - TaskManager.runTaskAsync(new Runnable() { + } + + @Override + public void resizeCluster(final PlotCluster current, final PlotClusterId resize) { + final PlotId pos1 = new PlotId(current.getP1().x, current.getP1().y); + final PlotId pos2 = new PlotId(current.getP2().x, current.getP2().y); + current.setP1(resize.pos1); + current.setP2(resize.pos2); + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { PreparedStatement stmt = null; @@ -1678,16 +1635,16 @@ public class SQLManager implements AbstractDB { stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to rezize cluster " + current); + PlotSquared.log("&7[WARN] " + "Failed to rezize cluster " + current); e.printStackTrace(); } } - }); - } - - @Override - public void setPosition(final PlotCluster cluster, final String position) { - TaskManager.runTaskAsync(new Runnable() { + }); + } + + @Override + public void setPosition(final PlotCluster cluster, final String position) { + TaskManager.runTaskAsync(new Runnable() { @Override public void run() { PreparedStatement stmt = null; @@ -1698,16 +1655,16 @@ public class SQLManager implements AbstractDB { stmt.executeUpdate(); stmt.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set position for cluster " + cluster); + PlotSquared.log("&7[WARN] " + "Failed to set position for cluster " + cluster); e.printStackTrace(); } } }); - } - - @Override - public HashMap getClusterSettings(int id) { - final HashMap h = new HashMap(); + } + + @Override + public HashMap getClusterSettings(final int id) { + final HashMap h = new HashMap(); PreparedStatement stmt = null; try { stmt = this.connection.prepareStatement("SELECT * FROM `" + this.prefix + "cluster_settings` WHERE `cluster_id` = ?"); @@ -1745,13 +1702,14 @@ public class SQLManager implements AbstractDB { h.put(var, val); } stmt.close(); + r.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to load settings for cluster: " + id); + PlotSquared.log("&7[WARN] " + "Failed to load settings for cluster: " + id); e.printStackTrace(); } return h; - } - + } + @Override public void removeInvited(final PlotCluster cluster, final UUID uuid) { TaskManager.runTaskAsync(new Runnable() { @@ -1765,15 +1723,14 @@ public class SQLManager implements AbstractDB { statement.close(); } catch (final SQLException e) { e.printStackTrace(); - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to remove invited for cluster " + cluster); + PlotSquared.log("&7[WARN] " + "Failed to remove invited for cluster " + cluster); } } }); - } - + @Override - public void setInvited(String world, final PlotCluster cluster, final UUID uuid) { + public void setInvited(final String world, final PlotCluster cluster, final UUID uuid) { TaskManager.runTaskAsync(new Runnable() { @Override public void run() { @@ -1784,7 +1741,7 @@ public class SQLManager implements AbstractDB { statement.executeUpdate(); statement.close(); } catch (final SQLException e) { - PlotMain.sendConsoleSenderMessage("&7[WARN] "+"Failed to set helper for cluster " + cluster); + PlotSquared.log("&7[WARN] " + "Failed to set helper for cluster " + cluster); e.printStackTrace(); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLite.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLite.java index d029259b5..4c7ddde40 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLite.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLite.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.database; import java.io.File; @@ -28,9 +27,8 @@ import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.logging.Level; -import org.bukkit.plugin.Plugin; +import com.intellectualcrafters.plot.PlotSquared; /** * Connects to and uses a SQLite database @@ -39,52 +37,51 @@ import org.bukkit.plugin.Plugin; * @author tips48 */ public class SQLite extends Database { - private final String dbLocation; private Connection connection; - + /** * Creates a new SQLite instance * * @param plugin Plugin instance * @param dbLocation Location of the Database (Must end in .db) */ - public SQLite(final Plugin plugin, final String dbLocation) { - super(plugin); + public SQLite(final PlotSquared plotsquared, final String dbLocation) { + super(plotsquared); this.dbLocation = dbLocation; } - + @Override public Connection openConnection() throws SQLException, ClassNotFoundException { if (checkConnection()) { return this.connection; } - if (!this.plugin.getDataFolder().exists()) { - this.plugin.getDataFolder().mkdirs(); + if (!PlotSquared.IMP.getDirectory().exists()) { + PlotSquared.IMP.getDirectory().mkdirs(); } final File file = new File(this.dbLocation); if (!(file.exists())) { try { file.createNewFile(); } catch (final IOException e) { - this.plugin.getLogger().log(Level.SEVERE, "Unable to create database!"); + PlotSquared.log("&cUnable to create database!"); } } Class.forName("org.sqlite.JDBC"); this.connection = DriverManager.getConnection("jdbc:sqlite:" + this.dbLocation); return this.connection; } - + @Override public boolean checkConnection() throws SQLException { return (this.connection != null) && !this.connection.isClosed(); } - + @Override public Connection getConnection() { return this.connection; } - + @Override public boolean closeConnection() throws SQLException { if (this.connection == null) { @@ -93,26 +90,22 @@ public class SQLite extends Database { this.connection.close(); return true; } - + @Override public ResultSet querySQL(final String query) throws SQLException, ClassNotFoundException { if (checkConnection()) { openConnection(); } - final Statement statement = this.connection.createStatement(); - return statement.executeQuery(query); } - + @Override public int updateSQL(final String query) throws SQLException, ClassNotFoundException { if (checkConnection()) { openConnection(); } - final Statement statement = this.connection.createStatement(); - return statement.executeUpdate(query); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerClaimPlotEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerClaimPlotEvent.java index 5939a8dab..548d28d1a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerClaimPlotEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerClaimPlotEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.entity.Player; @@ -32,12 +31,13 @@ import com.intellectualcrafters.plot.object.Plot; * @author Citymonstret * @author Empire92 */ -@SuppressWarnings("unused") public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable { +@SuppressWarnings("unused") +public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable { private static HandlerList handlers = new HandlerList(); private final Plot plot; private final boolean auto; private boolean cancelled; - + /** * PlayerClaimPlotEvent: Called when a plot is claimed * @@ -49,11 +49,11 @@ import com.intellectualcrafters.plot.object.Plot; this.plot = plot; this.auto = auto; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plot involved * @@ -62,24 +62,24 @@ import com.intellectualcrafters.plot.object.Plot; public Plot getPlot() { return this.plot; } - + /** * @return true if it was an automated claim, else false */ public boolean wasAuto() { return this.auto; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerEnterPlotEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerEnterPlotEvent.java index 6174a8812..cfb8ad5ea 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerEnterPlotEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerEnterPlotEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.entity.Player; @@ -32,11 +31,9 @@ import com.intellectualcrafters.plot.object.Plot; * @author Empire92 */ public class PlayerEnterPlotEvent extends PlayerEvent { - private static HandlerList handlers = new HandlerList(); - private final Plot plot; - + /** * PlayerEnterPlotEvent: Called when a player leaves a plot * @@ -47,11 +44,11 @@ public class PlayerEnterPlotEvent extends PlayerEvent { super(player); this.plot = plot; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plot involved * @@ -60,10 +57,9 @@ public class PlayerEnterPlotEvent extends PlayerEvent { public Plot getPlot() { return this.plot; } - + @Override public HandlerList getHandlers() { return handlers; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerLeavePlotEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerLeavePlotEvent.java index 6ae951dbf..21d217f46 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerLeavePlotEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerLeavePlotEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.entity.Player; @@ -33,9 +32,8 @@ import com.intellectualcrafters.plot.object.Plot; */ public class PlayerLeavePlotEvent extends PlayerEvent { private static HandlerList handlers = new HandlerList(); - private final Plot plot; - + /** * PlayerLeavePlotEvent: Called when a player leaves a plot * @@ -46,11 +44,11 @@ public class PlayerLeavePlotEvent extends PlayerEvent { super(player); this.plot = plot; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plot involved * @@ -59,7 +57,7 @@ public class PlayerLeavePlotEvent extends PlayerEvent { public Plot getPlot() { return this.plot; } - + @Override public HandlerList getHandlers() { return handlers; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotDeniedEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotDeniedEvent.java index 5c751aeb0..35703c2cd 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotDeniedEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotDeniedEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import java.util.UUID; @@ -35,12 +34,11 @@ import com.intellectualcrafters.plot.object.Plot; */ public class PlayerPlotDeniedEvent extends Event { private static HandlerList handlers = new HandlerList(); - private final Plot plot; private final Player initiator; private final boolean added; private final UUID player; - + /** * PlayerPlotDeniedEvent: Called when the denied UUID list is modified for a plot * @@ -55,11 +53,11 @@ public class PlayerPlotDeniedEvent extends Event { this.added = added; this.player = player; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * If a user was added * @@ -68,7 +66,7 @@ public class PlayerPlotDeniedEvent extends Event { public boolean wasAdded() { return this.added; } - + /** * The player added/removed * @@ -77,7 +75,7 @@ public class PlayerPlotDeniedEvent extends Event { public UUID getPlayer() { return this.player; } - + /** * The plot involved * @@ -86,7 +84,7 @@ public class PlayerPlotDeniedEvent extends Event { public Plot getPlot() { return this.plot; } - + /** * The player initiating the action * @@ -95,7 +93,7 @@ public class PlayerPlotDeniedEvent extends Event { public Player getInitiator() { return this.initiator; } - + @Override public HandlerList getHandlers() { return handlers; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotHelperEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotHelperEvent.java index d9378c3c9..e802e8123 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotHelperEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotHelperEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import java.util.UUID; @@ -35,12 +34,11 @@ import com.intellectualcrafters.plot.object.Plot; */ public class PlayerPlotHelperEvent extends Event { private static HandlerList handlers = new HandlerList(); - private final Plot plot; private final Player initiator; private final boolean added; private final UUID player; - + /** * PlayerPlotHelperEvent: Called when a plot helper is added/removed * @@ -55,11 +53,11 @@ public class PlayerPlotHelperEvent extends Event { this.added = added; this.player = player; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * If a player was added * @@ -68,7 +66,7 @@ public class PlayerPlotHelperEvent extends Event { public boolean wasAdded() { return this.added; } - + /** * The UUID added/removed * @@ -77,7 +75,7 @@ public class PlayerPlotHelperEvent extends Event { public UUID getPlayer() { return this.player; } - + /** * The plot involved * @@ -86,7 +84,7 @@ public class PlayerPlotHelperEvent extends Event { public Plot getPlot() { return this.plot; } - + /** * The player initiating the action * @@ -95,7 +93,7 @@ public class PlayerPlotHelperEvent extends Event { public Player getInitiator() { return this.initiator; } - + @Override public HandlerList getHandlers() { return handlers; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotTrustedEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotTrustedEvent.java index 6989b8e45..95333f704 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotTrustedEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerPlotTrustedEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import java.util.UUID; @@ -35,12 +34,11 @@ import com.intellectualcrafters.plot.object.Plot; */ public class PlayerPlotTrustedEvent extends Event { private static HandlerList handlers = new HandlerList(); - private final Plot plot; private final Player initiator; private final boolean added; private final UUID player; - + /** * PlayerPlotTrustedEvent: Called when a plot trusted user is added/removed * @@ -55,11 +53,11 @@ public class PlayerPlotTrustedEvent extends Event { this.added = added; this.player = player; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * If a player was added * @@ -68,7 +66,7 @@ public class PlayerPlotTrustedEvent extends Event { public boolean wasAdded() { return this.added; } - + /** * The UUID added/removed * @@ -77,7 +75,7 @@ public class PlayerPlotTrustedEvent extends Event { public UUID getPlayer() { return this.player; } - + /** * The plot involved * @@ -86,7 +84,7 @@ public class PlayerPlotTrustedEvent extends Event { public Plot getPlot() { return this.plot; } - + /** * The player initiating the action * @@ -95,7 +93,7 @@ public class PlayerPlotTrustedEvent extends Event { public Player getInitiator() { return this.initiator; } - + @Override public HandlerList getHandlers() { return handlers; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerTeleportToPlotEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerTeleportToPlotEvent.java index e3a2ae9a5..45af3054e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerTeleportToPlotEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlayerTeleportToPlotEvent.java @@ -18,15 +18,14 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; -import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; /** @@ -37,12 +36,10 @@ import com.intellectualcrafters.plot.object.Plot; */ public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); - private final Location from; private final Plot plot; - private boolean cancelled; - + /** * PlayerTeleportToPlotEvent: Called when a player teleports to a plot * @@ -55,16 +52,16 @@ public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellabl this.from = from; this.plot = plot; } - + public static HandlerList getHandlerList() { return handlers; } - + @Override public HandlerList getHandlers() { return handlers; } - + /** * Get the from location * @@ -73,7 +70,7 @@ public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellabl public Location getFrom() { return this.from; } - + /** * Get the plot involved * @@ -82,12 +79,12 @@ public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellabl public Plot getPlot() { return this.plot; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean cancelled) { this.cancelled = cancelled; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotClearEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotClearEvent.java index 7b238c46a..76d55fb20 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotClearEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotClearEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.event.Cancellable; @@ -38,7 +37,7 @@ public class PlotClearEvent extends Event implements Cancellable { private final PlotId id; private final String world; private boolean cancelled; - + /** * PlotDeleteEvent: Called when a plot is cleared * @@ -49,11 +48,11 @@ public class PlotClearEvent extends Event implements Cancellable { this.id = id; this.world = world; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the PlotId * @@ -62,7 +61,7 @@ public class PlotClearEvent extends Event implements Cancellable { public PlotId getPlotId() { return this.id; } - + /** * Get the world name * @@ -71,17 +70,17 @@ public class PlotClearEvent extends Event implements Cancellable { public String getWorld() { return this.world; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotDeleteEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotDeleteEvent.java index 5e17845be..9d6c1c067 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotDeleteEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotDeleteEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.event.Cancellable; @@ -38,7 +37,7 @@ public class PlotDeleteEvent extends Event implements Cancellable { private final PlotId id; private final String world; private boolean cancelled; - + /** * PlotDeleteEvent: Called when a plot is deleted * @@ -49,11 +48,11 @@ public class PlotDeleteEvent extends Event implements Cancellable { this.id = id; this.world = world; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the PlotId * @@ -62,7 +61,7 @@ public class PlotDeleteEvent extends Event implements Cancellable { public PlotId getPlotId() { return this.id; } - + /** * Get the world name * @@ -71,17 +70,17 @@ public class PlotDeleteEvent extends Event implements Cancellable { public String getWorld() { return this.world; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagAddEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagAddEvent.java index 3e5234cf0..35035e3f5 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagAddEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagAddEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.event.Cancellable; @@ -39,7 +38,7 @@ public class PlotFlagAddEvent extends Event implements Cancellable { private final Plot plot; private final Flag flag; private boolean cancelled; - + /** * PlotFlagAddEvent: Called when a Flag is added to a plot * @@ -50,11 +49,11 @@ public class PlotFlagAddEvent extends Event implements Cancellable { this.plot = plot; this.flag = flag; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plot involved * @@ -63,7 +62,7 @@ public class PlotFlagAddEvent extends Event implements Cancellable { public Plot getPlot() { return this.plot; } - + /** * Get the flag involved * @@ -72,17 +71,17 @@ public class PlotFlagAddEvent extends Event implements Cancellable { public Flag getFlag() { return this.flag; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagRemoveEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagRemoveEvent.java index 3272fad58..5a0e5b22e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagRemoveEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotFlagRemoveEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import org.bukkit.event.Cancellable; @@ -39,7 +38,7 @@ public class PlotFlagRemoveEvent extends Event implements Cancellable { private final Plot plot; private final Flag flag; private boolean cancelled; - + /** * PlotFlagRemoveEvent: Called when a flag is removed from a plot * @@ -50,11 +49,11 @@ public class PlotFlagRemoveEvent extends Event implements Cancellable { this.plot = plot; this.flag = flag; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plot involved * @@ -63,7 +62,7 @@ public class PlotFlagRemoveEvent extends Event implements Cancellable { public Plot getPlot() { return this.plot; } - + /** * Get the flag involved * @@ -72,17 +71,17 @@ public class PlotFlagRemoveEvent extends Event implements Cancellable { public Flag getFlag() { return this.flag; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotMergeEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotMergeEvent.java index d810c5c73..61654ffbc 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotMergeEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotMergeEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import java.util.ArrayList; @@ -40,7 +39,7 @@ public class PlotMergeEvent extends Event implements Cancellable { private boolean cancelled; private Plot plot; private World world; - + /** * PlotMergeEvent: Called when plots are merged * @@ -51,11 +50,11 @@ public class PlotMergeEvent extends Event implements Cancellable { public PlotMergeEvent(final World world, final Plot plot, final ArrayList plots) { this.plots = plots; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plots being added; * @@ -64,7 +63,7 @@ public class PlotMergeEvent extends Event implements Cancellable { public ArrayList getPlots() { return this.plots; } - + /** * Get the main plot * @@ -73,21 +72,21 @@ public class PlotMergeEvent extends Event implements Cancellable { public Plot getPlot() { return this.plot; } - + public World getWorld() { return this.world; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotUnlinkEvent.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotUnlinkEvent.java index 6d03c61d5..8de7ab3a2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotUnlinkEvent.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/events/PlotUnlinkEvent.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.events; import java.util.ArrayList; @@ -38,7 +37,7 @@ public class PlotUnlinkEvent extends Event implements Cancellable { private final ArrayList plots; private final World world; private boolean cancelled; - + /** * Called when a mega-plot is unlinked. * @@ -49,11 +48,11 @@ public class PlotUnlinkEvent extends Event implements Cancellable { this.plots = plots; this.world = world; } - + public static HandlerList getHandlerList() { return handlers; } - + /** * Get the plots involved * @@ -62,21 +61,21 @@ public class PlotUnlinkEvent extends Event implements Cancellable { public ArrayList getPlots() { return this.plots; } - + public World getWorld() { return this.world; } - + @Override public HandlerList getHandlers() { return handlers; } - + @Override public boolean isCancelled() { return this.cancelled; } - + @Override public void setCancelled(final boolean b) { this.cancelled = b; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/AbstractFlag.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/AbstractFlag.java index 3bf3dd4e3..e35d2ec98 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/AbstractFlag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/AbstractFlag.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.flag; import org.apache.commons.lang.StringUtils; @@ -30,13 +29,13 @@ import org.apache.commons.lang.StringUtils; * @author Empire92 */ public class AbstractFlag { - public final String key; public final FlagValue value; - + public AbstractFlag(final String key) { this(key, new FlagValue.StringValue()); } + /** * AbstractFlag is a parameter used in creating a new Flag
* The key must be alphabetical characters and <= 16 characters in length @@ -60,12 +59,11 @@ public class AbstractFlag { public boolean isList() { return this.value instanceof FlagValue.ListValue; } - + public Object parseValueRaw(final String value) { try { return this.value.parse(value); - } - catch (Exception e) { + } catch (final Exception e) { return null; } } @@ -77,7 +75,7 @@ public class AbstractFlag { public String getValueDesc() { return this.value.getDescription(); } - + /** * AbstractFlag key * @@ -86,12 +84,12 @@ public class AbstractFlag { public String getKey() { return this.key; } - + @Override public String toString() { return this.key; } - + @Override public boolean equals(final Object other) { if (other == null) { @@ -106,5 +104,4 @@ public class AbstractFlag { final AbstractFlag otherObj = (AbstractFlag) other; return (otherObj.key.equals(this.key)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/Flag.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/Flag.java index 034a76373..9db2081bf 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/Flag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/Flag.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.flag; import org.apache.commons.lang.StringUtils; @@ -26,7 +25,7 @@ import org.apache.commons.lang.StringUtils; public class Flag { private AbstractFlag key; private Object value; - + /** * Flag object used to store basic information for a Plot. Flags are a key/value pair. For a flag to be usable by a * player, you need to register it with PlotSquared. @@ -37,7 +36,7 @@ public class Flag { * @throws IllegalArgumentException if you provide inadequate inputs */ public Flag(final AbstractFlag key, final String value) { - final char[] allowedCharacters = new char[]{'[', ']', '(', ')', ',', '_', '-', '.', ',', '?', '!', '&', ':', '\u00A7'}; + final char[] allowedCharacters = new char[] { '[', ']', '(', ')', ',', '_', '-', '.', ',', '?', '!', '&', ':', '\u00A7' }; String tempValue = value; for (final char c : allowedCharacters) { tempValue = tempValue.replace(c, 'c'); @@ -55,21 +54,21 @@ public class Flag { } } - public void setKey(AbstractFlag key) { + public void setKey(final AbstractFlag key) { this.key = key; if (this.value instanceof String) { this.value = key.parseValueRaw((String) this.value); } } - + /** * Warning: Unchecked */ public Flag(final AbstractFlag key, final Object value) { - this.key = key; - this.value = value; + this.key = key; + this.value = value; } - + /** * Get the AbstractFlag used in creating the flag * @@ -78,7 +77,7 @@ public class Flag { public AbstractFlag getAbstractFlag() { return this.key; } - + /** * Get the key for the AbstractFlag * @@ -87,7 +86,7 @@ public class Flag { public String getKey() { return this.key.getKey(); } - + /** * Get the value * @@ -98,9 +97,9 @@ public class Flag { } public String getValueString() { - return this.key.toString(this.value); + return this.key.toString(this.value); } - + @Override public String toString() { if (this.value.equals("")) { @@ -108,7 +107,7 @@ public class Flag { } return this.key + ":" + getValueString(); } - + @Override public boolean equals(final Object obj) { if (this == obj) { @@ -123,7 +122,7 @@ public class Flag { final Flag other = (Flag) obj; return (this.key.getKey().equals(other.key.getKey()) && this.value.equals(other.value)); } - + @Override public int hashCode() { return this.key.getKey().hashCode(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java index 7c54c5bc5..1e10f15a3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagManager.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.flag; import java.util.ArrayList; @@ -27,16 +26,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.events.PlotFlagAddEvent; -import com.intellectualcrafters.plot.events.PlotFlagRemoveEvent; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotCluster; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotSettings; import com.intellectualcrafters.plot.object.PlotWorld; @@ -46,15 +41,14 @@ import com.intellectualcrafters.plot.object.PlotWorld; * @author Citymonstret * @author Empire92 */ -@SuppressWarnings("unused") public class FlagManager { - +@SuppressWarnings("unused") +public class FlagManager { // TODO add some flags // - Plot clear interval // - Mob cap // - customized plot composition - private final static ArrayList flags = new ArrayList<>(); - + /** * Register an AbstractFlag with PlotSquared * @@ -63,11 +57,11 @@ import com.intellectualcrafters.plot.object.PlotWorld; * @return success? */ public static boolean addFlag(final AbstractFlag af) { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&8 - Adding flag: &7" + af); - String key = af.getKey(); - if (PlotMain.getAllPlotsRaw() != null) { - for (Plot plot : PlotMain.getPlots()) { - for (Flag flag : plot.settings.flags) { + PlotSquared.log(C.PREFIX.s() + "&8 - Adding flag: &7" + af); + af.getKey(); + if (PlotSquared.getAllPlotsRaw() != null) { + for (final Plot plot : PlotSquared.getPlots()) { + for (final Flag flag : plot.settings.flags) { if (flag.getAbstractFlag().getKey().equals(af.getKey())) { flag.setKey(af); } @@ -76,14 +70,14 @@ import com.intellectualcrafters.plot.object.PlotWorld; } return (getFlag(af.getKey()) == null) && flags.add(af); } - - public static Flag getSettingFlag(String world, PlotSettings settings, String flag) { - ArrayList flags = new ArrayList<>(); - if (settings.flags != null && settings.flags.size() > 0) { - flags.addAll(settings.flags); + + public static Flag getSettingFlag(final String world, final PlotSettings settings, final String flag) { + final ArrayList flags = new ArrayList<>(); + if ((settings.flags != null) && (settings.flags.size() > 0)) { + flags.addAll(settings.flags); } - PlotWorld plotworld = PlotMain.getWorldSettings(world); - if (plotworld != null && plotworld.DEFAULT_FLAGS != null && plotworld.DEFAULT_FLAGS.length > 0) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if ((plotworld != null) && (plotworld.DEFAULT_FLAGS != null) && (plotworld.DEFAULT_FLAGS.length > 0)) { flags.addAll(Arrays.asList(plotworld.DEFAULT_FLAGS)); } for (final Flag myflag : flags) { @@ -100,19 +94,19 @@ import com.intellectualcrafters.plot.object.PlotWorld; * @param flag * @return */ - public static Flag getPlotFlag(Plot plot, String flag) { + public static Flag getPlotFlag(final Plot plot, final String flag) { return getSettingFlag(plot.world, plot.settings, flag); } - public static boolean isPlotFlagTrue(Plot plot, String strFlag) { - Flag flag = getPlotFlag(plot, strFlag); - if (flag == null) { - return false; - } - if (flag.getValue() instanceof Boolean) { - return (boolean) flag.getValue(); - } - return false; + public static boolean isPlotFlagTrue(final Plot plot, final String strFlag) { + final Flag flag = getPlotFlag(plot, strFlag); + if (flag == null) { + return false; + } + if (flag.getValue() instanceof Boolean) { + return (boolean) flag.getValue(); + } + return false; } /** @@ -121,13 +115,13 @@ import com.intellectualcrafters.plot.object.PlotWorld; * @param flag * @return */ - public static Flag getPlotFlagAbs(Plot plot, String flag) { - return getSettingFlagAbs(plot.settings, flag); + public static Flag getPlotFlagAbs(final Plot plot, final String flag) { + return getSettingFlagAbs(plot.settings, flag); } - public static Flag getSettingFlagAbs(PlotSettings settings, String flag) { - if (settings.flags == null || settings.flags.size() == 0) { - return null; + public static Flag getSettingFlagAbs(final PlotSettings settings, final String flag) { + if ((settings.flags == null) || (settings.flags.size() == 0)) { + return null; } for (final Flag myflag : settings.flags) { if (myflag.getKey().equals(flag)) { @@ -142,12 +136,8 @@ import com.intellectualcrafters.plot.object.PlotWorld; * @param plot * @param flag */ - public static boolean addPlotFlag(Plot plot, final Flag flag) { - final PlotFlagAddEvent event = new PlotFlagAddEvent(flag, plot); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - return false; - } + public static boolean addPlotFlag(final Plot plot, final Flag flag) { + // FIXME PlotFlagAddEvent final Flag hasFlag = getPlotFlag(plot, flag.getKey()); if (hasFlag != null) { plot.settings.flags.remove(hasFlag); @@ -157,8 +147,8 @@ import com.intellectualcrafters.plot.object.PlotWorld; return true; } - public static boolean addClusterFlag(PlotCluster cluster, final Flag flag) { - //TODO plot cluster flag event + public static boolean addClusterFlag(final PlotCluster cluster, final Flag flag) { + //TODO plot cluster flag event final Flag hasFlag = getSettingFlag(cluster.world, cluster.settings, flag.getKey()); if (hasFlag != null) { cluster.settings.flags.remove(hasFlag); @@ -169,23 +159,23 @@ import com.intellectualcrafters.plot.object.PlotWorld; } /** - * + * * @param plot * @return */ - public static Set getPlotFlags(Plot plot) { + public static Set getPlotFlags(final Plot plot) { return getSettingFlags(plot.world, plot.settings); } - public static Set getSettingFlags(String world, PlotSettings settings) { - Set plotflags = settings.flags; - PlotWorld plotworld = PlotMain.getWorldSettings(world); - if (plotworld != null && plotworld.DEFAULT_FLAGS != null && plotworld.DEFAULT_FLAGS.length > 0) { - HashSet flagStrings = new HashSet<>(); - for (Flag flag : plotflags) { + public static Set getSettingFlags(final String world, final PlotSettings settings) { + final Set plotflags = settings.flags; + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if ((plotworld != null) && (plotworld.DEFAULT_FLAGS != null) && (plotworld.DEFAULT_FLAGS.length > 0)) { + final HashSet flagStrings = new HashSet<>(); + for (final Flag flag : plotflags) { flagStrings.add(flag.getKey()); } - for (Flag newflag : plotworld.DEFAULT_FLAGS) { + for (final Flag newflag : plotworld.DEFAULT_FLAGS) { if (!flagStrings.contains(newflag.getKey())) { plotflags.add(newflag); } @@ -194,16 +184,12 @@ import com.intellectualcrafters.plot.object.PlotWorld; return plotflags; } - public static boolean removePlotFlag(Plot plot, String flag) { + public static boolean removePlotFlag(final Plot plot, final String flag) { final Flag hasFlag = getPlotFlag(plot, flag); if (hasFlag != null) { - Flag flagObj = FlagManager.getPlotFlagAbs(plot, flag); + final Flag flagObj = FlagManager.getPlotFlagAbs(plot, flag); if (flagObj != null) { - final PlotFlagRemoveEvent event = new PlotFlagRemoveEvent(flagObj, plot); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - return false; - } + // FIXME PlotFlagRemoveEvent plot.settings.flags.remove(hasFlag); DBFunc.setFlags(plot.world, plot, plot.settings.flags); return true; @@ -212,12 +198,12 @@ import com.intellectualcrafters.plot.object.PlotWorld; return false; } - public static boolean removeClusterFlag(PlotCluster cluster, String flag) { + public static boolean removeClusterFlag(final PlotCluster cluster, final String flag) { final Flag hasFlag = getSettingFlag(cluster.world, cluster.settings, flag); if (hasFlag != null) { - Flag flagObj = FlagManager.getSettingFlagAbs(cluster.settings, flag); + final Flag flagObj = FlagManager.getSettingFlagAbs(cluster.settings, flag); if (flagObj != null) { - //TODO cluster flag add event + //TODO cluster flag add event cluster.settings.flags.remove(hasFlag); DBFunc.setFlags(cluster, cluster.settings.flags); return true; @@ -225,8 +211,8 @@ import com.intellectualcrafters.plot.object.PlotWorld; } return false; } - - public static void setPlotFlags(Plot plot, Set flags) { + + public static void setPlotFlags(final Plot plot, final Set flags) { if (flags == null) { plot.settings.flags = new HashSet<>(); DBFunc.setFlags(plot.world, plot, plot.settings.flags); @@ -236,7 +222,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; DBFunc.setFlags(plot.world, plot, plot.settings.flags); } - public static void setClusterFlags(PlotCluster cluster, Set flags) { + public static void setClusterFlags(final PlotCluster cluster, final Set flags) { if (flags == null) { cluster.settings.flags = new HashSet<>(); DBFunc.setFlags(cluster, cluster.settings.flags); @@ -245,7 +231,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; cluster.settings.flags = flags; DBFunc.setFlags(cluster, cluster.settings.flags); } - + public static Flag[] removeFlag(final Flag[] flags, final String r) { final Flag[] f = new Flag[flags.length - 1]; int index = 0; @@ -256,10 +242,9 @@ import com.intellectualcrafters.plot.object.PlotWorld; } return f; } - + public static Set removeFlag(final Set flags, final String r) { final HashSet newflags = new HashSet<>(); - int index = 0; for (final Flag flag : flags) { if (!flag.getKey().equalsIgnoreCase(r)) { newflags.add(flag); @@ -276,7 +261,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; public static List getFlags() { return flags; } - + /** * Get a list of registerd AbstragFlag objects based on player permissions * @@ -284,7 +269,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; * * @return List (AbstractFlag) */ - public static List getFlags(final Player player) { + public static List getFlags(final PlotPlayer player) { final List returnFlags = new ArrayList<>(); for (final AbstractFlag flag : flags) { if (player.hasPermission("plots.set.flag." + flag.getKey().toLowerCase())) { @@ -293,7 +278,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; } return returnFlags; } - + /** * Get an AbstractFlag by a string Returns null if flag does not exist * @@ -309,7 +294,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; } return null; } - + /** * Get an AbstractFlag by a string * @@ -326,7 +311,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; } return getFlag(string); } - + /** * Remove a registered AbstractFlag * @@ -337,7 +322,7 @@ import com.intellectualcrafters.plot.object.PlotWorld; public static boolean removeFlag(final AbstractFlag flag) { return flags.remove(flag); } - + public static Flag[] parseFlags(final List flagstrings) { final Flag[] flags = new Flag[flagstrings.size()]; for (int i = 0; i < flagstrings.size(); i++) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagValue.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagValue.java index 6218f24a5..5166a68ea 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagValue.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/flag/FlagValue.java @@ -12,97 +12,91 @@ import com.intellectualcrafters.plot.object.PlotBlock; * @author Citymonstret */ public abstract class FlagValue { - private final Class clazz; - + @SuppressWarnings("unchecked") - public FlagValue() { + public FlagValue() { this.clazz = (Class) getClass(); } - + public FlagValue(final Class clazz) { if (clazz == null) { throw new NullPointerException(); } this.clazz = clazz; } - + public boolean validValue(final Object value) { return (value != null) && (value.getClass() == this.clazz); } - public String toString(Object t) { - return t.toString(); + public String toString(final Object t) { + return t.toString(); } - + public abstract T getValue(Object t); - + public abstract T parse(String t); - + public abstract String getDescription(); - + public static class BooleanValue extends FlagValue { - @Override public Boolean getValue(final Object t) { return (Boolean) t; } - + @Override public Boolean parse(final String t) { - try { - return Boolean.parseBoolean(t); - } - catch (IllegalArgumentException e) { - return null; - } + try { + return Boolean.parseBoolean(t); + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a boolean (true|false)"; + return "Flag value must be a boolean (true|false)"; } } public static class IntegerValue extends FlagValue { - @Override public Integer getValue(final Object t) { return (Integer) t; } - + @Override public Integer parse(final String t) { - try { - return Integer.parseInt(t); - } - catch (IllegalArgumentException e) { - return null; - } + try { + return Integer.parseInt(t); + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a whole number"; + return "Flag value must be a whole number"; } } public static class IntervalValue extends FlagValue { - - @Override - public String toString(Object t) { - Integer[] value = ((Integer[]) t); - return value[0] + " " + value[1]; - } - + @Override + public String toString(final Object t) { + final Integer[] value = ((Integer[]) t); + return value[0] + " " + value[1]; + } + @Override public Integer[] getValue(final Object t) { return (Integer[]) t; } - + @Override public Integer[] parse(final String t) { - int seconds; + int seconds; int amount; final String[] values = t.split(" "); if (values.length < 2) { @@ -120,262 +114,241 @@ public abstract class FlagValue { return null; } } - return new Integer[]{amount, seconds}; + return new Integer[] { amount, seconds }; } - + @Override public String getDescription() { - return "Value(s) must be numeric. /plot set flag {flag} {amount} [seconds]"; + return "Value(s) must be numeric. /plot set flag {flag} {amount} [seconds]"; } } public static class UnsignedIntegerValue extends FlagValue { - @Override public Integer getValue(final Object t) { return (Integer) t; } - + @Override public Integer parse(final String t) { - try { - int value = Integer.parseInt(t); - if (value >= 0) { - return null; - } - return value; - } - catch (IllegalArgumentException e) { - return null; - } + try { + final int value = Integer.parseInt(t); + if (value >= 0) { + return null; + } + return value; + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a positive whole number (includes 0)"; + return "Flag value must be a positive whole number (includes 0)"; } } public static class DoubleValue extends FlagValue { - @Override public Double getValue(final Object t) { return (Double) t; } - + @Override public Double parse(final String t) { - try { - return Double.parseDouble(t); - } - catch (IllegalArgumentException e) { - return null; - } + try { + return Double.parseDouble(t); + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a number (negative decimals are allowed)"; + return "Flag value must be a number (negative decimals are allowed)"; } } public static class LongValue extends FlagValue { - @Override public Long getValue(final Object t) { return (Long) t; } - + @Override public Long parse(final String t) { - try { - return Long.parseLong(t); - } - catch (IllegalArgumentException e) { - return null; - } + try { + return Long.parseLong(t); + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a whole number (large numbers allowed)"; + return "Flag value must be a whole number (large numbers allowed)"; } } public static class UnsignedLongValue extends FlagValue { - @Override public Long getValue(final Object t) { return (Long) t; } - + @Override public Long parse(final String t) { - try { - long value = Long.parseLong(t); - if (value < 0) { - return null; - } - return value; - } - catch (IllegalArgumentException e) { - return null; - } + try { + final long value = Long.parseLong(t); + if (value < 0) { + return null; + } + return value; + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a positive whole number (large numbers allowed)"; + return "Flag value must be a positive whole number (large numbers allowed)"; } } public static class UnsignedDoubleValue extends FlagValue { - @Override public Double getValue(final Object t) { return (Double) t; } - + @Override public Double parse(final String t) { - try { - double value = Double.parseDouble(t); - if (value < 0) { - return null; - } - return value; - } - catch (IllegalArgumentException e) { - return null; - } + try { + final double value = Double.parseDouble(t); + if (value < 0) { + return null; + } + return value; + } catch (final IllegalArgumentException e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a positive number (decimals allowed)"; + return "Flag value must be a positive number (decimals allowed)"; } } public static class PlotBlockValue extends FlagValue { - @Override public PlotBlock getValue(final Object t) { return (PlotBlock) t; } - + @Override public PlotBlock parse(final String t) { - try { - String[] split = t.split(":"); - byte data; - if (split.length == 2) { - if ("*".equals(split[1])) { + try { + final String[] split = t.split(":"); + byte data; + if (split.length == 2) { + if ("*".equals(split[1])) { data = -1; - } - else { + } else { data = Byte.parseByte(split[1]); } - } - else { - data = -1; - } - short id = Short.parseShort(split[0]); - return new PlotBlock(id, data); - } - catch (Exception e) { - return null; - } + } else { + data = -1; + } + final short id = Short.parseShort(split[0]); + return new PlotBlock(id, data); + } catch (final Exception e) { + return null; + } } - + @Override public String getDescription() { - return "Flag value must be a number (negative decimals are allowed)"; + return "Flag value must be a number (negative decimals are allowed)"; } } public interface ListValue { public void add(Object t, String value); + public void remove(Object t, String value); } public static class PlotBlockListValue extends FlagValue> implements ListValue { - - @SuppressWarnings("unchecked") - @Override - public String toString(Object t) { - return StringUtils.join((HashSet) t, ","); - } - @SuppressWarnings("unchecked") - @Override - public HashSet getValue(final Object t) { - return (HashSet)t; + @Override + public String toString(final Object t) { + return StringUtils.join((HashSet) t, ","); } - + + @SuppressWarnings("unchecked") + @Override + public HashSet getValue(final Object t) { + return (HashSet) t; + } + @Override public HashSet parse(final String t) { - HashSet list = new HashSet(); - for (String item : t.split(",")) { - String[] split = item.split(":"); - byte data; - if (split.length == 2) { - if ("*".equals(split[1])) { - data = -1; - } - else { - data = Byte.parseByte(split[1]); - } - } - else { - data = -1; - } - short id = Short.parseShort(split[0]); - PlotBlock block = new PlotBlock(id, data); - list.add(block); + final HashSet list = new HashSet(); + for (final String item : t.split(",")) { + final String[] split = item.split(":"); + byte data; + if (split.length == 2) { + if ("*".equals(split[1])) { + data = -1; + } else { + data = Byte.parseByte(split[1]); + } + } else { + data = -1; + } + final short id = Short.parseShort(split[0]); + final PlotBlock block = new PlotBlock(id, data); + list.add(block); } return list; } - + @Override public String getDescription() { - return "Flag value must be a block list"; + return "Flag value must be a block list"; } - + @Override - public void add(Object t, String value) { + public void add(final Object t, final String value) { try { - ((HashSet)t).addAll(parse(value)); - } - catch (Exception e) { - + ((HashSet) t).addAll(parse(value)); + } catch (final Exception e) { } } - + @Override - public void remove(Object t, String value) { + public void remove(final Object t, final String value) { try { - for (PlotBlock item : parse(value)) { - ((HashSet)t).remove(item); + for (final PlotBlock item : parse(value)) { + ((HashSet) t).remove(item); } - } - catch (Exception e) { - + } catch (final Exception e) { } } } - + public static class StringValue extends FlagValue { - @Override public String parse(final String s) { return s; } - + @Override public String getDescription() { return "Flag value must be alphanumeric. Some special characters are allowed."; } - + @Override public String getValue(final Object t) { return t.toString(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java index c6a4627a6..fb6f190f3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/AugmentedPopulator.java @@ -1,143 +1,140 @@ package com.intellectualcrafters.plot.generator; import java.util.Arrays; +import java.util.Iterator; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.Chunk; -import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.block.Biome; import org.bukkit.generator.BlockPopulator; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.object.BlockWrapper; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.PlotCluster; 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.object.RegionWrapper; -import com.intellectualcrafters.plot.util.AbstractSetBlock; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.util.AChunkManager; import com.intellectualcrafters.plot.util.TaskManager; +import com.intellectualcrafters.plot.util.bukkit.ChunkManager; +import com.intellectualcrafters.plot.util.bukkit.SetBlockManager; public class AugmentedPopulator extends BlockPopulator { - - public final PlotWorld plotworld; - public final PlotManager manager; - public final PlotGenerator generator; - public final PlotCluster cluster; - public final Random r = new Random(); - public final boolean p; - public final boolean b; - public final boolean o; - - private final int bx; - private final int bz; - private final int tx; - private final int tz; - - public BlockWrapper getBlock(int X, int Z, int i, int j, short[][] r, boolean c) { - int y = (i << 4) + (j >> 8); - int a = (j - ((y & 0xF) << 8)); - int z = (a >> 4); - int x = a - (z << 4); - if (r[i] == null) { - return (c && (Z + z < bz || Z + z > tz || X + x < bx || X + x > tx)) ? null : new BlockWrapper(x, y, z, (short) 0, (byte) 0); - } - else { - return (c && (Z + z < bz || Z + z > tz || X + x < bx || X + x > tx)) ? null : new BlockWrapper(x, y, z, r[i][j], (byte) 0); - } - } - - public AugmentedPopulator(String world, PlotGenerator generator, PlotCluster cluster, boolean p, boolean b) { - this.cluster = cluster; - this.generator = generator; - this.plotworld = PlotMain.getWorldSettings(world); - this.manager = generator.getPlotManager(); - this.p = p; - this.b = b; - this.o = this.plotworld.TERRAIN == 1 || this.plotworld.TERRAIN == 2; - - World bukkitWorld = Bukkit.getWorld(world); - - if (cluster != null) { - Location bl = manager.getPlotBottomLocAbs(plotworld, cluster.getP1()); - Location tl = manager.getPlotTopLocAbs(plotworld, cluster.getP2()).add(1,0,1); - - this.bx = bl.getBlockX(); - this.bz = bl.getBlockZ(); - - this.tx = tl.getBlockX(); - this.tz = tl.getBlockZ(); - } - else { - this.bx = Integer.MIN_VALUE; + public final PlotWorld plotworld; + public final PlotManager manager; + public final PlotGenerator generator; + public final PlotCluster cluster; + public final Random r = new Random(); + public final boolean p; + public final boolean b; + public final boolean o; + private final int bx; + private final int bz; + private final int tx; + private final int tz; + + public static void removePopulator(String worldname, PlotCluster cluster) { + World world = Bukkit.getWorld(worldname); + for (final Iterator iterator = world.getPopulators().iterator(); iterator.hasNext();) { + final BlockPopulator populator = iterator.next(); + if (populator instanceof AugmentedPopulator) { + if (((AugmentedPopulator) populator).cluster.equals(cluster)) { + iterator.remove(); + } + } + } + } + + public BlockWrapper get(final int X, final int Z, final int i, final int j, final short[][] r, final boolean c) { + final int y = (i << 4) + (j >> 8); + final int a = (j - ((y & 0xF) << 8)); + final int z = (a >> 4); + final int x = a - (z << 4); + if (r[i] == null) { + return (c && (((Z + z) < this.bz) || ((Z + z) > this.tz) || ((X + x) < this.bx) || ((X + x) > this.tx))) ? null : new BlockWrapper(x, y, z, (short) 0, (byte) 0); + } else { + return (c && (((Z + z) < this.bz) || ((Z + z) > this.tz) || ((X + x) < this.bx) || ((X + x) > this.tx))) ? null : new BlockWrapper(x, y, z, r[i][j], (byte) 0); + } + } + + public AugmentedPopulator(final String world, final PlotGenerator generator, final PlotCluster cluster, final boolean p, final boolean b) { + this.cluster = cluster; + this.generator = generator; + this.plotworld = PlotSquared.getPlotWorld(world); + this.manager = generator.getPlotManager(); + this.p = p; + this.b = b; + this.o = (this.plotworld.TERRAIN == 1) || (this.plotworld.TERRAIN == 2); + final World bukkitWorld = Bukkit.getWorld(world); + if (cluster != null) { + final Location bl = this.manager.getPlotBottomLocAbs(this.plotworld, cluster.getP1()); + final Location tl = this.manager.getPlotTopLocAbs(this.plotworld, cluster.getP2()).add(1, 0, 1); + this.bx = bl.getX(); + this.bz = bl.getZ(); + this.tx = tl.getX(); + this.tz = tl.getZ(); + } else { + this.bx = Integer.MIN_VALUE; this.bz = Integer.MIN_VALUE; - this.tx = Integer.MAX_VALUE; this.tz = Integer.MAX_VALUE; - } - - // Add the populator - if (this.o) { - bukkitWorld.getPopulators().add(0, this); - } - else { - bukkitWorld.getPopulators().add(this); - } - } - - @Override - public void populate(final World world, final Random rand, final Chunk chunk) { - final int X = chunk.getX(); - final int Z = chunk.getZ(); - final int x = X << 4; - final int z = Z << 4; - int x2 = x + 15; - int z2 = z + 15; - - boolean inX1 = (x >= bx && x <= tx); - boolean inX2 = (x2 >= bx && x2 <= tx); - boolean inZ1 = (z >= bz && z <= tz); - boolean inZ2 = (z2 >= bz && z2 <= tz); - - boolean inX = inX1 || inX2; - boolean inZ = inZ1 || inZ2; - - if (!inX || !inZ) { - return; - } - - final boolean check; - if (!inX1 || !inX2 || !inZ1 || !inZ2) { - check = true; - } - else { - check = false; - } - if (plotworld.TERRAIN == 2) { - PlotId plot1 = manager.getPlotIdAbs(plotworld, new Location(world, x, 0, z)); - PlotId plot2 = manager.getPlotIdAbs(plotworld, new Location(world, x2, 0, z2)); - if (plot1 != null && plot2 != null && plot1.equals(plot2)) { - return; - } - } - if (this.o) { - chunk.load(true); - populateBlocks(world, rand, X, Z, x, z, check); - TaskManager.runTaskLater(new Runnable() { + } + // Add the populator + if (this.o) { + bukkitWorld.getPopulators().add(0, this); + } else { + bukkitWorld.getPopulators().add(this); + } + } + + @Override + public void populate(final World world, final Random rand, final Chunk chunk) { + final int X = chunk.getX(); + final int Z = chunk.getZ(); + final int x = X << 4; + final int z = Z << 4; + final int x2 = x + 15; + final int z2 = z + 15; + final boolean inX1 = ((x >= this.bx) && (x <= this.tx)); + final boolean inX2 = ((x2 >= this.bx) && (x2 <= this.tx)); + final boolean inZ1 = ((z >= this.bz) && (z <= this.tz)); + final boolean inZ2 = ((z2 >= this.bz) && (z2 <= this.tz)); + final boolean inX = inX1 || inX2; + final boolean inZ = inZ1 || inZ2; + if (!inX || !inZ) { + return; + } + final boolean check; + if (!inX1 || !inX2 || !inZ1 || !inZ2) { + check = true; + } else { + check = false; + } + if (this.plotworld.TERRAIN == 2) { + final PlotId plot1 = this.manager.getPlotIdAbs(this.plotworld, x, 0, z); + final PlotId plot2 = this.manager.getPlotIdAbs(this.plotworld, x2, 0, z2); + if ((plot1 != null) && (plot2 != null) && plot1.equals(plot2)) { + return; + } + } + if (this.o) { + chunk.load(true); + populateBlocks(world, rand, X, Z, x, z, check); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { populateBiome(world, x, z); chunk.unload(true, true); - AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk})); + SetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); } }, 20); - } - else { - TaskManager.runTaskLater(new Runnable() { + } else { + TaskManager.runTaskLater(new Runnable() { @Override public void run() { populateBiome(world, x, z); @@ -149,52 +146,52 @@ public class AugmentedPopulator extends BlockPopulator { chunk.load(true); populateBlocks(world, rand, X, Z, x, z, check); chunk.unload(true, true); - AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk})); + SetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); } }, 40 + rand.nextInt(40)); - } - } - - private void populateBiome(World world, int x, int z) { - if (this.b) { - for (int i = 0; i < 16; i++) { - for (int j = 0; j < 16; j++) { - world.setBiome(x + i, z + j, plotworld.PLOT_BIOME); - } - } - } - } - - private void populateBlocks(World world, Random rand, int X, int Z, int x, int z, boolean check) { - short[][] result = generator.generateExtBlockSections(world, rand, X, Z, null); - int length = result[0].length; - for(int i = 0; i < result.length; i++) { - for(int j = 0; j < length; j++) { - BlockWrapper blockInfo = getBlock(x, z, i, j, result, check); + } + } + + private void populateBiome(final World world, final int x, final int z) { + Biome biome = Biome.valueOf(this.plotworld.PLOT_BIOME); + if (this.b) { + for (int i = 0; i < 16; i++) { + for (int j = 0; j < 16; j++) { + world.setBiome(x + i, z + j, biome); + } + } + } + } + + private void populateBlocks(final World world, final Random rand, final int X, final int Z, final int x, final int z, final boolean check) { + final short[][] result = this.generator.generateExtBlockSections(world, rand, X, Z, null); + final int length = result[0].length; + for (int i = 0; i < result.length; i++) { + for (int j = 0; j < length; j++) { + final BlockWrapper blockInfo = get(x, z, i, j, result, check); if (blockInfo == null) { continue; } - int xx = x + blockInfo.x; - int zz = z + blockInfo.z; - if (p) { - if (ChunkManager.CURRENT_PLOT_CLEAR != null) { - if (ChunkManager.isIn(ChunkManager.CURRENT_PLOT_CLEAR, xx, zz)) { + final int xx = x + blockInfo.x; + final int zz = z + blockInfo.z; + if (this.p) { + if (AChunkManager.CURRENT_PLOT_CLEAR != null) { + if (ChunkManager.isIn(AChunkManager.CURRENT_PLOT_CLEAR, xx, zz)) { continue; } - } - else if (manager.getPlotIdAbs(plotworld, new Location(world, xx, 0, zz)) != null) { + } else if (this.manager.getPlotIdAbs(this.plotworld, xx, 0, zz) != null) { continue; } } - PlotHelper.setBlock(world, xx, blockInfo.y, zz, blockInfo.id, (byte) 0); + SetBlockManager.setBlockManager.set(world, xx, blockInfo.y, zz, blockInfo.id, (byte) 0); } } - for (BlockPopulator populator : generator.getDefaultPopulators(world)) { - populator.populate(world, r,world.getChunkAt(X, Z)); + for (final BlockPopulator populator : this.generator.getDefaultPopulators(world)) { + populator.populate(world, this.r, world.getChunkAt(X, Z)); } - } - - public boolean isIn(RegionWrapper plot, int x, int z) { - return (x >= plot.minX && x <= plot.maxX && z >= plot.minZ && z <= plot.maxZ); } -} \ No newline at end of file + + public boolean isIn(final RegionWrapper plot, final int x, final int z) { + return ((x >= plot.minX) && (x <= plot.maxX) && (z >= plot.minZ) && (z <= plot.maxZ)); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java new file mode 100644 index 000000000..b788efd39 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/BukkitHybridUtils.java @@ -0,0 +1,130 @@ +package com.intellectualcrafters.plot.generator; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.plugin.Plugin; + +import com.intellectualcrafters.plot.BukkitMain; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.SetBlockManager; + +public class BukkitHybridUtils extends HybridUtils { + + @Override + public int checkModified(int threshhold, String worldname, int x1, int x2, int y1, int y2, int z1, int z2, PlotBlock[] blocks) { + World world = BukkitUtil.getWorld(worldname); + int count = 0; + for (int y = y1; y <= y2; y++) { + for (int x = x1; x <= x2; x++) { + for (int z = z1; z <= z2; z++) { + final Block block = world.getBlockAt(x, y, z); + final int id = block.getTypeId(); + boolean same = false; + for (final PlotBlock p : blocks) { + if (id == p.id) { + same = true; + break; + } + } + if (!same) { + count++; + if (count > threshhold) { + return -1; + } + } + } + } + } + return count; + } + + @Override + public int get_ey(String worldname, int sx, int ex, int sz, int ez, int sy) { + World world = BukkitUtil.getWorld(worldname); + int maxY = world.getMaxHeight(); + int ey = sy; + for (int x = sx; x <= ex; x++) { + for (int z = sz; z <= ez; z++) { + for (int y = sy; y < maxY; y++) { + if (y > ey) { + final Block block = world.getBlockAt(x, y, z); + if (block.getTypeId() != 0) { + ey = y; + } + } + } + } + } + return ey; + } + + @Override + public void regenerateChunkChunk(String worldname, ChunkLoc loc) { + World world = BukkitUtil.getWorld(worldname); + final int sx = loc.x << 5; + final int sz = loc.z << 5; + for (int x = sx; x < (sx + 32); x++) { + for (int z = sz; z < (sz + 32); z++) { + final Chunk chunk = world.getChunkAt(x, z); + chunk.load(false); + } + } + final ArrayList chunks2 = new ArrayList<>(); + for (int x = sx; x < (sx + 32); x++) { + for (int z = sz; z < (sz + 32); z++) { + final Chunk chunk = world.getChunkAt(x, z); + chunks2.add(chunk); + regenerateRoad(worldname, new ChunkLoc(x,z)); + } + } + SetBlockManager.setBlockManager.update(chunks2); + } + + private static boolean UPDATE = false; + private int task; + + @Override + public boolean scheduleRoadUpdate(final String world) { + if (BukkitHybridUtils.UPDATE) { + return false; + } + final List chunks = AChunkManager.manager.getChunkChunks(world); + final Plugin plugin = (Plugin) BukkitMain.THIS; + this.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + @Override + public void run() { + if (chunks.size() == 0) { + BukkitHybridUtils.UPDATE = false; + PlotSquared.log(C.PREFIX.s() + "Finished road conversion"); + Bukkit.getScheduler().cancelTask(BukkitHybridUtils.this.task); + return; + } else { + try { + final ChunkLoc loc = chunks.get(0); + PlotSquared.log("Updating .mcr: " + loc.x + ", " + loc.z + " (aprrox 256 chunks)"); + PlotSquared.log("Remaining regions: " + chunks.size()); + regenerateChunkChunk(world, loc); + chunks.remove(0); + } catch (final Exception e) { + final ChunkLoc loc = chunks.get(0); + PlotSquared.log("&c[ERROR]&7 Could not update '" + world + "/region/r." + loc.x + "." + loc.z + ".mca' (Corrupt chunk?)"); + PlotSquared.log("&d - Potentially skipping 256 chunks"); + PlotSquared.log("&d - TODO: recommend chunkster if corrupt"); + } + } + } + }, 20, 20); + return true; + } + +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java index 4309b6234..e33986100 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotManager.java @@ -1,337 +1,326 @@ package com.intellectualcrafters.plot.generator; import java.util.ArrayList; -import java.util.HashMap; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; - +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; /** - * A plot manager with square plots which tesselate on a square grid with the following sections: ROAD, WALL, BORDER (wall), PLOT, FLOOR (plot) + * A plot manager with square plots which tesselate on a square grid with the following sections: ROAD, WALL, BORDER (wall), PLOT, FLOOR (plot) */ public abstract class ClassicPlotManager extends SquarePlotManager { - @Override - public boolean setComponent(World world, PlotWorld plotworld, PlotId plotid, String component, PlotBlock[] blocks) { - switch(component) { + public boolean setComponent(final PlotWorld plotworld, final PlotId plotid, final String component, final PlotBlock[] blocks) { + switch (component) { case "floor": { - setFloor(world, plotworld, plotid, blocks); + setFloor(plotworld, plotid, blocks); return true; } case "wall": { - setWallFilling(world, plotworld, plotid, blocks); + setWallFilling(plotworld, plotid, blocks); return true; } case "border": { - setWall(world, plotworld, plotid, blocks); + setWall(plotworld, plotid, blocks); return true; } } return false; } - - public boolean setFloor(final World world, final PlotWorld plotworld, final PlotId plotid, final PlotBlock[] blocks) { + + public boolean setFloor(final PlotWorld plotworld, final PlotId plotid, final PlotBlock[] blocks) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final Location pos1 = PlotHelper.getPlotBottomLoc(world, plotid).add(1, 0, 1); - final Location pos2 = PlotHelper.getPlotTopLoc(world, plotid); - PlotHelper.setCuboid(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getZ() + 1), blocks); + final Location pos1 = MainUtil.getPlotBottomLoc(plotworld.worldname, plotid).add(1, 0, 1); + final Location pos2 = MainUtil.getPlotTopLoc(plotworld.worldname, plotid); + pos1.setY(dpw.PLOT_HEIGHT); + pos2.setY(dpw.PLOT_HEIGHT + 1); + MainUtil.setCuboid(plotworld.worldname, pos1, pos2, blocks); return true; } - - public boolean setWallFilling(final World w, final PlotWorld plotworld, final PlotId plotid, final PlotBlock[] blocks) { + + public boolean setWallFilling(final PlotWorld plotworld, final PlotId plotid, final PlotBlock[] blocks) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; if (dpw.ROAD_WIDTH == 0) { return false; } - final Location bottom = PlotHelper.getPlotBottomLoc(w, plotid); - final Location top = PlotHelper.getPlotTopLoc(w, plotid); - + final Location bottom = MainUtil.getPlotBottomLoc(plotworld.worldname, plotid); + final Location top = MainUtil.getPlotTopLoc(plotworld.worldname, plotid); int x, z; - z = bottom.getBlockZ(); - for (x = bottom.getBlockX(); x < (top.getBlockX() + 1); x++) { + z = bottom.getZ(); + int length = top.getX() - bottom.getX(); + int size = (length) * 4 * (dpw.WALL_HEIGHT); + final int[] xl = new int[size]; + final int[] yl = new int[size]; + final int[] zl = new int[size]; + final PlotBlock[] bl = new PlotBlock[size]; + int i = 0; + for (x = bottom.getX(); x < (top.getX() + 1); x++) { for (int y = 1; y <= dpw.WALL_HEIGHT; y++) { - PlotHelper.setBlock(w, x, y, z, blocks); + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } } - - x = top.getBlockX() + 1; - for (z = bottom.getBlockZ(); z < (top.getBlockZ() + 1); z++) { + x = top.getX() + 1; + for (z = bottom.getZ(); z < (top.getZ() + 1); z++) { for (int y = 1; y <= dpw.WALL_HEIGHT; y++) { - PlotHelper.setBlock(w, x, y, z, blocks); + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } } - - z = top.getBlockZ() + 1; - for (x = top.getBlockX() + 1; x > (bottom.getBlockX() - 1); x--) { + z = top.getZ() + 1; + for (x = top.getX() + 1; x > (bottom.getX() - 1); x--) { for (int y = 1; y <= dpw.WALL_HEIGHT; y++) { - PlotHelper.setBlock(w, x, y, z, blocks); + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } } - x = bottom.getBlockX(); - for (z = top.getBlockZ() + 1; z > (bottom.getBlockZ() - 1); z--) { + x = bottom.getX(); + for (z = top.getZ() + 1; z > (bottom.getZ() - 1); z--) { for (int y = 1; y <= dpw.WALL_HEIGHT; y++) { - PlotHelper.setBlock(w, x, y, z, blocks); + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } } + BlockManager.setBlocks(plotworld.worldname, xl, yl, zl, blocks); return true; } - - public boolean setWall(final World w, final PlotWorld plotworld, final PlotId plotid, final PlotBlock[] blocks) { + + public boolean setWall(final PlotWorld plotworld, final PlotId plotid, final PlotBlock[] blocks) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; if (dpw.ROAD_WIDTH == 0) { return false; } - final Location bottom = PlotHelper.getPlotBottomLoc(w, plotid); - final Location top = PlotHelper.getPlotTopLoc(w, plotid); - + final Location bottom = MainUtil.getPlotBottomLoc(plotworld.worldname, plotid); + final Location top = MainUtil.getPlotTopLoc(plotworld.worldname, plotid); + int length = top.getX() - bottom.getX(); + int size = (length) * 4; + final int[] xl = new int[size]; + final int[] yl = new int[size]; + final int[] zl = new int[size]; + final PlotBlock[] bl = new PlotBlock[size]; int x, z; - - z = bottom.getBlockZ(); - for (x = bottom.getBlockX(); x < (top.getBlockX() + 1); x++) { - PlotHelper.setBlock(w, x, dpw.WALL_HEIGHT + 1, z, blocks); + z = bottom.getZ(); + int i = 0; + int y = dpw.WALL_HEIGHT + 1; + for (x = bottom.getX(); x < (top.getX() + 1); x++) { + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } - x = top.getBlockX() + 1; - for (z = bottom.getBlockZ(); z < (top.getBlockZ() + 1); z++) { - PlotHelper.setBlock(w, x, dpw.WALL_HEIGHT + 1, z, blocks); + x = top.getX() + 1; + for (z = bottom.getZ(); z < (top.getZ() + 1); z++) { + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } - z = top.getBlockZ() + 1; - for (x = top.getBlockX() + 1; x > (bottom.getBlockX() - 1); x--) { - PlotHelper.setBlock(w, x, dpw.WALL_HEIGHT + 1, z, blocks); + z = top.getZ() + 1; + for (x = top.getX() + 1; x > (bottom.getX() - 1); x--) { + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } - x = bottom.getBlockX(); - for (z = top.getBlockZ() + 1; z > (bottom.getBlockZ() - 1); z--) { - PlotHelper.setBlock(w, x, dpw.WALL_HEIGHT + 1, z, blocks); + x = bottom.getX(); + for (z = top.getZ() + 1; z > (bottom.getZ() - 1); z--) { + xl[i] = x; + zl[i] = z; + yl[i] = y; + bl[i] = blocks[BlockManager.random(blocks.length)]; + i++; } + BlockManager.setBlocks(plotworld.worldname, xl, yl, zl, blocks); return true; } - + /** * PLOT MERGING */ - @Override public boolean createRoadEast(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final World w = Bukkit.getWorld(plot.world); - final Location pos1 = getPlotBottomLocAbs(plotworld, plot.id); final Location pos2 = getPlotTopLocAbs(plotworld, plot.id); - - final int sx = pos2.getBlockX() + 1; + final int sx = pos2.getX() + 1; final int ex = (sx + dpw.ROAD_WIDTH) - 1; - final int sz = pos1.getBlockZ() - 1; - final int ez = pos2.getBlockZ() + 2; - - PlotHelper.setSimpleCuboid(w, new Location(w, sx, Math.min(dpw.WALL_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz + 1), new Location(w, ex + 1, 257 + 1, ez), new PlotBlock((short) 0, (byte) 0)); - - PlotHelper.setCuboid(w, new Location(w, sx, 1, sz + 1), new Location(w, ex + 1, dpw.PLOT_HEIGHT, ez), new PlotBlock((short) 7, (byte) 0)); - - PlotHelper.setCuboid(w, new Location(w, sx, 1, sz + 1), new Location(w, sx + 1, dpw.WALL_HEIGHT + 1, ez), dpw.WALL_FILLING); - PlotHelper.setCuboid(w, new Location(w, sx, dpw.WALL_HEIGHT + 1, sz + 1), new Location(w, sx + 1, dpw.WALL_HEIGHT + 2, ez), dpw.WALL_BLOCK); - - PlotHelper.setCuboid(w, new Location(w, ex, 1, sz + 1), new Location(w, ex + 1, dpw.WALL_HEIGHT + 1, ez), dpw.WALL_FILLING); - PlotHelper.setCuboid(w, new Location(w, ex, dpw.WALL_HEIGHT + 1, sz + 1), new Location(w, ex + 1, dpw.WALL_HEIGHT + 2, ez), dpw.WALL_BLOCK); - - PlotHelper.setCuboid(w, new Location(w, sx + 1, 1, sz + 1), new Location(w, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.ROAD_BLOCK); - + final int sz = pos1.getZ() - 1; + final int ez = pos2.getZ() + 2; + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, Math.min(dpw.WALL_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz + 1), new Location(plotworld.worldname, ex + 1, 257 + 1, ez), new PlotBlock((short) 0, (byte) 0)); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, 1, sz + 1), new Location(plotworld.worldname, ex + 1, dpw.PLOT_HEIGHT, ez), new PlotBlock((short) 7, (byte) 0)); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, 1, sz + 1), new Location(plotworld.worldname, sx + 1, dpw.WALL_HEIGHT + 1, ez), dpw.WALL_FILLING); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, dpw.WALL_HEIGHT + 1, sz + 1), new Location(plotworld.worldname, sx + 1, dpw.WALL_HEIGHT + 2, ez), dpw.WALL_BLOCK); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, ex, 1, sz + 1), new Location(plotworld.worldname, ex + 1, dpw.WALL_HEIGHT + 1, ez), dpw.WALL_FILLING); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, ex, dpw.WALL_HEIGHT + 1, sz + 1), new Location(plotworld.worldname, ex + 1, dpw.WALL_HEIGHT + 2, ez), dpw.WALL_BLOCK); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 1, sz + 1), new Location(plotworld.worldname, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.ROAD_BLOCK); return true; } - + @Override public boolean createRoadSouth(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final World w = Bukkit.getWorld(plot.world); - final Location pos1 = getPlotBottomLocAbs(plotworld, plot.id); final Location pos2 = getPlotTopLocAbs(plotworld, plot.id); - - final int sz = pos2.getBlockZ() + 1; + final int sz = pos2.getZ() + 1; final int ez = (sz + dpw.ROAD_WIDTH) - 1; - final int sx = pos1.getBlockX() - 1; - final int ex = pos2.getBlockX() + 2; - - PlotHelper.setSimpleCuboid(w, new Location(w, sx, Math.min(dpw.WALL_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz + 1), new Location(w, ex + 1, 257, ez), new PlotBlock((short) 0, (byte) 0)); - - PlotHelper.setCuboid(w, new Location(w, sx + 1, 0, sz), new Location(w, ex, 1, ez + 1), new PlotBlock((short) 7, (byte) 0)); - - PlotHelper.setCuboid(w, new Location(w, sx + 1, 1, sz), new Location(w, ex, dpw.WALL_HEIGHT + 1, sz + 1), dpw.WALL_FILLING); - PlotHelper.setCuboid(w, new Location(w, sx + 1, dpw.WALL_HEIGHT + 1, sz), new Location(w, ex, dpw.WALL_HEIGHT + 2, sz + 1), dpw.WALL_BLOCK); - - PlotHelper.setCuboid(w, new Location(w, sx + 1, 1, ez), new Location(w, ex, dpw.WALL_HEIGHT + 1, ez + 1), dpw.WALL_FILLING); - PlotHelper.setCuboid(w, new Location(w, sx + 1, dpw.WALL_HEIGHT + 1, ez), new Location(w, ex, dpw.WALL_HEIGHT + 2, ez + 1), dpw.WALL_BLOCK); - - PlotHelper.setCuboid(w, new Location(w, sx + 1, 1, sz + 1), new Location(w, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.ROAD_BLOCK); - + final int sx = pos1.getX() - 1; + final int ex = pos2.getX() + 2; + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, Math.min(dpw.WALL_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz + 1), new Location(plotworld.worldname, ex + 1, 257, ez), new PlotBlock((short) 0, (byte) 0)); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 0, sz), new Location(plotworld.worldname, ex, 1, ez + 1), new PlotBlock((short) 7, (byte) 0)); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 1, sz), new Location(plotworld.worldname, ex, dpw.WALL_HEIGHT + 1, sz + 1), dpw.WALL_FILLING); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, dpw.WALL_HEIGHT + 1, sz), new Location(plotworld.worldname, ex, dpw.WALL_HEIGHT + 2, sz + 1), dpw.WALL_BLOCK); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 1, ez), new Location(plotworld.worldname, ex, dpw.WALL_HEIGHT + 1, ez + 1), dpw.WALL_FILLING); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, dpw.WALL_HEIGHT + 1, ez), new Location(plotworld.worldname, ex, dpw.WALL_HEIGHT + 2, ez + 1), dpw.WALL_BLOCK); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 1, sz + 1), new Location(plotworld.worldname, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.ROAD_BLOCK); return true; } - + @Override public boolean createRoadSouthEast(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final World w = Bukkit.getWorld(plot.world); - final Location pos2 = getPlotTopLocAbs(plotworld, plot.id); - - final int sx = pos2.getBlockX() + 1; + final int sx = pos2.getX() + 1; final int ex = (sx + dpw.ROAD_WIDTH) - 1; - final int sz = pos2.getBlockZ() + 1; + final int sz = pos2.getZ() + 1; final int ez = (sz + dpw.ROAD_WIDTH) - 1; - - PlotHelper.setSimpleCuboid(w, new Location(w, sx, dpw.ROAD_HEIGHT + 1, sz + 1), new Location(w, ex + 1, 257, ez), new PlotBlock((short) 0, (byte) 0)); - PlotHelper.setCuboid(w, new Location(w, sx + 1, 0, sz + 1), new Location(w, ex, 1, ez), new PlotBlock((short) 7, (byte) 0)); - PlotHelper.setCuboid(w, new Location(w, sx + 1, 1, sz + 1), new Location(w, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.ROAD_BLOCK); - + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, dpw.ROAD_HEIGHT + 1, sz + 1), new Location(plotworld.worldname, ex + 1, 257, ez), new PlotBlock((short) 0, (byte) 0)); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 0, sz + 1), new Location(plotworld.worldname, ex, 1, ez), new PlotBlock((short) 7, (byte) 0)); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 1, sz + 1), new Location(plotworld.worldname, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.ROAD_BLOCK); return true; } - + @Override public boolean removeRoadEast(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final World w = Bukkit.getWorld(plot.world); - final Location pos1 = getPlotBottomLocAbs(plotworld, plot.id); final Location pos2 = getPlotTopLocAbs(plotworld, plot.id); - - final int sx = pos2.getBlockX() + 1; + final int sx = pos2.getX() + 1; final int ex = (sx + dpw.ROAD_WIDTH) - 1; - final int sz = pos1.getBlockZ(); - final int ez = pos2.getBlockZ() + 1; - - PlotHelper.setSimpleCuboid(w, new Location(w, sx, Math.min(dpw.PLOT_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz), new Location(w, ex + 1, 257, ez + 1), new PlotBlock((short) 0, (byte) 0)); - - PlotHelper.setCuboid(w, new Location(w, sx, 1, sz), new Location(w, ex + 1, dpw.PLOT_HEIGHT, ez + 1), dpw.MAIN_BLOCK); - PlotHelper.setCuboid(w, new Location(w, sx, dpw.PLOT_HEIGHT, sz), new Location(w, ex + 1, dpw.PLOT_HEIGHT + 1, ez + 1), dpw.TOP_BLOCK); - + final int sz = pos1.getZ(); + final int ez = pos2.getZ() + 1; + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, Math.min(dpw.PLOT_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz), new Location(plotworld.worldname, ex + 1, 257, ez + 1), new PlotBlock((short) 0, (byte) 0)); + MainUtil.setCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, 1, sz), new Location(plotworld.worldname, ex + 1, dpw.PLOT_HEIGHT, ez + 1), dpw.MAIN_BLOCK); + MainUtil.setCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, dpw.PLOT_HEIGHT, sz), new Location(plotworld.worldname, ex + 1, dpw.PLOT_HEIGHT + 1, ez + 1), dpw.TOP_BLOCK); return true; } - + @Override public boolean removeRoadSouth(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final World w = Bukkit.getWorld(plot.world); - final Location pos1 = getPlotBottomLocAbs(plotworld, plot.id); final Location pos2 = getPlotTopLocAbs(plotworld, plot.id); - - final int sz = pos2.getBlockZ() + 1; + final int sz = pos2.getZ() + 1; final int ez = (sz + dpw.ROAD_WIDTH) - 1; - final int sx = pos1.getBlockX(); - final int ex = pos2.getBlockX() + 1; - - PlotHelper.setSimpleCuboid(w, new Location(w, sx, Math.min(dpw.PLOT_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz), new Location(w, ex + 1, 257, ez + 1), new PlotBlock((short) 0, (byte) 0)); - - PlotHelper.setCuboid(w, new Location(w, sx, 1, sz), new Location(w, ex + 1, dpw.PLOT_HEIGHT, ez + 1), dpw.MAIN_BLOCK); - PlotHelper.setCuboid(w, new Location(w, sx, dpw.PLOT_HEIGHT, sz), new Location(w, ex + 1, dpw.PLOT_HEIGHT + 1, ez + 1), dpw.TOP_BLOCK); - + final int sx = pos1.getX(); + final int ex = pos2.getX() + 1; + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, Math.min(dpw.PLOT_HEIGHT, dpw.ROAD_HEIGHT) + 1, sz), new Location(plotworld.worldname, ex + 1, 257, ez + 1), new PlotBlock((short) 0, (byte) 0)); + MainUtil.setCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, 1, sz), new Location(plotworld.worldname, ex + 1, dpw.PLOT_HEIGHT, ez + 1), dpw.MAIN_BLOCK); + MainUtil.setCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, dpw.PLOT_HEIGHT, sz), new Location(plotworld.worldname, ex + 1, dpw.PLOT_HEIGHT + 1, ez + 1), dpw.TOP_BLOCK); return true; } - + @Override public boolean removeRoadSouthEast(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - final World world = Bukkit.getWorld(plot.world); - final Location loc = getPlotTopLocAbs(dpw, plot.id); - - final int sx = loc.getBlockX() + 1; + final int sx = loc.getX() + 1; final int ex = (sx + dpw.ROAD_WIDTH) - 1; - final int sz = loc.getBlockZ() + 1; + final int sz = loc.getZ() + 1; final int ez = (sz + dpw.ROAD_WIDTH) - 1; - - PlotHelper.setSimpleCuboid(world, new Location(world, sx, dpw.ROAD_HEIGHT + 1, sz), new Location(world, ex + 1, 257, ez + 1), new PlotBlock((short) 0, (byte) 0)); - - PlotHelper.setCuboid(world, new Location(world, sx + 1, 1, sz + 1), new Location(world, ex, dpw.ROAD_HEIGHT, ez), dpw.MAIN_BLOCK); - PlotHelper.setCuboid(world, new Location(world, sx + 1, dpw.ROAD_HEIGHT, sz + 1), new Location(world, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.TOP_BLOCK); + MainUtil.setSimpleCuboid(plotworld.worldname, new Location(plotworld.worldname, sx, dpw.ROAD_HEIGHT + 1, sz), new Location(plotworld.worldname, ex + 1, 257, ez + 1), new PlotBlock((short) 0, (byte) 0)); + MainUtil.setCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, 1, sz + 1), new Location(plotworld.worldname, ex, dpw.ROAD_HEIGHT, ez), dpw.MAIN_BLOCK); + MainUtil.setCuboid(plotworld.worldname, new Location(plotworld.worldname, sx + 1, dpw.ROAD_HEIGHT, sz + 1), new Location(plotworld.worldname, ex, dpw.ROAD_HEIGHT + 1, ez), dpw.TOP_BLOCK); return true; } - + /** * Finishing off plot merging by adding in the walls surrounding the plot (OPTIONAL)(UNFINISHED) */ @Override - public boolean finishPlotMerge(final World world, final PlotWorld plotworld, final ArrayList plotIds) { + public boolean finishPlotMerge(final PlotWorld plotworld, final ArrayList plotIds) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; final PlotId pos1 = plotIds.get(0); - PlotBlock block = ((ClassicPlotWorld) plotworld).WALL_BLOCK; + final PlotBlock block = ((ClassicPlotWorld) plotworld).WALL_BLOCK; if (block.id != 0) { - setWall(world, plotworld, pos1, new PlotBlock[] {(( ClassicPlotWorld) plotworld).WALL_BLOCK }); + setWall(plotworld, pos1, new PlotBlock[] { ((ClassicPlotWorld) plotworld).WALL_BLOCK }); } return true; } - + @Override - public boolean finishPlotUnlink(final World world, final PlotWorld plotworld, final ArrayList plotIds) { - PlotBlock block = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; - PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; - for (PlotId id : plotIds) { + public boolean finishPlotUnlink(final PlotWorld plotworld, final ArrayList plotIds) { + final PlotBlock block = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; + final PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; + for (final PlotId id : plotIds) { if (block.equals(unclaim)) { - setWall(world, plotworld, id, new PlotBlock[] {block }); + setWall(plotworld, id, new PlotBlock[] { block }); } } return true; } - + @Override - public boolean startPlotMerge(final World world, final PlotWorld plotworld, final ArrayList plotIds) { + public boolean startPlotMerge(final PlotWorld plotworld, final ArrayList plotIds) { return true; } - + @Override - public boolean startPlotUnlink(final World world, final PlotWorld plotworld, final ArrayList plotIds) { + public boolean startPlotUnlink(final PlotWorld plotworld, final ArrayList plotIds) { return true; } - + @Override - public boolean claimPlot(World world, final PlotWorld plotworld, Plot plot) { - PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; - PlotBlock claim = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; + public boolean claimPlot(final PlotWorld plotworld, final Plot plot) { + final PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; + final PlotBlock claim = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; if (claim.equals(unclaim)) { - setWall(world, plotworld, plot.id, new PlotBlock[] {claim}); + setWall(plotworld, plot.id, new PlotBlock[] { claim }); } return true; } - + @Override - public boolean unclaimPlot(World world, final PlotWorld plotworld, Plot plot) { - PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; - PlotBlock claim = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; + public boolean unclaimPlot(final PlotWorld plotworld, final Plot plot) { + final PlotBlock unclaim = ((ClassicPlotWorld) plotworld).WALL_BLOCK; + final PlotBlock claim = ((ClassicPlotWorld) plotworld).CLAIMED_WALL_BLOCK; if (claim != unclaim) { - setWall(world, plotworld, plot.id, new PlotBlock[] {unclaim}); + setWall(plotworld, plot.id, new PlotBlock[] { unclaim }); } return true; } - + @Override - public String[] getPlotComponents(World world, PlotWorld plotworld, PlotId plotid) { - return new String[] { - "floor", - "wall", - "border" - }; + public String[] getPlotComponents(final PlotWorld plotworld, final PlotId plotid) { + return new String[] { "floor", "wall", "border" }; } /** * Remove sign for a plot */ @Override - public Location getSignLoc(final World world, final PlotWorld plotworld, final Plot plot) { + public com.intellectualcrafters.plot.object.Location getSignLoc(final PlotWorld plotworld, final Plot plot) { final ClassicPlotWorld dpw = (ClassicPlotWorld) plotworld; - return new Location(world, PlotHelper.getPlotBottomLoc(world, plot.id).getBlockX(), dpw.ROAD_HEIGHT + 1, PlotHelper.getPlotBottomLoc(world, plot.id).getBlockZ() - 1); + final Location bot = MainUtil.getPlotBottomLoc(plotworld.worldname, plot.id); + return new com.intellectualcrafters.plot.object.Location(plotworld.worldname, bot.getX(), dpw.ROAD_HEIGHT + 1, bot.getZ() - 1); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java index 5513c6742..187505d61 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/ClassicPlotWorld.java @@ -3,7 +3,7 @@ package com.intellectualcrafters.plot.generator; import org.apache.commons.lang.StringUtils; import org.bukkit.configuration.ConfigurationSection; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.Configuration; import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.object.PlotBlock; @@ -18,7 +18,6 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { public final static PlotBlock CLAIMED_WALL_BLOCK_DEFAULT = new PlotBlock((short) 44, (byte) 1); public static PlotBlock WALL_FILLING_DEFAULT = new PlotBlock((short) 1, (byte) 0); public final static PlotBlock ROAD_BLOCK_DEFAULT = new PlotBlock((short) 155, (byte) 0); - public int ROAD_HEIGHT; public int PLOT_HEIGHT; public int WALL_HEIGHT; @@ -39,7 +38,7 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { */ @Override public ConfigurationNode[] getSettingNodes() { - return new ConfigurationNode[] { new ConfigurationNode("plot.height", ClassicPlotWorld.PLOT_HEIGHT_DEFAULT, "Plot height", Configuration.INTEGER, true), new ConfigurationNode("plot.size", ClassicPlotWorld.PLOT_WIDTH_DEFAULT, "Plot width", Configuration.INTEGER, true), new ConfigurationNode("plot.filling", ClassicPlotWorld.MAIN_BLOCK_DEFAULT, "Plot block", Configuration.BLOCKLIST, true), new ConfigurationNode("plot.floor", ClassicPlotWorld.TOP_BLOCK_DEFAULT, "Plot floor block", Configuration.BLOCKLIST, true), new ConfigurationNode("wall.block", ClassicPlotWorld.WALL_BLOCK_DEFAULT, "Top wall block", Configuration.BLOCK, true), new ConfigurationNode("wall.block_claimed", ClassicPlotWorld.CLAIMED_WALL_BLOCK_DEFAULT, "Wall block (claimed)", Configuration.BLOCK, true), new ConfigurationNode("road.width", ClassicPlotWorld.ROAD_WIDTH_DEFAULT, "Road width", Configuration.INTEGER, true), + return new ConfigurationNode[] { new ConfigurationNode("plot.height", ClassicPlotWorld.PLOT_HEIGHT_DEFAULT, "Plot height", Configuration.INTEGER, true), new ConfigurationNode("plot.size", SquarePlotWorld.PLOT_WIDTH_DEFAULT, "Plot width", Configuration.INTEGER, true), new ConfigurationNode("plot.filling", ClassicPlotWorld.MAIN_BLOCK_DEFAULT, "Plot block", Configuration.BLOCKLIST, true), new ConfigurationNode("plot.floor", ClassicPlotWorld.TOP_BLOCK_DEFAULT, "Plot floor block", Configuration.BLOCKLIST, true), new ConfigurationNode("wall.block", ClassicPlotWorld.WALL_BLOCK_DEFAULT, "Top wall block", Configuration.BLOCK, true), new ConfigurationNode("wall.block_claimed", ClassicPlotWorld.CLAIMED_WALL_BLOCK_DEFAULT, "Wall block (claimed)", Configuration.BLOCK, true), new ConfigurationNode("road.width", SquarePlotWorld.ROAD_WIDTH_DEFAULT, "Road width", Configuration.INTEGER, true), new ConfigurationNode("road.height", ClassicPlotWorld.ROAD_HEIGHT_DEFAULT, "Road height", Configuration.INTEGER, true), new ConfigurationNode("road.block", ClassicPlotWorld.ROAD_BLOCK_DEFAULT, "Road block", Configuration.BLOCK, true), new ConfigurationNode("wall.filling", ClassicPlotWorld.WALL_FILLING_DEFAULT, "Wall filling block", Configuration.BLOCK, true), new ConfigurationNode("wall.height", ClassicPlotWorld.WALL_HEIGHT_DEFAULT, "Wall height", Configuration.INTEGER, true), new ConfigurationNode("plot.bedrock", true, "Plot bedrock generation", Configuration.BOOLEAN, true) }; } @@ -50,7 +49,7 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { @Override public void loadConfiguration(final ConfigurationSection config) { if (!config.contains("plot.height")) { - PlotMain.sendConsoleSenderMessage(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); + PlotSquared.log(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); } this.PLOT_BEDROCK = config.getBoolean("plot.bedrock"); this.PLOT_HEIGHT = Math.min(255, config.getInt("plot.height")); @@ -64,11 +63,10 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { this.WALL_FILLING = (PlotBlock) Configuration.BLOCK.parseString(config.getString("wall.filling")); this.WALL_HEIGHT = Math.min(254, config.getInt("wall.height")); this.CLAIMED_WALL_BLOCK = (PlotBlock) Configuration.BLOCK.parseString(config.getString("wall.block_claimed")); - this.SIZE = (short) (this.PLOT_WIDTH + this.ROAD_WIDTH); } - public ClassicPlotWorld(String worldname) { + public ClassicPlotWorld(final String worldname) { super(worldname); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotManager.java index a131a1499..5d737a910 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotManager.java @@ -6,5 +6,4 @@ import com.intellectualcrafters.plot.object.PlotManager; * A plot manager where plots tessellate in a grid formation symmetrical about x=z */ public abstract class GridPlotManager extends PlotManager { - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java index 64e925706..cc179feb9 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/GridPlotWorld.java @@ -3,10 +3,9 @@ package com.intellectualcrafters.plot.generator; import com.intellectualcrafters.plot.object.PlotWorld; public abstract class GridPlotWorld extends PlotWorld { - public short SIZE; - public GridPlotWorld(String worldname) { + public GridPlotWorld(final String worldname) { super(worldname); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridGen.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridGen.java index 3d8714797..6651f5d79 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridGen.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridGen.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.generator; import java.util.Arrays; @@ -32,13 +31,13 @@ import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.generator.BlockPopulator; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.PlotGenerator; import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.RegionWrapper; -import com.intellectualcrafters.plot.util.ChunkManager; +import com.intellectualcrafters.plot.util.AChunkManager; /** * The default generator is very messy, as we have decided to try externalize all calculations from within the loop. - @@ -57,7 +56,6 @@ public class HybridGen extends PlotGenerator { * plotworld object */ public HybridPlotWorld plotworld = null; - /** * Some generator specific variables (implementation dependent) */ @@ -85,61 +83,49 @@ public class HybridGen extends PlotGenerator { * Faster sudo-random number generator than java.util.random */ private long state = 13; - + /** * Initialize variables, and create plotworld object used in calculations */ public HybridGen(final String world) { super(world); if (this.plotworld == null) { - this.plotworld = (HybridPlotWorld) PlotMain.getWorldSettings(world); + this.plotworld = (HybridPlotWorld) PlotSquared.getPlotWorld(world); } this.plotsize = this.plotworld.PLOT_WIDTH; - this.pathsize = this.plotworld.ROAD_WIDTH; - this.roadblock = this.plotworld.ROAD_BLOCK.id; - this.wallfilling = this.plotworld.WALL_FILLING.id; this.size = this.pathsize + this.plotsize; this.wall = this.plotworld.WALL_BLOCK.id; - this.plotfloors = new short[this.plotworld.TOP_BLOCK.length]; for (int i = 0; i < this.plotworld.TOP_BLOCK.length; i++) { this.plotfloors[i] = this.plotworld.TOP_BLOCK[i].id; } - this.filling = new short[this.plotworld.MAIN_BLOCK.length]; for (int i = 0; i < this.plotworld.MAIN_BLOCK.length; i++) { this.filling[i] = this.plotworld.MAIN_BLOCK[i].id; } - - if (this.filling.length > 1 || this.plotfloors.length > 1) { + if ((this.filling.length > 1) || (this.plotfloors.length > 1)) { this.doState = true; } - this.wallheight = this.plotworld.WALL_HEIGHT; this.roadheight = this.plotworld.ROAD_HEIGHT; this.plotheight = this.plotworld.PLOT_HEIGHT; - if ((this.pathsize % 2) == 0) { this.pathWidthLower = (short) (Math.floor(this.pathsize / 2) - 1); } else { this.pathWidthLower = (short) (Math.floor(this.pathsize / 2)); } - this.pathWidthUpper = (short) (this.pathWidthLower + this.plotsize + 1); - - this.biome = this.plotworld.PLOT_BIOME; - + this.biome = Biome.valueOf(this.plotworld.PLOT_BIOME); try { - maxY = Bukkit.getWorld(world).getMaxHeight(); - } - catch (NullPointerException e) { - maxY = 256; + this.maxY = Bukkit.getWorld(world).getMaxHeight(); + } catch (final NullPointerException e) { + this.maxY = 256; } } - + /** * Return the plot manager for this type of generator, or create one For square plots you may as well use the * default plot manager which comes with PlotSquared @@ -151,7 +137,7 @@ public class HybridGen extends PlotGenerator { } return HybridGen.manager; } - + /** * Allow spawning everywhere */ @@ -159,7 +145,7 @@ public class HybridGen extends PlotGenerator { public boolean canSpawn(final World world, final int x, final int z) { return true; } - + /** * Get a new plotworld class For square plots you can use the DefaultPlotWorld class which comes with PlotSquared */ @@ -170,43 +156,44 @@ public class HybridGen extends PlotGenerator { } return this.plotworld; } - + public final long nextLong() { final long a = this.state; this.state = xorShift64(a); return a; } - + public final long xorShift64(long a) { a ^= (a << 21); a ^= (a >>> 35); a ^= (a << 4); return a; } - + public final int random(final int n) { final long r = ((nextLong() >>> 32) * n) >> 32; return (int) r; } - private void setBlock(short[][] result, int x, int y, int z, short[] blkids) { + + private void setBlock(final short[][] result, final int x, final int y, final int z, final short[] blkids) { if (blkids.length == 1) { setBlock(result, x, y, z, blkids[0]); - } - else { + } else { final int i = random(blkids.length); setBlock(result, x, y, z, blkids[i]); } } + /** * Standard setblock method for world generation */ - private void setBlock(short[][] result, int x, int y, int z, short blkid) { + private void setBlock(final short[][] result, final int x, final int y, final int z, final short blkid) { if (result[y >> 4] == null) { result[y >> 4] = new short[4096]; } result[y >> 4][((y & 0xF) << 8) | (z << 4) | x] = blkid; } - + /** * Return the block populator */ @@ -224,7 +211,7 @@ public class HybridGen extends PlotGenerator { // populator, ore populator return Arrays.asList((BlockPopulator) new HybridPop(this.plotworld)); } - + /** * Return the default spawn location for this world */ @@ -232,47 +219,40 @@ public class HybridGen extends PlotGenerator { public Location getFixedSpawnLocation(final World world, final Random random) { return new Location(world, 0, this.plotworld.ROAD_HEIGHT + 2, 0); } - + /** * This part is a fucking mess. - Refer to a proper tutorial if you would like to learn how to make a world * generator */ @Override - public short[][] generateExtBlockSections(final World world, final Random random, int cx, int cz, final BiomeGrid biomes) { - if (doState) { + public short[][] generateExtBlockSections(final World world, final Random random, final int cx, final int cz, final BiomeGrid biomes) { + if (this.doState) { final int prime = 13; int h = 1; h = (prime * h) + cx; h = (prime * h) + cz; this.state = h; } - - this.result = new short[maxY / 16][]; - if (plotworld.PLOT_BEDROCK) { + this.result = new short[this.maxY / 16][]; + if (this.plotworld.PLOT_BEDROCK) { for (short x = 0; x < 16; x++) { for (short z = 0; z < 16; z++) { setBlock(this.result, x, 0, z, (short) 7); } } } - - RegionWrapper plot = ChunkManager.CURRENT_PLOT_CLEAR; + final RegionWrapper plot = AChunkManager.CURRENT_PLOT_CLEAR; if (plot != null) { - - int X = cx << 4; - int Z = cz << 4; - + final int X = cx << 4; + final int Z = cz << 4; int sx = ((X) % this.size); int sz = ((Z) % this.size); - if (sx < 0) { sx += this.size; } - if (sz < 0) { sz += this.size; } - for (short x = 0; x < 16; x++) { for (short z = 0; z < 16; z++) { if (biomes != null) { @@ -283,69 +263,56 @@ public class HybridGen extends PlotGenerator { setBlock(this.result, x, y, z, this.filling); } setBlock(this.result, x, this.plotheight, z, this.plotfloors); - } - else { - ChunkLoc loc = new ChunkLoc(X + x, Z + z); - HashMap blocks = ChunkManager.GENERATE_BLOCKS.get(loc); + } else { + final ChunkLoc loc = new ChunkLoc(X + x, Z + z); + final HashMap blocks = AChunkManager.GENERATE_BLOCKS.get(loc); if (blocks != null) { - for (short y : blocks.keySet()) { + for (final short y : blocks.keySet()) { setBlock(this.result, x, y, z, blocks.get(y).shortValue()); } } } } } - return this.result; } - int sx = ((cx << 4) % this.size); int sz = ((cz << 4) % this.size); - if (sx < 0) { sx += this.size; } - if (sz < 0) { sz += this.size; } - - for (short x = 0; x < 16; x++) { for (short z = 0; z < 16; z++) { - if (biomes != null) { biomes.setBiome(x, z, this.biome); } - - int absX = ((sx + x) % this.size); - int absZ = ((sz + z) % this.size); - - boolean gx = absX > pathWidthLower; - boolean gz = absZ > pathWidthLower; - - boolean lx = absX < pathWidthUpper; - boolean lz = absZ < pathWidthUpper; - + final int absX = ((sx + x) % this.size); + final int absZ = ((sz + z) % this.size); + final boolean gx = absX > this.pathWidthLower; + final boolean gz = absZ > this.pathWidthLower; + final boolean lx = absX < this.pathWidthUpper; + final boolean lz = absZ < this.pathWidthUpper; // inside plot if (gx && gz && lx && lz) { for (short y = 1; y < this.plotheight; y++) { setBlock(this.result, x, y, z, this.filling); } setBlock(this.result, x, this.plotheight, z, this.plotfloors); - if (plotworld.PLOT_SCHEMATIC) { - ChunkLoc loc = new ChunkLoc(absX, absZ); - HashMap blocks = this.plotworld.G_SCH.get(loc); + if (this.plotworld.PLOT_SCHEMATIC) { + final ChunkLoc loc = new ChunkLoc(absX, absZ); + final HashMap blocks = this.plotworld.G_SCH.get(loc); if (blocks != null) { - for (short y : blocks.keySet()) { - setBlock(this.result, x, this.plotheight + y, z, blocks.get(y)); + for (final short y : blocks.keySet()) { + setBlock(this.result, x, this.plotheight + y, z, blocks.get(y)); } } } } else { // wall - if ((absX >= pathWidthLower && absX <= pathWidthUpper && absZ >= pathWidthLower && absZ <= pathWidthUpper)) - { + if (((absX >= this.pathWidthLower) && (absX <= this.pathWidthUpper) && (absZ >= this.pathWidthLower) && (absZ <= this.pathWidthUpper))) { for (short y = 1; y <= this.wallheight; y++) { setBlock(this.result, x, y, z, this.wallfilling); } @@ -360,11 +327,11 @@ public class HybridGen extends PlotGenerator { } } if (this.plotworld.ROAD_SCHEMATIC_ENABLED) { - ChunkLoc loc = new ChunkLoc(absX, absZ); - HashMap blocks = this.plotworld.G_SCH.get(loc); + final ChunkLoc loc = new ChunkLoc(absX, absZ); + final HashMap blocks = this.plotworld.G_SCH.get(loc); if (blocks != null) { - for (short y : blocks.keySet()) { - setBlock(this.result, x, this.roadheight + y, z, blocks.get(y)); + for (final short y : blocks.keySet()) { + setBlock(this.result, x, this.roadheight + y, z, blocks.get(y)); } } } @@ -374,7 +341,7 @@ public class HybridGen extends PlotGenerator { return this.result; } - public boolean isIn(RegionWrapper plot, int x, int z) { - return (x >= plot.minX && x <= plot.maxX && z >= plot.minZ && z <= plot.maxZ); + public boolean isIn(final RegionWrapper plot, final int x, final int z) { + return ((x >= plot.minX) && (x <= plot.maxX) && (z >= plot.minZ) && (z <= plot.maxZ)); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java index 187ae8c37..90bf4e149 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotManager.java @@ -18,371 +18,19 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.generator; -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; - -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; -import org.bukkit.plugin.Plugin; - -import com.intellectualcrafters.jnbt.CompoundTag; -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotBlock; -import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.AbstractSetBlock; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.SchematicHandler; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.TaskManager; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; -@SuppressWarnings("deprecation") public class HybridPlotManager extends ClassicPlotManager { - - private static boolean UPDATE = false; - private int task; +@SuppressWarnings("deprecation") +public class HybridPlotManager extends ClassicPlotManager { - public static boolean checkModified(Plot plot, int requiredChanges) { - World world = Bukkit.getWorld(plot.world); - Location bottom = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); - Location top = PlotHelper.getPlotTopLoc(world, plot.id); - - int botx = bottom.getBlockX(); - int botz = bottom.getBlockZ(); - - int topx = top.getBlockX(); - int topz = top.getBlockZ(); - - HybridPlotWorld hpw = (HybridPlotWorld) PlotMain.getWorldSettings(world); - - PlotBlock[] air = new PlotBlock[] {new PlotBlock((short) 0, (byte) 0)}; - - int changes = checkModified(requiredChanges, world, botx, topx, hpw.PLOT_HEIGHT, hpw.PLOT_HEIGHT, botz, topz, hpw.TOP_BLOCK); - if (changes == -1) { - return true; - } - requiredChanges -= changes; - changes = checkModified(requiredChanges, world, botx, topx, hpw.PLOT_HEIGHT + 1, hpw.PLOT_HEIGHT + 1, botz, topz, air); - if (changes == -1) { - return true; - } - requiredChanges -= changes; - changes = checkModified(requiredChanges, world, botx, topx, hpw.PLOT_HEIGHT + 2, world.getMaxHeight() - 1, botz, topz, air); - if (changes == -1) { - return true; - } - requiredChanges -= changes; - changes = checkModified(requiredChanges, world, botx, topx, 1, hpw.PLOT_HEIGHT - 1, botz, topz, hpw.MAIN_BLOCK); - return changes == -1; - } - - public static int checkModified(int threshhold, World world, int x1, int x2, int y1, int y2, int z1, int z2, PlotBlock[] blocks) { - int count = 0; - for (int y = y1; y <= y2; y++) { - for (int x = x1; x <= x2; x++) { - for (int z = z1; z <= z2; z++) { - Block block = world.getBlockAt(x, y, z); - int id = block.getTypeId(); - boolean same = false; - for (PlotBlock p : blocks) { - if (id == p.id) { - same = true; - break; - } - } - if (!same) { - count++; - if (count > threshhold) { - return -1; - } - } - } - } - } - return count; - } - - public boolean setupRoadSchematic(Plot plot) { - World world = Bukkit.getWorld(plot.world); - - Location bot = PlotHelper.getPlotBottomLoc(world, plot.id); - Location top = PlotHelper.getPlotTopLoc(world, plot.id); - - HybridPlotWorld plotworld = (HybridPlotWorld) PlotMain.getWorldSettings(world); - - int sx = bot.getBlockX() - plotworld.ROAD_WIDTH + 1; - int sz = bot.getBlockZ() + 1; - int sy = plotworld.ROAD_HEIGHT; - - int ex = bot.getBlockX(); - int ez = top.getBlockZ(); - int ey = get_ey(world, sx, ex, sz, ez, sy); - - Location pos1 = new Location(world, sx, sy, sz); - Location pos2 = new Location(world, ex, ey, ez); - - int bx = sx; - int bz = sz - plotworld.ROAD_WIDTH; - int by = sy; - - int tx = ex; - int tz = sz - 1; - int ty = get_ey(world, bx, tx, bz, tz, by); - - Location pos3 = new Location(world, bx, by, bz); - Location pos4 = new Location(world, tx, ty, tz); - - CompoundTag sideroad = SchematicHandler.getCompoundTag(world, pos1, pos2); - CompoundTag intersection = SchematicHandler.getCompoundTag(world, pos3, pos4); - - String dir = PlotMain.getMain().getDataFolder() + File.separator + "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + plot.world + File.separator; - - SchematicHandler.save(sideroad, dir + "sideroad.schematic"); - SchematicHandler.save(intersection, dir + "intersection.schematic"); - - plotworld.ROAD_SCHEMATIC_ENABLED = true; - plotworld.setupSchematics(); - - return true; - } - - public int get_ey(World world, int sx, int ex, int sz, int ez, int sy) { - int maxY = world.getMaxHeight(); - int ey = sy; - for (int x = sx; x <= ex; x++) { - for (int z = sz; z <= ez; z++) { - for (int y = sy; y < maxY; y++) { - if (y > ey) { - Block block = world.getBlockAt(new Location(world, x, y, z)); - if (block.getTypeId() !=0) { - ey = y; - } - } - } - } - } - return ey; - } - - public void regenerateChunkChunk(World world, ChunkLoc loc) { - - int sx = loc.x << 5; - int sz = loc.z << 5; - - for (int x = sx; x < sx + 32; x++) { - for (int z = sz; z < sz + 32; z++) { - Chunk chunk = world.getChunkAt(x, z); - chunk.load(false); - } - } - - ArrayList chunks2 = new ArrayList<>(); - for (int x = sx; x < sx + 32; x++) { - for (int z = sz; z < sz + 32; z++) { - Chunk chunk = world.getChunkAt(x, z); - chunks2.add(chunk); - regenerateRoad(chunk); - } - } - AbstractSetBlock.setBlockManager.update(chunks2); - } - - public boolean scheduleRoadUpdate(final World world) { - if (HybridPlotManager.UPDATE) { - return false; - } - final ArrayList chunks = ChunkManager.getChunkChunks(world); - - final Plugin plugin = (Plugin) PlotMain.getMain(); - this.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { - @Override - public void run() { - if (chunks.size() == 0) { - HybridPlotManager.UPDATE = false; - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "Finished road conversion"); - Bukkit.getScheduler().cancelTask(task); - return; - } - else { - try { - ChunkLoc loc = chunks.get(0); - PlotMain.sendConsoleSenderMessage("Updating .mcr: " + loc.x + ", "+loc.z + " (aprrox 256 chunks)"); - PlotMain.sendConsoleSenderMessage("Remaining regions: "+chunks.size()); - regenerateChunkChunk(world, loc); - chunks.remove(0); - } - catch (Exception e) { - ChunkLoc loc = chunks.get(0); - PlotMain.sendConsoleSenderMessage("&c[ERROR]&7 Could not update '"+world.getName() + "/region/r." + loc.x + "." + loc.z + ".mca' (Corrupt chunk?)"); - PlotMain.sendConsoleSenderMessage("&d - Potentially skipping 256 chunks"); - PlotMain.sendConsoleSenderMessage("&d - TODO: recommend chunkster if corrupt"); - } - } - } - }, 20, 20); - return true; - } - - - public boolean regenerateRoad(Chunk chunk) { - World world = chunk.getWorld(); - int x = chunk.getX() << 4; - int z = chunk.getZ() << 4; - int ex = x + 15; - int ez = z + 15; - - Location bot = new Location(world, x, 0, z); - Location top = new Location(world, ex, 0, ez); - - HybridPlotWorld plotworld = (HybridPlotWorld) PlotMain.getWorldSettings(world); - if (!plotworld.ROAD_SCHEMATIC_ENABLED) { - return false; - } - - PlotId id1 = getPlotId(plotworld, bot); - PlotId id2 = getPlotId(plotworld, top); - - boolean toCheck = false; - - - if (id1 == null || id2 == null || id1 != id2) { - boolean result = chunk.load(false); - if (result) { - - while (!chunk.isLoaded()) { - chunk.load(false); - } - - if (id1 != null) { - Plot p1 = PlotHelper.getPlot(world, id1); - if (p1 != null && p1.hasOwner() && p1.settings.isMerged()) { - toCheck = true; - } - } - if (id2 != null && !toCheck) { - Plot p2 = PlotHelper.getPlot(world, id2); - if (p2 != null && p2.hasOwner() && p2.settings.isMerged()) { - toCheck = true; - } - } - int size = plotworld.SIZE; - for (int X = 0; X < 16; X++) { - for (int Z = 0; Z < 16; Z++) { - - short absX = (short) ((x + X) % size); - short absZ = (short) ((z + Z) % size); - - if (absX < 0) { - absX += size; - } - if (absZ < 0) { - absZ += size; - } - - boolean gx = absX > plotworld.PATH_WIDTH_LOWER; - boolean gz = absZ > plotworld.PATH_WIDTH_LOWER; - boolean lx = absX < plotworld.PATH_WIDTH_UPPER; - boolean lz = absZ < plotworld.PATH_WIDTH_UPPER; - boolean condition; - - if (toCheck) { - Location l = new Location(world, x + X, 1, z + Z); - condition = getPlotId(plotworld, l) == null; - } - else { condition = (!gx || !gz || !lx || !lz); } - - if (condition) { - int sy = plotworld.ROAD_HEIGHT; - ChunkLoc loc = new ChunkLoc(absX, absZ); - HashMap blocks = plotworld.G_SCH.get(loc); - for (short y = (short) (plotworld.ROAD_HEIGHT + 1); y <= plotworld.ROAD_HEIGHT + plotworld.SCHEMATIC_HEIGHT; y++) { - PlotHelper.setBlock(world, x + X, sy + y, z + Z, 0, (byte) 0); - } - if (blocks != null) { - HashMap datas = plotworld.G_SCH_DATA.get(loc); - if (datas == null) { - for (Short y : blocks.keySet()) { - PlotHelper.setBlock(world, x + X, sy + y, z + Z, blocks.get(y), (byte) 0); - } - } - else { - for (Short y : blocks.keySet()) { - Byte data = datas.get(y); - if (data == null) { - data = 0; - } - PlotHelper.setBlock(world, x + X, sy + y, z + Z, blocks.get(y), data); - } - } - } - } - } - } - return true; - } - } - return false; - } - - @Override - public boolean finishPlotUnlink(final World world, final PlotWorld plotworld, final ArrayList plotIds) { - HybridPlotWorld hpw = (HybridPlotWorld) plotworld; - if (hpw.ROAD_SCHEMATIC_ENABLED) { - for (PlotId id : plotIds) { - Location bottom = getPlotBottomLocAbs(plotworld, id); - int sx = bottom.getBlockX() - hpw.PATH_WIDTH_LOWER; - int sz = bottom.getBlockZ() - hpw.PATH_WIDTH_LOWER; - int sy = hpw.ROAD_HEIGHT; - for (ChunkLoc loc : hpw.G_SCH.keySet()) { - HashMap blocks = hpw.G_SCH.get(loc); - HashMap datas = hpw.G_SCH_DATA.get(loc); - if (datas == null) { - for (Short y : blocks.keySet()) { - PlotHelper.setBlock(world, sx + loc.x, sy + y, sz + loc.z, blocks.get(y), (byte) 0); - } - } - else { - for (Short y : blocks.keySet()) { - Byte data = datas.get(y); - if (data == null) { - data = 0; - } - PlotHelper.setBlock(world, sx + loc.x, sy + y, sz + loc.z, blocks.get(y), data); - } - } - } - - } - } - PlotBlock block = ((ClassicPlotWorld) plotworld).WALL_BLOCK; - if (block.id != 0) { - for (PlotId id : plotIds) { - setWall(world, plotworld, id, new PlotBlock[] {(( ClassicPlotWorld) plotworld).WALL_BLOCK }); - Plot plot = PlotHelper.getPlot(world, id); - if (plot.hasOwner()) { - String name = UUIDHandler.getName(plot.owner); - if (name != null) { - PlotHelper.setSign(world, name, plot); - } - } - } - } - return true; - } - - /** * Clearing the plot needs to only consider removing the blocks - This implementation has used the SetCuboid * function, as it is fast, and uses NMS code - It also makes use of the fact that deleting chunks is a lot faster @@ -390,364 +38,336 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * to have 512x512 sized plots */ @Override - public boolean clearPlot(final World world, final PlotWorld plotworld, final Plot plot, final boolean isDelete, final Runnable whenDone) { - PlotHelper.runners.put(plot, 1); - final Plugin plugin = PlotMain.getMain(); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + public boolean clearPlot(final PlotWorld plotworld, final Plot plot, final boolean isDelete, final Runnable whenDone) { + final String world = plotworld.worldname; + MainUtil.runners.put(plot, 1); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.runners.remove(plot); + MainUtil.runners.remove(plot); } - }, 90L); - + }, 90); final HybridPlotWorld dpw = ((HybridPlotWorld) plotworld); - - final Location pos1 = PlotHelper.getPlotBottomLocAbs(world, plot.id).add(1, 0, 1); - final Location pos2 = PlotHelper.getPlotTopLocAbs(world, plot.id); - + final Location pos1 = MainUtil.getPlotBottomLocAbs(world, plot.id).add(1, 0, 1); + final Location pos2 = MainUtil.getPlotTopLocAbs(world, plot.id); final PlotBlock[] plotfloor = dpw.TOP_BLOCK; final PlotBlock[] filling = dpw.MAIN_BLOCK; - // PlotBlock wall = dpw.WALL_BLOCK; final PlotBlock wall; - if (isDelete) { wall = dpw.WALL_BLOCK; } else { wall = dpw.CLAIMED_WALL_BLOCK; } - final PlotBlock wall_filling = dpw.WALL_FILLING; - - final Block block = world.getBlockAt(new Location(world, pos1.getBlockX() - 1, 1, pos1.getBlockZ())); - - if ((block.getTypeId() != wall_filling.id) || (block.getData() != wall_filling.data)) { - setWallFilling(world, dpw, plot.id, new PlotBlock[] {wall_filling}); - } - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + setWallFilling(dpw, plot.id, new PlotBlock[] { wall_filling }); + final int maxy = BukkitUtil.getMaxHeight(world); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - - final Block block = world.getBlockAt(new Location(world, pos1.getBlockX() - 1, dpw.WALL_HEIGHT + 1, pos1.getBlockZ())); - if ((block.getTypeId() != wall.id) || (block.getData() != wall.data)) { - setWall(world, dpw, plot.id, new PlotBlock[] {wall}); - } - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + setWall(dpw, plot.id, new PlotBlock[] { wall }); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - if ((pos2.getBlockX() - pos1.getBlockX()) < 48) { - PlotHelper.setSimpleCuboid(world, new Location(world, pos1.getBlockX(), 0, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, 1, pos2.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + if ((pos2.getX() - pos1.getX()) < 48) { + MainUtil.setSimpleCuboid(world, new Location(world, pos1.getX(), 0, pos1.getZ()), new Location(world, pos2.getX() + 1, 1, pos2.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, pos1.getBlockX(), dpw.PLOT_HEIGHT + 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, world.getMaxHeight() + 1, pos2.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT + 1, pos1.getZ()), new Location(world, pos2.getX() + 1, maxy + 1, pos2.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, pos1.getBlockX(), 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, dpw.PLOT_HEIGHT, pos2.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, pos1.getX(), 1, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT, pos2.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, pos1.getBlockX(), dpw.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getZ() + 1), plotfloor); } - }, 5L); + }, 5); } - }, 5L); + }, 5); } - }, 5L); + }, 5); return; } - - final int startX = (pos1.getBlockX() / 16) * 16; - final int startZ = (pos1.getBlockZ() / 16) * 16; - final int chunkX = 16 + pos2.getBlockX(); - final int chunkZ = 16 + pos2.getBlockZ(); - final Location l1 = PlotHelper.getPlotBottomLoc(world, plot.id); - final Location l2 = PlotHelper.getPlotTopLoc(world, plot.id); - final int plotMinX = l1.getBlockX() + 1; - final int plotMinZ = l1.getBlockZ() + 1; - final int plotMaxX = l2.getBlockX(); - final int plotMaxZ = l2.getBlockZ(); + final int startX = (pos1.getX() / 16) * 16; + final int startZ = (pos1.getZ() / 16) * 16; + final int chunkX = 16 + pos2.getX(); + final int chunkZ = 16 + pos2.getZ(); + final Location l1 = MainUtil.getPlotBottomLoc(world, plot.id); + final Location l2 = MainUtil.getPlotTopLoc(world, plot.id); + final int plotMinX = l1.getX() + 1; + final int plotMinZ = l1.getZ() + 1; + final int plotMaxX = l2.getX(); + final int plotMaxZ = l2.getZ(); Location mn = null; Location mx = null; for (int i = startX; i < chunkX; i += 16) { for (int j = startZ; j < chunkZ; j += 16) { - final Plot plot1 = PlotHelper.getCurrentPlot(new Location(world, i, 0, j)); + final Plot plot1 = MainUtil.getPlot(new Location(world, i, 0, j)); if ((plot1 != null) && (!plot1.getId().equals(plot.getId()))) { break; } - final Plot plot2 = PlotHelper.getCurrentPlot(new Location(world, i + 15, 0, j)); + final Plot plot2 = MainUtil.getPlot(new Location(world, i + 15, 0, j)); if ((plot2 != null) && (!plot2.getId().equals(plot.getId()))) { break; } - final Plot plot3 = PlotHelper.getCurrentPlot(new Location(world, i + 15, 0, j + 15)); + final Plot plot3 = MainUtil.getPlot(new Location(world, i + 15, 0, j + 15)); if ((plot3 != null) && (!plot3.getId().equals(plot.getId()))) { break; } - final Plot plot4 = PlotHelper.getCurrentPlot(new Location(world, i, 0, j + 15)); + final Plot plot4 = MainUtil.getPlot(new Location(world, i, 0, j + 15)); if ((plot4 != null) && (!plot4.getId().equals(plot.getId()))) { break; } - final Plot plot5 = PlotHelper.getCurrentPlot(new Location(world, i + 15, 0, j + 15)); + final Plot plot5 = MainUtil.getPlot(new Location(world, i + 15, 0, j + 15)); if ((plot5 != null) && (!plot5.getId().equals(plot.getId()))) { break; } if (mn == null) { mn = new Location(world, Math.max(i - 1, plotMinX), 0, Math.max(j - 1, plotMinZ)); mx = new Location(world, Math.min(i + 16, plotMaxX), 0, Math.min(j + 16, plotMaxZ)); - } else if ((mx.getBlockZ() < (j + 15)) || (mx.getBlockX() < (i + 15))) { + } else if ((mx.getZ() < (j + 15)) || (mx.getX() < (i + 15))) { mx = new Location(world, Math.min(i + 16, plotMaxX), 0, Math.min(j + 16, plotMaxZ)); } - world.regenerateChunk(i / 16, j / 16); + BukkitUtil.regenerateChunk(world, i / 16, j / 16); } } - final Location max = mx; final Location min = mn; - if (min == null) { - PlotHelper.setSimpleCuboid(world, new Location(world, pos1.getBlockX(), 0, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, 1, pos2.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, pos1.getX(), 0, pos1.getZ()), new Location(world, pos2.getX() + 1, 1, pos2.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, pos1.getBlockX(), dpw.PLOT_HEIGHT + 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, world.getMaxHeight() + 1, pos2.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT + 1, pos1.getZ()), new Location(world, pos2.getX() + 1, maxy + 1, pos2.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, pos1.getBlockX(), 1, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, dpw.PLOT_HEIGHT, pos2.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, pos1.getX(), 1, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT, pos2.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, pos1.getBlockX(), dpw.PLOT_HEIGHT, pos1.getBlockZ()), new Location(world, pos2.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getZ() + 1), plotfloor); } - }, 5L); + }, 5); } - }, 5L); + }, 5); } - }, 5L); + }, 5); return; } else { - - if (min.getBlockX() < plotMinX) { + if (min.getX() < plotMinX) { min.setX(plotMinX); } - if (min.getBlockZ() < plotMinZ) { + if (min.getZ() < plotMinZ) { min.setZ(plotMinZ); } - if (max.getBlockX() > plotMaxX) { + if (max.getX() > plotMaxX) { max.setX(plotMaxX); } - if (max.getBlockZ() > plotMaxZ) { + if (max.getZ() > plotMaxZ) { max.setZ(plotMaxZ); } - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, plotMinX, 0, plotMinZ), new Location(world, min.getBlockX() + 1, 1, min.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, plotMinX, 0, plotMinZ), new Location(world, min.getX() + 1, 1, min.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT + 1, plotMinZ), new Location(world, min.getBlockX() + 1, world.getMaxHeight() + 1, min.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT + 1, plotMinZ), new Location(world, min.getX() + 1, maxy + 1, min.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, plotMinX, 1, plotMinZ), new Location(world, min.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, min.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, plotMinX, 1, plotMinZ), new Location(world, min.getX() + 1, dpw.PLOT_HEIGHT + 1, min.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT, plotMinZ), new Location(world, min.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, min.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT, plotMinZ), new Location(world, min.getX() + 1, dpw.PLOT_HEIGHT + 1, min.getZ() + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 21L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 21); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, min.getBlockX(), 0, plotMinZ), new Location(world, max.getBlockX() + 1, 1, min.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, min.getX(), 0, plotMinZ), new Location(world, max.getX() + 1, 1, min.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, min.getBlockX(), dpw.PLOT_HEIGHT + 1, plotMinZ), new Location(world, max.getBlockX() + 1, world.getMaxHeight() + 1, min.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, min.getX(), dpw.PLOT_HEIGHT + 1, plotMinZ), new Location(world, max.getX() + 1, maxy + 1, min.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, min.getBlockX(), 1, plotMinZ), new Location(world, max.getBlockX() + 1, dpw.PLOT_HEIGHT, min.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, min.getX(), 1, plotMinZ), new Location(world, max.getX() + 1, dpw.PLOT_HEIGHT, min.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, min.getBlockX(), dpw.PLOT_HEIGHT, plotMinZ), new Location(world, max.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, min.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, min.getX(), dpw.PLOT_HEIGHT, plotMinZ), new Location(world, max.getX() + 1, dpw.PLOT_HEIGHT + 1, min.getZ() + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 25L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 25); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, max.getBlockX(), 0, plotMinZ), new Location(world, plotMaxX + 1, 1, min.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, max.getX(), 0, plotMinZ), new Location(world, plotMaxX + 1, 1, min.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, max.getBlockX(), dpw.PLOT_HEIGHT + 1, plotMinZ), new Location(world, plotMaxX + 1, world.getMaxHeight() + 1, min.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT + 1, plotMinZ), new Location(world, plotMaxX + 1, maxy + 1, min.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, max.getBlockX(), 1, plotMinZ), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, min.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, max.getX(), 1, plotMinZ), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, min.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, max.getBlockX(), dpw.PLOT_HEIGHT, plotMinZ), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, min.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT, plotMinZ), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, min.getZ() + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 29L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 29); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, plotMinX, 0, min.getBlockZ()), new Location(world, min.getBlockX() + 1, 1, max.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, plotMinX, 0, min.getZ()), new Location(world, min.getX() + 1, 1, max.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT + 1, min.getBlockZ()), new Location(world, min.getBlockX() + 1, world.getMaxHeight() + 1, max.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT + 1, min.getZ()), new Location(world, min.getX() + 1, maxy + 1, max.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, plotMinX, 1, min.getBlockZ()), new Location(world, min.getBlockX() + 1, dpw.PLOT_HEIGHT, max.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, plotMinX, 1, min.getZ()), new Location(world, min.getX() + 1, dpw.PLOT_HEIGHT, max.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT, min.getBlockZ()), new Location(world, min.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, max.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT, min.getZ()), new Location(world, min.getX() + 1, dpw.PLOT_HEIGHT + 1, max.getZ() + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 33L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 33); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, plotMinX, 0, max.getBlockZ()), new Location(world, min.getBlockX() + 1, 1, plotMaxZ + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, plotMinX, 0, max.getZ()), new Location(world, min.getX() + 1, 1, plotMaxZ + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT + 1, max.getBlockZ()), new Location(world, min.getBlockX() + 1, world.getMaxHeight() + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT + 1, max.getZ()), new Location(world, min.getX() + 1, maxy + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, plotMinX, 1, max.getBlockZ()), new Location(world, min.getBlockX() + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, plotMinX, 1, max.getZ()), new Location(world, min.getX() + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT, max.getBlockZ()), new Location(world, min.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, plotMinX, dpw.PLOT_HEIGHT, max.getZ()), new Location(world, min.getX() + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 37L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 37); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, min.getBlockX(), 0, max.getBlockZ()), new Location(world, max.getBlockX() + 1, 1, plotMaxZ + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, min.getX(), 0, max.getZ()), new Location(world, max.getX() + 1, 1, plotMaxZ + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, min.getBlockX(), dpw.PLOT_HEIGHT + 1, max.getBlockZ()), new Location(world, max.getBlockX() + 1, world.getMaxHeight() + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, min.getX(), dpw.PLOT_HEIGHT + 1, max.getZ()), new Location(world, max.getX() + 1, maxy + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, min.getBlockX(), 1, max.getBlockZ()), new Location(world, max.getBlockX() + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, min.getX(), 1, max.getZ()), new Location(world, max.getX() + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, min.getBlockX(), dpw.PLOT_HEIGHT, max.getBlockZ()), new Location(world, max.getBlockX() + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, min.getX(), dpw.PLOT_HEIGHT, max.getZ()), new Location(world, max.getX() + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 41L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 41); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, max.getBlockX(), 0, min.getBlockZ()), new Location(world, plotMaxX + 1, 1, max.getBlockZ() + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, max.getX(), 0, min.getZ()), new Location(world, plotMaxX + 1, 1, max.getZ() + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, max.getBlockX(), dpw.PLOT_HEIGHT + 1, min.getBlockZ()), new Location(world, plotMaxX + 1, world.getMaxHeight() + 1, max.getBlockZ() + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT + 1, min.getZ()), new Location(world, plotMaxX + 1, maxy + 1, max.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, max.getBlockX(), 1, min.getBlockZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, max.getBlockZ() + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, max.getX(), 1, min.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, max.getZ() + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, max.getBlockX(), dpw.PLOT_HEIGHT, min.getBlockZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, max.getBlockZ() + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT, min.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, max.getZ() + 1), plotfloor); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 45L); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + }, 45); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, max.getBlockX(), 0, max.getBlockZ()), new Location(world, plotMaxX + 1, 1, plotMaxZ + 1), new PlotBlock((short) 7, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, max.getX(), 0, max.getZ()), new Location(world, plotMaxX + 1, 1, plotMaxZ + 1), new PlotBlock((short) 7, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setSimpleCuboid(world, new Location(world, max.getBlockX(), dpw.PLOT_HEIGHT + 1, max.getBlockZ()), new Location(world, plotMaxX + 1, world.getMaxHeight() + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setSimpleCuboid(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT + 1, max.getZ()), new Location(world, plotMaxX + 1, maxy + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, max.getBlockX(), 1, max.getBlockZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + MainUtil.setCuboid(world, new Location(world, max.getX(), 1, max.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - PlotHelper.setCuboid(world, new Location(world, max.getBlockX(), dpw.PLOT_HEIGHT, max.getBlockZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); + MainUtil.setCuboid(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT, max.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); TaskManager.runTask(whenDone); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 1L); + }, 1); } - }, 49L); + }, 49); } } - }, 20L); + }, 20); } - }, 20L); + }, 20); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java index 24298dc70..ad22096c0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPlotWorld.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.generator; import java.util.HashMap; @@ -26,7 +25,7 @@ import java.util.HashMap; import org.apache.commons.lang.StringUtils; import org.bukkit.configuration.ConfigurationSection; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Configuration; import com.intellectualcrafters.plot.object.ChunkLoc; @@ -41,10 +40,9 @@ public class HybridPlotWorld extends ClassicPlotWorld { public short SCHEMATIC_HEIGHT; public boolean PLOT_SCHEMATIC = false; public short REQUIRED_CHANGES = 0; - public short PATH_WIDTH_LOWER; public short PATH_WIDTH_UPPER; - + /* * Here we are just calling the super method, nothing special */ @@ -62,7 +60,7 @@ public class HybridPlotWorld extends ClassicPlotWorld { @Override public void loadConfiguration(final ConfigurationSection config) { if (!config.contains("plot.height")) { - PlotMain.sendConsoleSenderMessage(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); + PlotSquared.log(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); } this.PLOT_BEDROCK = config.getBoolean("plot.bedrock"); this.PLOT_HEIGHT = Math.min(255, config.getInt("plot.height")); @@ -76,118 +74,102 @@ public class HybridPlotWorld extends ClassicPlotWorld { this.WALL_FILLING = (PlotBlock) Configuration.BLOCK.parseString(config.getString("wall.filling")); this.WALL_HEIGHT = Math.min(254, config.getInt("wall.height")); this.CLAIMED_WALL_BLOCK = (PlotBlock) Configuration.BLOCK.parseString(config.getString("wall.block_claimed")); - this.SIZE = (short) (this.PLOT_WIDTH + this.ROAD_WIDTH); - if ((this.ROAD_WIDTH % 2) == 0) { - PATH_WIDTH_LOWER = (short) (Math.floor(this.ROAD_WIDTH / 2) - 1); + this.PATH_WIDTH_LOWER = (short) (Math.floor(this.ROAD_WIDTH / 2) - 1); } else { - PATH_WIDTH_LOWER = (short) (Math.floor(this.ROAD_WIDTH / 2)); + this.PATH_WIDTH_LOWER = (short) (Math.floor(this.ROAD_WIDTH / 2)); } - this.PATH_WIDTH_UPPER = (short) (this.PATH_WIDTH_LOWER + this.PLOT_WIDTH + 1); try { setupSchematics(); - } catch (Exception e) { - PlotMain.sendConsoleSenderMessage("&c - road schematics are disabled for this world."); + } catch (final Exception e) { + PlotSquared.log("&c - road schematics are disabled for this world."); this.ROAD_SCHEMATIC_ENABLED = false; } System.out.print("LOADED!"); } public void setupSchematics() { - G_SCH_DATA = new HashMap<>(); - G_SCH = new HashMap<>(); - String schem1Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/sideroad"; - String schem2Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/intersection"; - String schem3Str = "GEN_ROAD_SCHEMATIC/" + worldname + "/plot"; - - Schematic schem1 = SchematicHandler.getSchematic(schem1Str); - Schematic schem2 = SchematicHandler.getSchematic(schem2Str); - Schematic schem3 = SchematicHandler.getSchematic(schem3Str); - - int shift = (int) Math.floor(this.ROAD_WIDTH / 2); + this.G_SCH_DATA = new HashMap<>(); + this.G_SCH = new HashMap<>(); + final String schem1Str = "GEN_ROAD_SCHEMATIC/" + this.worldname + "/sideroad"; + final String schem2Str = "GEN_ROAD_SCHEMATIC/" + this.worldname + "/intersection"; + final String schem3Str = "GEN_ROAD_SCHEMATIC/" + this.worldname + "/plot"; + final Schematic schem1 = SchematicHandler.getSchematic(schem1Str); + final Schematic schem2 = SchematicHandler.getSchematic(schem2Str); + final Schematic schem3 = SchematicHandler.getSchematic(schem3Str); + final int shift = (int) Math.floor(this.ROAD_WIDTH / 2); int oddshift = 0; - if (this.ROAD_WIDTH % 2 != 0) { + if ((this.ROAD_WIDTH % 2) != 0) { oddshift = 1; } - if (schem3 != null) { - PLOT_SCHEMATIC = true; - DataCollection[] blocks3 = schem3.getBlockCollection(); - Dimension d3 = schem3.getSchematicDimension(); - short w3 = (short) d3.getX(); - short l3 = (short) d3.getZ(); - short h3 = (short) d3.getY(); - + this.PLOT_SCHEMATIC = true; + final DataCollection[] blocks3 = schem3.getBlockCollection(); + final Dimension d3 = schem3.getSchematicDimension(); + final short w3 = (short) d3.getX(); + final short l3 = (short) d3.getZ(); + final short h3 = (short) d3.getY(); int center_shift_x = 0; int center_shift_z = 0; - if (l3 < PLOT_WIDTH) { - center_shift_z = (int) ((PLOT_WIDTH - l3)/2); + if (l3 < this.PLOT_WIDTH) { + center_shift_z = (this.PLOT_WIDTH - l3) / 2; } - if (w3 < PLOT_WIDTH) { - center_shift_x = (int) ((PLOT_WIDTH - w3)/2); + if (w3 < this.PLOT_WIDTH) { + center_shift_x = (this.PLOT_WIDTH - w3) / 2; } - for (short x = 0; x < w3; x++) { for (short z = 0; z < l3; z++) { for (short y = 0; y < h3; y++) { - int index = y * w3 * l3 + z * w3 + x; - short id = blocks3[index].getBlock(); - byte data = blocks3[index].getData(); + final int index = (y * w3 * l3) + (z * w3) + x; + final short id = blocks3[index].getBlock(); + final byte data = blocks3[index].getData(); if (id != 0) { - addOverlayBlock((short) (x + shift + oddshift + center_shift_x), (short) (y), (short) (z + shift + oddshift + center_shift_z), id, data, false); + addOverlayBlock((short) (x + shift + oddshift + center_shift_x), (y), (short) (z + shift + oddshift + center_shift_z), id, data, false); } } } } } - - if (schem1 == null || schem2 == null || this.ROAD_WIDTH == 0) { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&3 - schematic: &7false"); + if ((schem1 == null) || (schem2 == null) || (this.ROAD_WIDTH == 0)) { + PlotSquared.log(C.PREFIX.s() + "&3 - schematic: &7false"); return; } // Do not populate road if using schematic population this.ROAD_BLOCK = new PlotBlock(this.ROAD_BLOCK.id, (byte) 0); - - DataCollection[] blocks1 = schem1.getBlockCollection(); - DataCollection[] blocks2 = schem2.getBlockCollection(); - - Dimension d1 = schem1.getSchematicDimension(); - short w1 = (short) d1.getX(); - short l1 = (short) d1.getZ(); - short h1 = (short) d1.getY(); - - Dimension d2 = schem2.getSchematicDimension(); - short w2 = (short) d2.getX(); - short l2 = (short) d2.getZ(); - short h2 = (short) d2.getY(); + final DataCollection[] blocks1 = schem1.getBlockCollection(); + final DataCollection[] blocks2 = schem2.getBlockCollection(); + final Dimension d1 = schem1.getSchematicDimension(); + final short w1 = (short) d1.getX(); + final short l1 = (short) d1.getZ(); + final short h1 = (short) d1.getY(); + final Dimension d2 = schem2.getSchematicDimension(); + final short w2 = (short) d2.getX(); + final short l2 = (short) d2.getZ(); + final short h2 = (short) d2.getY(); this.SCHEMATIC_HEIGHT = (short) Math.max(h2, h1); - for (short x = 0; x < w1; x++) { for (short z = 0; z < l1; z++) { for (short y = 0; y < h1; y++) { - int index = y * w1 * l1 + z * w1 + x; - - short id = blocks1[index].getBlock(); - byte data = blocks1[index].getData(); - + final int index = (y * w1 * l1) + (z * w1) + x; + final short id = blocks1[index].getBlock(); + final byte data = blocks1[index].getData(); if (id != 0) { - addOverlayBlock((short) (x - (shift)), (short) (y), (short) (z + shift + oddshift), id, data, false); - addOverlayBlock((short) (z + shift + oddshift), (short) (y), (short) (x - shift), id, data, true); + addOverlayBlock((short) (x - (shift)), (y), (short) (z + shift + oddshift), id, data, false); + addOverlayBlock((short) (z + shift + oddshift), (y), (short) (x - shift), id, data, true); } } } } - for (short x = 0; x < w2; x++) { for (short z = 0; z < l2; z++) { for (short y = 0; y < h2; y++) { - int index = y * w2 * l2 + z * w2 + x; - short id = blocks2[index].getBlock(); - byte data = blocks2[index].getData(); + final int index = (y * w2 * l2) + (z * w2) + x; + final short id = blocks2[index].getBlock(); + final byte data = blocks2[index].getData(); if (id != 0) { - addOverlayBlock((short) (x - shift), (short) (y), (short) (z - shift), id, data, false); + addOverlayBlock((short) (x - shift), (y), (short) (z - shift), id, data, false); } } } @@ -195,7 +177,7 @@ public class HybridPlotWorld extends ClassicPlotWorld { this.ROAD_SCHEMATIC_ENABLED = true; } - public static boolean isRotate(short id) { + public static boolean isRotate(final short id) { switch (id) { case 23: return true; @@ -312,31 +294,28 @@ public class HybridPlotWorld extends ClassicPlotWorld { } } - public void addOverlayBlock(short x, short y, short z, short id, byte data, boolean rotate) { + public void addOverlayBlock(short x, final short y, short z, final short id, byte data, final boolean rotate) { if (z < 0) { z += this.SIZE; } if (x < 0) { x += this.SIZE; } - ChunkLoc loc = new ChunkLoc(x, z); + final ChunkLoc loc = new ChunkLoc(x, z); if (!this.G_SCH.containsKey(loc)) { this.G_SCH.put(loc, new HashMap()); } - this.G_SCH.get(loc).put(y, id); if (isRotate(id)) { if (rotate) { data = (byte) ((data + 2) % 4); } - } - else if (data == 0) { + } else if (data == 0) { return; } if (!this.G_SCH_DATA.containsKey(loc)) { this.G_SCH_DATA.put(loc, new HashMap()); } - this.G_SCH_DATA.get(loc).put(y, data); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPop.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPop.java index edeff424e..a4cd724d5 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPop.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridPop.java @@ -8,23 +8,21 @@ import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.generator.BlockPopulator; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.RegionWrapper; -import com.intellectualcrafters.plot.util.ChunkManager; +import com.intellectualcrafters.plot.util.AChunkManager; /** * @author Citymonstret */ public class HybridPop extends BlockPopulator { - /* * Sorry, this isn't well documented at the moment. * We advise you to take a look at a world generation tutorial for * information about how a BlockPopulator works. */ - final short plotsize; final short pathsize; final byte wall; @@ -46,24 +44,18 @@ public class HybridPop extends BlockPopulator { private boolean doFilling = false; private boolean doFloor = false; private boolean doState = false; - + public HybridPop(final PlotWorld pw) { this.plotworld = (HybridPlotWorld) pw; - // save configuration - this.plotsize = (short) this.plotworld.PLOT_WIDTH; this.pathsize = (short) this.plotworld.ROAD_WIDTH; - this.roadblock = this.plotworld.ROAD_BLOCK.data; - this.wallfilling = this.plotworld.WALL_FILLING.data; this.size = this.pathsize + this.plotsize; this.wall = this.plotworld.WALL_BLOCK.data; - int count1 = 0; int count2 = 0; - this.plotfloors = new byte[this.plotworld.TOP_BLOCK.length]; for (int i = 0; i < this.plotworld.TOP_BLOCK.length; i++) { count1++; @@ -72,7 +64,6 @@ public class HybridPop extends BlockPopulator { this.doFloor = true; } } - this.filling = new byte[this.plotworld.MAIN_BLOCK.length]; for (int i = 0; i < this.plotworld.MAIN_BLOCK.length; i++) { count2++; @@ -81,88 +72,77 @@ public class HybridPop extends BlockPopulator { this.doFilling = true; } } - - if ((count1 > 0 && doFloor) || (count2 > 0 && doFilling)) { - doState = true; + if (((count1 > 0) && this.doFloor) || ((count2 > 0) && this.doFilling)) { + this.doState = true; } - this.wallheight = this.plotworld.WALL_HEIGHT; this.roadheight = this.plotworld.ROAD_HEIGHT; this.plotheight = this.plotworld.PLOT_HEIGHT; - if ((this.pathsize % 2) == 0) { this.pathWidthLower = (short) (Math.floor(this.pathsize / 2) - 1); } else { this.pathWidthLower = (short) (Math.floor(this.pathsize / 2)); } - this.pathWidthUpper = (short) (this.pathWidthLower + this.plotsize + 1); } - + public final long nextLong() { final long a = this.state; this.state = xorShift64(a); return a; } - + public final long xorShift64(long a) { a ^= (a << 21); a ^= (a >>> 35); a ^= (a << 4); return a; } - + public final int random(final int n) { final long result = ((nextLong() >>> 32) * n) >> 32; return (int) result; } - + @Override public void populate(final World w, final Random r, final Chunk c) { - int cx = c.getX(), cz = c.getZ(); - - if (doState) { + final int cx = c.getX(), cz = c.getZ(); + if (this.doState) { final int prime = 13; int h = 1; h = (prime * h) + cx; h = (prime * h) + cz; this.state = h; } - this.X = cx << 4; this.Z = cz << 4; - - HybridPlotManager manager = (HybridPlotManager) PlotMain.getPlotManager(w); - RegionWrapper plot = ChunkManager.CURRENT_PLOT_CLEAR; + final HybridPlotManager manager = (HybridPlotManager) PlotSquared.getPlotManager(w.getName()); + final RegionWrapper plot = AChunkManager.CURRENT_PLOT_CLEAR; if (plot != null) { - short sx = (short) ((X) % this.size); - short sz = (short) ((Z) % this.size); - + short sx = (short) ((this.X) % this.size); + short sz = (short) ((this.Z) % this.size); if (sx < 0) { sx += this.size; } - if (sz < 0) { sz += this.size; } - for (short x = 0; x < 16; x++) { for (short z = 0; z < 16; z++) { - if (isIn(plot, X + x, Z + z)) { - if (doFilling) { + if (isIn(plot, this.X + x, this.Z + z)) { + if (this.doFilling) { for (short y = 1; y < this.plotheight; y++) { setBlock(w, x, y, z, this.filling); } } - if (doFloor) { - setBlock(w, x,(short) this.plotheight, z, this.plotfloors); + if (this.doFloor) { + setBlock(w, x, (short) this.plotheight, z, this.plotfloors); } - } - else { - ChunkLoc loc = new ChunkLoc(X + x, Z + z); - HashMap data = ChunkManager.GENERATE_DATA.get(loc); + } else { + final ChunkLoc loc = new ChunkLoc(this.X + x, this.Z + z); + final HashMap data = AChunkManager.GENERATE_DATA.get(loc); if (data != null) { - for (short y : data.keySet()) { + for (final short y : data.keySet()) { setBlock(w, x, y, z, data.get(y).byteValue()); } } @@ -171,51 +151,42 @@ public class HybridPop extends BlockPopulator { } return; } - - short sx = (short) ((X) % this.size); - short sz = (short) ((Z) % this.size); - + short sx = (short) ((this.X) % this.size); + short sz = (short) ((this.Z) % this.size); if (sx < 0) { sx += this.size; } - if (sz < 0) { sz += this.size; } - // Setting biomes for (short x = 0; x < 16; x++) { for (short z = 0; z < 16; z++) { - - short absX = (short) ((sx + x) % this.size); - short absZ = (short) ((sz + z) % this.size); - - boolean gx = absX > pathWidthLower; - boolean gz = absZ > pathWidthLower; - - boolean lx = absX < pathWidthUpper; - boolean lz = absZ < pathWidthUpper; - + final short absX = (short) ((sx + x) % this.size); + final short absZ = (short) ((sz + z) % this.size); + final boolean gx = absX > this.pathWidthLower; + final boolean gz = absZ > this.pathWidthLower; + final boolean lx = absX < this.pathWidthUpper; + final boolean lz = absZ < this.pathWidthUpper; // inside plot if (gx && gz && lx && lz) { - if (doFilling) { + if (this.doFilling) { for (short y = 1; y < this.plotheight; y++) { setBlock(w, x, y, z, this.filling); } } - if (doFloor) { + if (this.doFloor) { setBlock(w, x, (short) this.plotheight, z, this.plotfloors); } } else { // wall - if ((absX >= pathWidthLower && absX <= pathWidthUpper && absZ >= pathWidthLower && absZ <= pathWidthUpper)) - { + if (((absX >= this.pathWidthLower) && (absX <= this.pathWidthUpper) && (absZ >= this.pathWidthLower) && (absZ <= this.pathWidthUpper))) { if (this.wallfilling != 0) { for (short y = 1; y <= this.wallheight; y++) { setBlock(w, x, y, z, this.wallfilling); } } - if (this.wall != 0 && !this.plotworld.ROAD_SCHEMATIC_ENABLED) { + if ((this.wall != 0) && !this.plotworld.ROAD_SCHEMATIC_ENABLED) { setBlock(w, x, (short) (this.wallheight + 1), z, this.wall); } } @@ -228,11 +199,11 @@ public class HybridPop extends BlockPopulator { } } if (this.plotworld.ROAD_SCHEMATIC_ENABLED) { - ChunkLoc loc = new ChunkLoc(absX, absZ); - HashMap blocks = this.plotworld.G_SCH_DATA.get(loc); + final ChunkLoc loc = new ChunkLoc(absX, absZ); + final HashMap blocks = this.plotworld.G_SCH_DATA.get(loc); if (blocks != null) { - for (short y : blocks.keySet()) { - setBlock(w, x, (short) (this.roadheight + y), z, blocks.get(y)); + for (final short y : blocks.keySet()) { + setBlock(w, x, (short) (this.roadheight + y), z, blocks.get(y)); } } } @@ -240,12 +211,11 @@ public class HybridPop extends BlockPopulator { } } } - - private void setBlock(final World w, short x, short y, short z, byte[] blkids) { + + private void setBlock(final World w, final short x, final short y, final short z, final byte[] blkids) { if (blkids.length == 1) { setBlock(w, x, y, z, blkids[0]); - } - else { + } else { final int i = random(blkids.length); setBlock(w, x, y, z, blkids[i]); } @@ -256,8 +226,7 @@ public class HybridPop extends BlockPopulator { w.getBlockAt(this.X + x, y, this.Z + z).setData(val, false); } - public boolean isIn(RegionWrapper plot, int x, int z) { - return (x >= plot.minX && x <= plot.maxX && z >= plot.minZ && z <= plot.maxZ); + public boolean isIn(final RegionWrapper plot, final int x, final int z) { + return ((x >= plot.minX) && (x <= plot.maxX) && (z >= plot.minZ) && (z <= plot.maxZ)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java new file mode 100644 index 000000000..2ba65f1c9 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/HybridUtils.java @@ -0,0 +1,171 @@ +package com.intellectualcrafters.plot.generator; + +import java.io.File; +import java.util.HashMap; + +import com.intellectualcrafters.jnbt.CompoundTag; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.SchematicHandler; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; + +public abstract class HybridUtils { + + public static HybridUtils manager; + + public boolean checkModified(final Plot plot, int requiredChanges) { + final Location bottom = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1); + final Location top = MainUtil.getPlotTopLoc(plot.world, plot.id); + final int botx = bottom.getX(); + final int botz = bottom.getZ(); + final int topx = top.getX(); + final int topz = top.getZ(); + final HybridPlotWorld hpw = (HybridPlotWorld) PlotSquared.getPlotWorld(plot.world); + final PlotBlock[] air = new PlotBlock[] { new PlotBlock((short) 0, (byte) 0) }; + int changes = checkModified(requiredChanges, plot.world, botx, topx, hpw.PLOT_HEIGHT, hpw.PLOT_HEIGHT, botz, topz, hpw.TOP_BLOCK); + if (changes == -1) { + return true; + } + requiredChanges -= changes; + changes = checkModified(requiredChanges, plot.world, botx, topx, hpw.PLOT_HEIGHT + 1, hpw.PLOT_HEIGHT + 1, botz, topz, air); + if (changes == -1) { + return true; + } + requiredChanges -= changes; + changes = checkModified(requiredChanges, plot.world, botx, topx, hpw.PLOT_HEIGHT + 2, BukkitUtil.getMaxHeight(plot.world) - 1, botz, topz, air); + if (changes == -1) { + return true; + } + requiredChanges -= changes; + changes = checkModified(requiredChanges, plot.world, botx, topx, 1, hpw.PLOT_HEIGHT - 1, botz, topz, hpw.MAIN_BLOCK); + return changes == -1; + } + + public abstract int checkModified(final int threshhold, final String world, final int x1, final int x2, final int y1, final int y2, final int z1, final int z2, final PlotBlock[] blocks); + + public boolean setupRoadSchematic(final Plot plot) { + final String world = plot.world; + final Location bot = MainUtil.getPlotBottomLoc(world, plot.id); + final Location top = MainUtil.getPlotTopLoc(world, plot.id); + final HybridPlotWorld plotworld = (HybridPlotWorld) PlotSquared.getPlotWorld(world); + final int sx = (bot.getX() - plotworld.ROAD_WIDTH) + 1; + final int sz = bot.getZ() + 1; + final int sy = plotworld.ROAD_HEIGHT; + final int ex = bot.getX(); + final int ez = top.getZ(); + final int ey = get_ey(world, sx, ex, sz, ez, sy); + final Location pos1 = new Location(world, sx, sy, sz); + final Location pos2 = new Location(world, ex, ey, ez); + final int bx = sx; + final int bz = sz - plotworld.ROAD_WIDTH; + final int by = sy; + final int tx = ex; + final int tz = sz - 1; + final int ty = get_ey(world, bx, tx, bz, tz, by); + final Location pos3 = new Location(world, bx, by, bz); + final Location pos4 = new Location(world, tx, ty, tz); + final CompoundTag sideroad = SchematicHandler.getCompoundTag(world, pos1, pos2); + final CompoundTag intersection = SchematicHandler.getCompoundTag(world, pos3, pos4); + final String dir = PlotSquared.IMP.getDirectory() + File.separator + "schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + plot.world + File.separator; + SchematicHandler.save(sideroad, dir + "sideroad.schematic"); + SchematicHandler.save(intersection, dir + "intersection.schematic"); + plotworld.ROAD_SCHEMATIC_ENABLED = true; + plotworld.setupSchematics(); + return true; + } + + public abstract int get_ey(final String world, final int sx, final int ex, final int sz, final int ez, final int sy); + + public abstract void regenerateChunkChunk(final String world, final ChunkLoc loc); + + public abstract boolean scheduleRoadUpdate(final String world); + + public boolean regenerateRoad(String world, final ChunkLoc chunk) { + final int x = chunk.x << 4; + final int z = chunk.z << 4; + final int ex = x + 15; + final int ez = z + 15; + final HybridPlotWorld plotworld = (HybridPlotWorld) PlotSquared.getPlotWorld(world); + if (!plotworld.ROAD_SCHEMATIC_ENABLED) { + return false; + } + PlotManager manager = PlotSquared.getPlotManager(world); + final PlotId id1 = manager.getPlotId(plotworld, x, 0, z); + final PlotId id2 = manager.getPlotId(plotworld, ex, 0, ez); + boolean toCheck = false; + if ((id1 == null) || (id2 == null) || (id1 != id2)) { + final boolean result = AChunkManager.manager.loadChunk(world, chunk); + if (result) { + if (id1 != null) { + final Plot p1 = MainUtil.getPlot(world, id1); + if ((p1 != null) && p1.hasOwner() && p1.settings.isMerged()) { + toCheck = true; + } + } + if ((id2 != null) && !toCheck) { + final Plot p2 = MainUtil.getPlot(world, id2); + if ((p2 != null) && p2.hasOwner() && p2.settings.isMerged()) { + toCheck = true; + } + } + final int size = plotworld.SIZE; + for (int X = 0; X < 16; X++) { + for (int Z = 0; Z < 16; Z++) { + short absX = (short) ((x + X) % size); + short absZ = (short) ((z + Z) % size); + if (absX < 0) { + absX += size; + } + if (absZ < 0) { + absZ += size; + } + final boolean gx = absX > plotworld.PATH_WIDTH_LOWER; + final boolean gz = absZ > plotworld.PATH_WIDTH_LOWER; + final boolean lx = absX < plotworld.PATH_WIDTH_UPPER; + final boolean lz = absZ < plotworld.PATH_WIDTH_UPPER; + boolean condition; + if (toCheck) { + condition = manager.getPlotId(plotworld, x + X, 1, z + Z) == null; + } else { + condition = (!gx || !gz || !lx || !lz); + } + if (condition) { + final int sy = plotworld.ROAD_HEIGHT; + final ChunkLoc loc = new ChunkLoc(absX, absZ); + final HashMap blocks = plotworld.G_SCH.get(loc); + for (short y = (short) (plotworld.ROAD_HEIGHT + 1); y <= (plotworld.ROAD_HEIGHT + plotworld.SCHEMATIC_HEIGHT); y++) { + BlockManager.manager.functionSetBlock(world, x + X, sy + y, z + Z, 0, (byte) 0); + } + if (blocks != null) { + final HashMap datas = plotworld.G_SCH_DATA.get(loc); + if (datas == null) { + for (final Short y : blocks.keySet()) { + BlockManager.manager.functionSetBlock(world, x + X, sy + y, z + Z, blocks.get(y), (byte) 0); + } + } else { + for (final Short y : blocks.keySet()) { + Byte data = datas.get(y); + if (data == null) { + data = 0; + } + BlockManager.manager.functionSetBlock(world, x + X, sy + y, z + Z, blocks.get(y), data); + } + } + } + } + } + } + return true; + } + } + return false; + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java index 259bef52e..4ac024cac 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotManager.java @@ -1,56 +1,41 @@ package com.intellectualcrafters.plot.generator; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotWorld; -import com.intellectualcrafters.plot.util.ChunkManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; /** * A plot manager with a square grid layout, with square shaped plots */ public abstract class SquarePlotManager extends GridPlotManager { - @Override - public boolean clearPlot(final World world, final PlotWorld plotworld, final Plot plot, final boolean isDelete, Runnable whendone) { - final Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); - final Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id); - ChunkManager.regenerateRegion(pos1, pos2, whendone); + public boolean clearPlot(final PlotWorld plotworld, final Plot plot, final boolean isDelete, final Runnable whenDone) { + final Location pos1 = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1); + final Location pos2 = MainUtil.getPlotTopLoc(plot.world, plot.id); + AChunkManager.manager.regenerateRegion(pos1, pos2, whenDone); return true; } @Override public Location getPlotTopLocAbs(final PlotWorld plotworld, final PlotId plotid) { final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); - final int px = plotid.x; final int pz = plotid.y; - final int x = (px * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; final int z = (pz * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; - - return new Location(Bukkit.getWorld(plotworld.worldname), x, 256, z); + return new Location(plotworld.worldname, x, 256, z); } @Override - public PlotId getPlotIdAbs(final PlotWorld plotworld, final Location loc) { + public PlotId getPlotIdAbs(final PlotWorld plotworld, int x, int y, int z) { final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); - - // get x,z loc - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - // get plot size final int size = dpw.PLOT_WIDTH + dpw.ROAD_WIDTH; - // get size of path on bottom part, and top part of plot // (As 0,0 is in the middle of a road, not the very start) int pathWidthLower; @@ -59,7 +44,6 @@ public abstract class SquarePlotManager extends GridPlotManager { } else { pathWidthLower = (int) Math.floor(dpw.ROAD_WIDTH / 2); } - // calulating how many shifts need to be done int dx = x / size; int dz = z / size; @@ -71,11 +55,9 @@ public abstract class SquarePlotManager extends GridPlotManager { dz--; z += ((-dz) * size); } - // reducing to first plot final int rx = (x) % size; final int rz = (z) % size; - // checking if road (return null if so) final int end = pathWidthLower + dpw.PLOT_WIDTH; final boolean northSouth = (rz <= pathWidthLower) || (rz > end); @@ -88,12 +70,8 @@ public abstract class SquarePlotManager extends GridPlotManager { } @Override - public PlotId getPlotId(final PlotWorld plotworld, final Location loc) { + public PlotId getPlotId(final PlotWorld plotworld, int x, int y, int z) { final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); - - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - if (plotworld == null) { return null; } @@ -104,10 +82,8 @@ public abstract class SquarePlotManager extends GridPlotManager { } else { pathWidthLower = (int) Math.floor(dpw.ROAD_WIDTH / 2); } - int dx = x / size; int dz = z / size; - if (x < 0) { dx--; x += ((-dx) * size); @@ -116,57 +92,56 @@ public abstract class SquarePlotManager extends GridPlotManager { dz--; z += ((-dz) * size); } - final int rx = (x) % size; final int rz = (z) % size; - final int end = pathWidthLower + dpw.PLOT_WIDTH; - final boolean northSouth = (rz <= pathWidthLower) || (rz > end); final boolean eastWest = (rx <= pathWidthLower) || (rx > end); if (northSouth && eastWest) { // This means you are in the intersection - final PlotId id = PlayerFunctions.getPlotAbs(loc.add(dpw.ROAD_WIDTH, 0, dpw.ROAD_WIDTH)); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + Location loc = new Location(plotworld.worldname, x + dpw.ROAD_WIDTH, y, z + dpw.ROAD_WIDTH); + final PlotId id = MainUtil.getPlotAbs(loc); + final Plot plot = PlotSquared.getPlots(plotworld.worldname).get(id); if (plot == null) { return null; } if ((plot.settings.getMerged(0) && plot.settings.getMerged(3))) { - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + return MainUtil.getBottomPlot(plot).id; } return null; } if (northSouth) { - // You are on a road running West to East (yeah, I named the var - // poorly) - final PlotId id = PlayerFunctions.getPlotAbs(loc.add(0, 0, dpw.ROAD_WIDTH)); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + // You are on a road running West to East (yeah, I named the var poorly) + Location loc = new Location(plotworld.worldname, x, y, z + dpw.ROAD_WIDTH); + final PlotId id = MainUtil.getPlotAbs(loc); + final Plot plot = PlotSquared.getPlots(plotworld.worldname).get(id); if (plot == null) { return null; } if (plot.settings.getMerged(0)) { - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + return MainUtil.getBottomPlot(plot).id; } return null; } if (eastWest) { // This is the road separating an Eastern and Western plot - final PlotId id = PlayerFunctions.getPlotAbs(loc.add(dpw.ROAD_WIDTH, 0, 0)); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + Location loc = new Location(plotworld.worldname, x + dpw.ROAD_WIDTH, y, z); + final PlotId id = MainUtil.getPlotAbs(loc); + final Plot plot = PlotSquared.getPlots(plotworld.worldname).get(id); if (plot == null) { return null; } if (plot.settings.getMerged(3)) { - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + return MainUtil.getBottomPlot(plot).id; } return null; } final PlotId id = new PlotId(dx + 1, dz + 1); - final Plot plot = PlotMain.getPlots(loc.getWorld()).get(id); + final Plot plot = PlotSquared.getPlots(plotworld.worldname).get(id); if (plot == null) { return id; } - return PlayerFunctions.getBottomPlot(loc.getWorld(), plot).id; + return MainUtil.getBottomPlot(plot).id; } /** @@ -175,44 +150,36 @@ public abstract class SquarePlotManager extends GridPlotManager { @Override public Location getPlotBottomLocAbs(final PlotWorld plotworld, final PlotId plotid) { final SquarePlotWorld dpw = ((SquarePlotWorld) plotworld); - final int px = plotid.x; final int pz = plotid.y; - final int x = (px * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - dpw.PLOT_WIDTH - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; final int z = (pz * (dpw.ROAD_WIDTH + dpw.PLOT_WIDTH)) - dpw.PLOT_WIDTH - ((int) Math.floor(dpw.ROAD_WIDTH / 2)) - 1; - - return new Location(Bukkit.getWorld(plotworld.worldname), x, 1, z); + return new Location(plotworld.worldname, x, 1, z); } /** * Set a plot biome */ @Override - public boolean setBiome(final World world, final Plot plot, final Biome biome) { - - final int bottomX = PlotHelper.getPlotBottomLoc(world, plot.id).getBlockX() - 1; - final int topX = PlotHelper.getPlotTopLoc(world, plot.id).getBlockX() + 1; - final int bottomZ = PlotHelper.getPlotBottomLoc(world, plot.id).getBlockZ() - 1; - final int topZ = PlotHelper.getPlotTopLoc(world, plot.id).getBlockZ() + 1; - - final Block block = world.getBlockAt(PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 1, 1)); - final Biome current = block.getBiome(); - if (biome.equals(current)) { - return false; - } - + public boolean setBiome(final Plot plot, final int biome) { + final int bottomX = MainUtil.getPlotBottomLoc(plot.world, plot.id).getX() - 1; + final int topX = MainUtil.getPlotTopLoc(plot.world, plot.id).getX() + 1; + final int bottomZ = MainUtil.getPlotBottomLoc(plot.world, plot.id).getZ() - 1; + final int topZ = MainUtil.getPlotTopLoc(plot.world, plot.id).getZ() + 1; + int size = (topX - bottomX + 1) * (topZ - bottomZ + 1); + int[] xb = new int[size]; + int[] zb = new int[size]; + int[] biomes = new int[size]; + int index = 0; for (int x = bottomX; x <= topX; x++) { for (int z = bottomZ; z <= topZ; z++) { - final Block blk = world.getBlockAt(x, 0, z); - final Biome c = blk.getBiome(); - if (c.equals(biome)) { - x += 15; - continue; - } - blk.setBiome(biome); + xb[index] = x; + zb[index] = z; + biomes[index] = biome; + index++; } } + BlockManager.setBiomes(plot.world, xb, zb, biomes); return true; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java index b48222d6e..01586954f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/generator/SquarePlotWorld.java @@ -2,27 +2,25 @@ package com.intellectualcrafters.plot.generator; import org.bukkit.configuration.ConfigurationSection; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; public abstract class SquarePlotWorld extends GridPlotWorld { - public static int PLOT_WIDTH_DEFAULT = 42; public static int ROAD_WIDTH_DEFAULT = 7; - public int PLOT_WIDTH; public int ROAD_WIDTH; @Override public void loadConfiguration(final ConfigurationSection config) { if (!config.contains("plot.height")) { - PlotMain.sendConsoleSenderMessage(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); + PlotSquared.log(" - &cConfiguration is null? (" + config.getCurrentPath() + ")"); } this.PLOT_WIDTH = config.getInt("plot.size"); this.ROAD_WIDTH = config.getInt("road.width"); this.SIZE = (short) (this.PLOT_WIDTH + this.ROAD_WIDTH); } - public SquarePlotWorld(String worldname) { + public SquarePlotWorld(final String worldname) { super(worldname); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/ForceFieldListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/ForceFieldListener.java index 2a829e93f..abb608087 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/ForceFieldListener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/ForceFieldListener.java @@ -18,13 +18,12 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.listeners; import java.util.HashSet; import java.util.Set; +import java.util.UUID; -import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -33,44 +32,50 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.util.Vector; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.BukkitPlayerFunctions; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret */ public class ForceFieldListener implements Listener { - private Set getNearbyPlayers(final Player player, final Plot plot) { final Set players = new HashSet<>(); Player oPlayer; for (final Entity entity : player.getNearbyEntities(5d, 5d, 5d)) { - if (!(entity instanceof Player) || ((oPlayer = (Player) entity) == null) || !PlayerFunctions.isInPlot(oPlayer) || !PlayerFunctions.getCurrentPlot(oPlayer).equals(plot)) { + if (!(entity instanceof Player) || ((oPlayer = (Player) entity) == null) || !BukkitPlayerFunctions.isInPlot(oPlayer) || !BukkitPlayerFunctions.getCurrentPlot(oPlayer).equals(plot)) { continue; } - if (!plot.hasRights(oPlayer)) { + UUID uuid = UUIDHandler.getUUID(BukkitUtil.getPlayer(oPlayer)); + if (!plot.isAdded(uuid)) { players.add(oPlayer); } } return players; } - + private Player hasNearbyPermitted(final Player player, final Plot plot) { Player oPlayer; for (final Entity entity : player.getNearbyEntities(5d, 5d, 5d)) { - if (!(entity instanceof Player) || ((oPlayer = (Player) entity) == null) || !PlayerFunctions.isInPlot(oPlayer) || !PlayerFunctions.getCurrentPlot(oPlayer).equals(plot)) { + if (!(entity instanceof Player) || ((oPlayer = (Player) entity) == null) || !BukkitPlayerFunctions.isInPlot(oPlayer) || !BukkitPlayerFunctions.getCurrentPlot(oPlayer).equals(plot)) { continue; } - if (plot.hasRights(oPlayer)) { + UUID uuid = UUIDHandler.getUUID(BukkitUtil.getPlayer(oPlayer)); + if (plot.isAdded(uuid)) { return oPlayer; } } return null; } - + public Vector calculateVelocity(final Player p, final Player e) { - final Location playerLocation = p.getLocation(); - final Location oPlayerLocation = e.getLocation(); + final org.bukkit.Location playerLocation = p.getLocation(); + final org.bukkit.Location oPlayerLocation = e.getLocation(); final double playerX = playerLocation.getX(), playerY = playerLocation.getY(), playerZ = playerLocation.getZ(), oPlayerX = oPlayerLocation.getX(), oPlayerY = oPlayerLocation.getY(), oPlayerZ = oPlayerLocation.getZ(); double x = 0d, y = 0d, z = 0d; if (playerX < oPlayerX) { @@ -90,17 +95,20 @@ public class ForceFieldListener implements Listener { } return new Vector(x, y, z); } - + @EventHandler public void onPlotEntry(final PlayerMoveEvent event) { final Player player = event.getPlayer(); - if (!PlayerFunctions.isInPlot(player)) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + Location loc = pp.getLocation(); + Plot plot = MainUtil.getPlot(loc); + if (plot == null) { return; } - final Plot plot = PlayerFunctions.getCurrentPlot(player); if ((FlagManager.getPlotFlag(plot, "forcefield") != null) && FlagManager.getPlotFlag(plot, "forcefield").getValue().equals("true")) { if (!PlotListener.booleanFlag(plot, "forcefield", false)) { - if (plot.hasRights(player)) { + UUID uuid = pp.getUUID(); + if (plot.isAdded(uuid)) { final Set players = getNearbyPlayers(player, plot); for (final Player oPlayer : players) { oPlayer.setVelocity(calculateVelocity(player, oPlayer)); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/InventoryListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/InventoryListener.java index 149a0ef86..70649c1ae 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/InventoryListener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/InventoryListener.java @@ -9,39 +9,36 @@ import org.bukkit.event.inventory.InventoryInteractEvent; import org.bukkit.inventory.Inventory; import com.intellectualcrafters.plot.object.InfoInventory; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; /** * Created 2014-11-18 for PlotSquared - * * @author Citymonstret */ -@SuppressWarnings("unused") public class InventoryListener implements Listener { - +public class InventoryListener implements Listener { @EventHandler public void onInventoryAction(final InventoryInteractEvent event) { if (event.getInventory().getHolder() instanceof InfoInventory) { event.setResult(Event.Result.DENY); } } - + @EventHandler public void onInventoryClick(final InventoryClickEvent event) { final Inventory inventory = event.getInventory(); final Player player = (Player) event.getWhoClicked(); if (inventory.getHolder() instanceof InfoInventory) { - // TODO: Do stuff switch (event.getSlot()) { case 3: case 4: case 5: case 6: - PlayerFunctions.sendMessage(player, "This is not implemented yet"); + MainUtil.sendMessage(BukkitUtil.getPlayer(player), "This is not implemented yet"); break; default: break; } } } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java index 5715d2821..4e9fa59ef 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents.java @@ -18,9 +18,9 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.listeners; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -30,7 +30,6 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; @@ -82,25 +81,30 @@ import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.WorldInitEvent; +import org.bukkit.generator.ChunkGenerator; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.commands.Setup; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.object.PlotGenerator; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotManager; -import com.intellectualcrafters.plot.object.PlotSelection; +import com.intellectualcrafters.plot.object.PlotPlayer; 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.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.SetupUtils; import com.intellectualcrafters.plot.util.TaskManager; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Player Events involving plots @@ -109,138 +113,133 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Empire92 */ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onWorldInit(final WorldInitEvent event) { - PlotMain.loadWorld(event.getWorld()); + final World world = event.getWorld(); + final ChunkGenerator gen = world.getGenerator(); + if (gen instanceof PlotGenerator) { + PlotSquared.loadWorld(world.getName(), (PlotGenerator) gen); + } else { + PlotSquared.loadWorld(world.getName(), null); + } } - + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onChunkLoad(final ChunkLoadEvent event) { - String worldname = event.getWorld().getName(); - Chunk chunk = event.getChunk(); - if (PlotHelper.worldBorder.containsKey(worldname)) { - int border = PlotHelper.getBorder(worldname); - int x = Math.abs(chunk.getX() << 4); - int z = Math.abs(chunk.getZ() << 4); - if (x > border || z > border) { - chunk.unload(false, true); - } + final String worldname = event.getWorld().getName(); + final Chunk chunk = event.getChunk(); + if (MainUtil.worldBorder.containsKey(worldname)) { + final int border = MainUtil.getBorder(worldname); + final int x = Math.abs(chunk.getX() << 4); + final int z = Math.abs(chunk.getZ() << 4); + if ((x > border) || (z > border)) { + chunk.unload(false, true); + } } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onJoin(final PlayerJoinEvent event) { - Player player = event.getPlayer(); + final Player player = event.getPlayer(); if (!player.hasPlayedBefore()) { player.saveData(); } - - // UUID stuff - String username = player.getName(); - StringWrapper name = new StringWrapper(username); - UUID uuid = UUIDHandler.getUUID(player); + PlotPlayer pp = BukkitUtil.getPlayer(player); + final String username = pp.getName(); + final StringWrapper name = new StringWrapper(username); + final UUID uuid = pp.getUUID(); UUIDHandler.add(name, uuid); - - // textures(event.getPlayer()); - if (isInPlot(event.getPlayer().getLocation())) { - if (Settings.TELEPORT_ON_LOGIN) { - event.getPlayer().teleport(PlotHelper.getPlotHomeDefault(getPlot(event.getPlayer()))); - PlayerFunctions.sendMessage(event.getPlayer(), C.TELEPORTED_TO_ROAD); - } else { - plotEntry(event.getPlayer(), getCurrentPlot(event.getPlayer().getLocation())); - } + final Location loc = BukkitUtil.getLocation(player.getLocation()); + final Plot plot = MainUtil.getPlot(loc); + if (plot == null) { + return; } + if (Settings.TELEPORT_ON_LOGIN) { + BukkitUtil.teleportPlayer(player, MainUtil.getPlotHomeDefault(plot)); + MainUtil.sendMessage(pp, C.TELEPORTED_TO_ROAD); + } + plotEntry(player, plot); } - + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void PlayerMove(final PlayerMoveEvent event) { - try { + final Location f = BukkitUtil.getLocation(event.getFrom()); + final Location t = BukkitUtil.getLocation(event.getTo()); + if ((f.getX() != t.getX()) || (f.getZ() != t.getZ())) { final Player player = event.getPlayer(); - final Location f = event.getFrom(); - final Location t = event.getTo(); - final Location q = new Location(t.getWorld(), t.getBlockX(), 0, t.getZ()); - - if ((f.getBlockX() != q.getBlockX()) || (f.getBlockZ() != q.getBlockZ())) { - if (Settings.TELEPORT_DELAY != 0 && TaskManager.TELEPORT_QUEUE.size() > 0) { - String name = player.getName(); - if (TaskManager.TELEPORT_QUEUE.contains(name)) { - TaskManager.TELEPORT_QUEUE.remove(name); - } + if (Settings.TELEPORT_DELAY != 0) { + TaskManager.TELEPORT_QUEUE.remove(player.getName()); + } + final String worldname = t.getWorld(); + if (!isPlotWorld(worldname)) { + return; + } + if (MainUtil.worldBorder.containsKey(worldname)) { + final int border = MainUtil.getBorder(worldname); + boolean passed = true; + if (t.getX() > border) { + event.getTo().setX(border); + } else if (t.getX() < -border) { + event.getTo().setX(-border); + } else if (t.getZ() > border) { + event.getTo().setZ(border); + } else if (t.getZ() < -border) { + event.getTo().setZ(-border); + } else { + passed = false; } - if (!isPlotWorld(player.getWorld())) { + if (passed) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + MainUtil.sendMessage(pp, C.BORDER); return; } - String worldname = q.getWorld().getName(); - if (PlotHelper.worldBorder.containsKey(worldname)) { - int border = PlotHelper.getBorder(worldname); - boolean passed = false; - if (t.getBlockX() > border) { - q.setX(border); - passed = true; - } - else if (t.getBlockX() < -border) { - q.setX(-border); - passed = true; - } - if (t.getBlockZ() > border) { - q.setZ(border); - passed = true; - } - else if (t.getBlockZ() < -border) { - q.setZ(-border); - passed = true; - } - if (passed) { - event.setTo(q); - PlayerFunctions.sendMessage(player, C.BORDER); - return; - } - } - Plot plot = getCurrentPlot(q); - if (plot != null) { - if (!plot.equals(getCurrentPlot(f))) { - if (plot.deny_entry(player)) { - if (!PlotMain.hasPermission(player, "plots.admin.entry.denied")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.entry.denied"); - event.setCancelled(true); - return; - } - } - plotEntry(player, plot); - } - } else if (leftPlot(f, event.getTo())) { - plot = getCurrentPlot(f); - plotExit(player, plot); - } } - } catch (final Exception e) { - // Gotta catch 'em all. + Plot plot = getCurrentPlot(t); + if (plot != null) { + if (plot.denied.size() > 0) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (plot.isDenied(pp.getUUID())) { + if (!Permissions.hasPermission(pp, "plots.admin.entry.denied")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.entry.denied"); + event.setCancelled(true); + return; + } + } + } + if (!plot.equals(getCurrentPlot(f))) { + plotEntry(player, plot); + } + } else if (leftPlot(f, t)) { + plot = getCurrentPlot(f); + plotExit(player, plot); + } } } - + @EventHandler(priority = EventPriority.HIGHEST) public static void onChat(final AsyncPlayerChatEvent event) { - final World world = event.getPlayer().getWorld(); + final Player player = event.getPlayer(); + final String world = player.getWorld().getName(); if (!isPlotWorld(world)) { return; } - final PlotWorld plotworld = PlotMain.getWorldSettings(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); if (!plotworld.PLOT_CHAT) { return; } - if (getCurrentPlot(event.getPlayer().getLocation()) == null) { + final Location loc = BukkitUtil.getLocation(player); + final Plot plot = getCurrentPlot(loc); + if (plot == null) { return; } final String message = event.getMessage(); String format = C.PLOT_CHAT_FORMAT.s(); final String sender = event.getPlayer().getDisplayName(); - final Plot plot = getCurrentPlot(event.getPlayer().getLocation()); final PlotId id = plot.id; final Set recipients = event.getRecipients(); recipients.clear(); for (final Player p : Bukkit.getOnlinePlayers()) { - if (getCurrentPlot(p.getLocation()) == plot) { + if (getCurrentPlot(BukkitUtil.getLocation(p)) == plot) { recipients.add(p); } } @@ -248,15 +247,15 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi format = ChatColor.translateAlternateColorCodes('&', format); event.setFormat(format); } - + @EventHandler(priority = EventPriority.HIGH) public static void BlockDestroy(final BlockBreakEvent event) { - final World world = event.getPlayer().getWorld(); + final Player player = event.getPlayer(); + final String world = player.getWorld().getName(); if (!isPlotWorld(world)) { return; } - Player player = event.getPlayer(); - Location loc = event.getBlock().getLocation(); + final Location loc = BukkitUtil.getLocation(event.getBlock().getLocation()); final Plot plot = getCurrentPlot(loc); if (plot != null) { if (event.getBlock().getY() == 0) { @@ -264,73 +263,77 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi return; } if (!plot.hasOwner()) { - if (PlotMain.hasPermission(player, "plots.admin.destroy.unowned")) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (Permissions.hasPermission(pp, "plots.admin.destroy.unowned")) { return; } - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.destroy.unowned"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.destroy.unowned"); event.setCancelled(true); return; } - if (!plot.hasRights(event.getPlayer())) { - Flag destroy = FlagManager.getPlotFlag(plot, "break"); - Block block = event.getBlock(); - if (destroy != null && ((HashSet) destroy.getValue()).contains(new PlotBlock((short) block.getTypeId(), (byte) block.getData()))) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (!plot.isAdded(pp.getUUID())) { + final Flag destroy = FlagManager.getPlotFlag(plot, "break"); + final Block block = event.getBlock(); + if ((destroy != null) && ((HashSet) destroy.getValue()).contains(new PlotBlock((short) block.getTypeId(), block.getData()))) { return; } - if (PlotMain.hasPermission(event.getPlayer(), "plots.admin.destroy.other")) { + if (Permissions.hasPermission(pp, "plots.admin.destroy.other")) { return; } - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.destroy.other"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.destroy.other"); event.setCancelled(true); return; } return; } - if (PlotMain.hasPermission(event.getPlayer(), "plots.admin.destroy.road")) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (Permissions.hasPermission(pp, "plots.admin.destroy.road")) { return; } if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.destroy.road"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.destroy.road"); event.setCancelled(true); return; } } - + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onBigBoom(final EntityExplodeEvent event) { - final World world = event.getLocation().getWorld(); + final String world = event.getLocation().getWorld().getName(); if (!isPlotWorld(world)) { return; } - Location loc = event.getLocation(); + final Location loc = BukkitUtil.getLocation(event.getLocation()); final Plot plot = getCurrentPlot(loc); - if (plot != null && plot.hasOwner()) { + if ((plot != null) && plot.hasOwner()) { if (FlagManager.isPlotFlagTrue(plot, "explosion")) { - Iterator iter = event.blockList().iterator(); + final Iterator iter = event.blockList().iterator(); while (iter.hasNext()) { - Block b = iter.next(); - if (!plot.equals(getCurrentPlot(b.getLocation()))) { + final Block b = iter.next(); + if (!plot.equals(getCurrentPlot(BukkitUtil.getLocation(b.getLocation())))) { iter.remove(); } } return; } } - if (isPlotArea(loc)) { event.setCancelled(true); } - else { - Iterator iter = event.blockList().iterator(); + if (isPlotArea(loc)) { + event.setCancelled(true); + } else { + final Iterator iter = event.blockList().iterator(); while (iter.hasNext()) { - Block b = iter.next(); + final Block b = iter.next(); if (isPlotArea(loc)) { iter.remove(); } } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onPeskyMobsChangeTheWorldLikeWTFEvent(final EntityChangeBlockEvent event) { - final World world = event.getBlock().getWorld(); + final String world = event.getBlock().getWorld().getName(); if (!isPlotWorld(world)) { return; } @@ -343,212 +346,239 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } else { final Block b = event.getBlock(); final Player p = (Player) e; - Location loc = b.getLocation(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); if (!isInPlot(loc)) { - if (!PlotMain.hasPermission(p, "plots.admin.build.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.road"); + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!Permissions.hasPermission(pp, "plots.admin.build.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.road"); event.setCancelled(true); return; } } else { final Plot plot = getCurrentPlot(loc); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.build.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.unowned"); + if ((plot == null) || !plot.hasOwner()) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!Permissions.hasPermission(pp, "plots.admin.build.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.unowned"); event.setCancelled(true); return; } - } else if (!plot.hasRights(p)) { - if (!PlotMain.hasPermission(p, "plots.admin.build.other")) { - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.other"); - event.setCancelled(true); - return; + } else { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!plot.isAdded(pp.getUUID())) { + if (!Permissions.hasPermission(pp, "plots.admin.build.other")) { + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.other"); + event.setCancelled(true); + return; + } } } } } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onEntityBlockForm(final EntityBlockFormEvent e) { - final World world = e.getBlock().getWorld(); + final String world = e.getBlock().getWorld().getName(); if (!isPlotWorld(world)) { return; } if ((!(e.getEntity() instanceof Player))) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onBS(final BlockSpreadEvent e) { final Block b = e.getBlock(); - Location loc = b.getLocation(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); if (isPlotWorld(loc)) { if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onBF(final BlockFormEvent e) { - final Block b = e.getBlock(); - Location loc = b.getLocation(); - if (isPlotWorld(loc)) { - if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onBD(final BlockDamageEvent e) { - final Block b = e.getBlock(); - Location loc = b.getLocation(); - if (isPlotWorld(loc)) { - if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onFade(final BlockFadeEvent e) { - final Block b = e.getBlock(); - Location loc = b.getLocation(); - if (isPlotWorld(loc)) { - if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onChange(final BlockFromToEvent e) { - final Block b = e.getToBlock(); - Location loc = b.getLocation(); - if (isPlotWorld(loc)) { - if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onGrow(final BlockGrowEvent e) { - final Block b = e.getBlock(); - Location loc = b.getLocation(); - if (isPlotWorld(loc)) { - if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public static void onBlockPistonExtend(final BlockPistonExtendEvent e) { - if (isInPlot(e.getBlock().getLocation())) { - for (final Block block : e.getBlocks()) { - if (!isInPlot(block.getLocation())) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public static void onBlockPistonRetract(final BlockPistonRetractEvent e) { - final Block b = e.getRetractLocation().getBlock(); - Location loc = b.getLocation(); - if (isPlotWorld(loc) && (e.getBlock().getType() == Material.PISTON_STICKY_BASE)) { - if (!isInPlot(loc)) { - if (isPlotArea(e.getBlock().getLocation())) { e.setCancelled(true); } - } - } - } - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onStructureGrow(final StructureGrowEvent e) { - final List blocks = e.getBlocks(); - boolean remove = false; - for (int i = blocks.size() - 1; i >= 0; i--) { - if (remove || isPlotWorld(blocks.get(i).getLocation())) { - remove = true; - Location loc = blocks.get(i).getLocation(); - if (!isInPlot(loc)) { - if (isPlotArea(loc)) { e.getBlocks().remove(i); } + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); } } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public static void onBF(final BlockFormEvent e) { + final Block b = e.getBlock(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); + if (isPlotWorld(loc)) { + if (!isInPlot(loc)) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public static void onBD(final BlockDamageEvent e) { + final Block b = e.getBlock(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); + if (isPlotWorld(loc)) { + if (!isInPlot(loc)) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public static void onFade(final BlockFadeEvent e) { + final Block b = e.getBlock(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); + if (isPlotWorld(loc)) { + if (!isInPlot(loc)) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public static void onChange(final BlockFromToEvent e) { + final Block b = e.getToBlock(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); + if (isPlotWorld(loc)) { + if (!isInPlot(loc)) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public static void onGrow(final BlockGrowEvent e) { + final Block b = e.getBlock(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); + if (isPlotWorld(loc)) { + if (!isInPlot(loc)) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public static void onBlockPistonExtend(final BlockPistonExtendEvent e) { + if (isInPlot(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + for (final Block block : e.getBlocks()) { + Plot plot = getCurrentPlot(BukkitUtil.getLocation(block.getLocation())); + if (plot != null) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public static void onBlockPistonRetract(final BlockPistonRetractEvent e) { + final Block b = e.getRetractLocation().getBlock(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); + if (isPlotWorld(loc) && (e.getBlock().getType() == Material.PISTON_STICKY_BASE)) { + if (!isInPlot(loc)) { + if (isPlotArea(BukkitUtil.getLocation(e.getBlock().getLocation()))) { + e.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public static void onStructureGrow(final StructureGrowEvent e) { + if (!isPlotWorld(e.getWorld().getName())) { + return; + } + final List blocks = e.getBlocks(); + boolean remove = false; + for (int i = blocks.size() - 1; i >= 0; i--) { + final Location loc = BukkitUtil.getLocation(blocks.get(i).getLocation()); + Plot plot = getCurrentPlot(loc); + if (plot == null || !plot.hasOwner()) { + e.getBlocks().remove(i); + } + } + } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onInteract(final PlayerInteractEvent event) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { return; } - Block block = event.getClickedBlock(); + final Block block = event.getClickedBlock(); if (block == null) { return; } - final World world = event.getPlayer().getWorld(); + final Player player = event.getPlayer(); + final String world = player.getWorld().getName(); if (!isPlotWorld(world)) { return; } - Player player = event.getPlayer(); - Location loc = event.getClickedBlock().getLocation(); + final Location loc = BukkitUtil.getLocation(event.getClickedBlock().getLocation()); if (isInPlot(loc)) { final Plot plot = getCurrentPlot(loc); if (!plot.hasOwner()) { - if (PlotMain.hasPermission(player, "plots.admin.interact.unowned")) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (Permissions.hasPermission(pp, "plots.admin.interact.unowned")) { return; } - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.interact.unowned"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.unowned"); event.setCancelled(true); return; } - Flag use = FlagManager.getPlotFlag(plot, "use"); - if (use != null && ((HashSet) use.getValue()).contains(new PlotBlock((short) block.getTypeId(), block.getData()))) { + final Flag use = FlagManager.getPlotFlag(plot, "use"); + if ((use != null) && ((HashSet) use.getValue()).contains(new PlotBlock((short) block.getTypeId(), block.getData()))) { return; } - if (!plot.hasRights(player)) { - if (PlotMain.hasPermission(player, "plots.admin.interact.other")) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (!plot.isAdded(pp.getUUID())) { + if (Permissions.hasPermission(pp, "plots.admin.interact.other")) { return; } - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.interact.other"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.other"); event.setCancelled(true); return; } return; } - if (PlotMain.hasPermission(player, "plots.admin.interact.road")) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (Permissions.hasPermission(pp, "plots.admin.interact.road")) { return; } - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.interact.road"); + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.road"); event.setCancelled(true); return; } } - + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void MobSpawn(final CreatureSpawnEvent event) { - final World world = event.getLocation().getWorld(); if (event.getEntity() instanceof Player) { return; } + Location loc = BukkitUtil.getLocation(event.getLocation()); + final String world = loc.getWorld(); if (!isPlotWorld(world)) { return; } - Location loc = event.getLocation(); if (!isPlotArea(loc)) { return; } - final PlotWorld pW = getPlotWorld(world); + final PlotWorld pW = PlotSquared.getPlotWorld(world); final CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason(); if ((reason == CreatureSpawnEvent.SpawnReason.SPAWNER_EGG) && pW.SPAWN_EGGS) { event.setCancelled(true); @@ -561,21 +591,41 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi return; } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onBlockIgnite(final BlockIgniteEvent e) { - final World world; - + Player player = e.getPlayer(); + final Block b = e.getBlock(); + final Location loc; + if (b != null) { + loc = BukkitUtil.getLocation(b.getLocation()); + } + else { + Entity ent = e.getIgnitingEntity(); + if (ent != null) { + loc = BukkitUtil.getLocation(ent); + } + else { + if (player != null) { + loc = BukkitUtil.getLocation(player); + } + else { + return; + } + } + } + + + final String world; if (e.getBlock() != null) { - world = e.getBlock().getWorld(); + world = e.getBlock().getWorld().getName(); } else if (e.getIgnitingEntity() != null) { - world = e.getIgnitingEntity().getWorld(); + world = e.getIgnitingEntity().getWorld().getName(); } else if (e.getPlayer() != null) { - world = e.getPlayer().getWorld(); + world = e.getPlayer().getWorld().getName(); } else { return; } - if (!isPlotWorld(world)) { return; } @@ -583,105 +633,107 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi e.setCancelled(true); return; } - final Block b = e.getBlock(); - Location loc = b.getLocation(); - if (b != null) { - if (e.getPlayer() != null) { - final Player p = e.getPlayer(); - if (!isInPlot(loc)) { - if (!PlotMain.hasPermission(p, "plots.admin.build.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.road"); + if (player == null) { + if (isPlotArea(loc)) { + e.setCancelled(true); + } + return; + } + final Player p = e.getPlayer(); + if (!isInPlot(loc)) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!Permissions.hasPermission(pp, "plots.admin.build.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.road"); + e.setCancelled(true); + return; + } + } else { + final Plot plot = getCurrentPlot(loc); + if ((plot == null) || !plot.hasOwner()) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!Permissions.hasPermission(pp, "plots.admin.build.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.unowned"); + e.setCancelled(true); + return; + } + } else { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!plot.isAdded(pp.getUUID())) if (!Permissions.hasPermission(pp, "plots.admin.build.other")) { + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.other"); e.setCancelled(true); return; } - } else { - final Plot plot = getCurrentPlot(loc); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.build.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.unowned"); - e.setCancelled(true); - return; - } - } else if (!plot.hasRights(p)) { - if (!PlotMain.hasPermission(p, "plots.admin.build.other")) { - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.other"); - e.setCancelled(true); - return; - } - } - } } - } else { - if (isPlotArea(loc)) { e.setCancelled(true); } } } } - + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onTeleport(final PlayerTeleportEvent event) { - final Location f = event.getFrom(); - final Location t = event.getTo(); - final Location q = new Location(t.getWorld(), t.getBlockX(), 64, t.getZ()); - + final Location f = BukkitUtil.getLocation(event.getFrom()); + final Location t = BukkitUtil.getLocation(event.getTo()); + final Location q = new Location(t.getWorld(), t.getX(), 64, t.getZ()); + Player player = event.getPlayer(); if (isPlotWorld(q)) { if (isInPlot(q)) { final Plot plot = getCurrentPlot(q); - if (plot.deny_entry(event.getPlayer())) { - PlayerFunctions.sendMessage(event.getPlayer(), C.YOU_BE_DENIED); + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (plot.isDenied(pp.getUUID())) { + MainUtil.sendMessage(BukkitUtil.getPlayer(player), C.YOU_BE_DENIED); event.setCancelled(true); return; } else { if (enteredPlot(f, t)) { - plotEntry(event.getPlayer(), plot); + plotEntry(player, plot); } } } else { if (leftPlot(f, t)) { - final Plot plot = getCurrentPlot(event.getFrom()); - plotExit(event.getPlayer(), plot); + final Plot plot = getCurrentPlot(f); + plotExit(player, plot); } } - if ((q.getBlockX() >= 29999999) || (q.getBlockX() <= -29999999) || (q.getBlockZ() >= 29999999) || (q.getBlockZ() <= -29999999)) { + if ((q.getX() >= 29999999) || (q.getX() <= -29999999) || (q.getZ() >= 29999999) || (q.getZ() <= -29999999)) { event.setCancelled(true); return; } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onBucketEmpty(final PlayerBucketEmptyEvent e) { final BlockFace bf = e.getBlockFace(); final Block b = e.getBlockClicked().getLocation().add(bf.getModX(), bf.getModY(), bf.getModZ()).getBlock(); - Location loc = b.getLocation(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); if (isPlotWorld(loc)) { - Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(e.getPlayer()); if (!isInPlot(loc)) { - if (PlotMain.hasPermission(p, "plots.admin.build.road")) { + if (Permissions.hasPermission(pp, "plots.admin.build.road")) { return; } - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.road"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.road"); e.setCancelled(true); return; } else { final Plot plot = getCurrentPlot(loc); - if (plot == null || !plot.hasOwner()) { - if (PlotMain.hasPermission(p, "plots.admin.build.unowned")) { + if ((plot == null) || !plot.hasOwner()) { + if (Permissions.hasPermission(pp, "plots.admin.build.unowned")) { return; } - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.unowned"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.unowned"); e.setCancelled(true); return; - } else if (!plot.hasRights(e.getPlayer())) { - Flag use = FlagManager.getPlotFlag(plot, "use"); - if (use != null && ((HashSet) use.getValue()).contains(new PlotBlock((short) e.getBucket().getId(), (byte) 0))) { + } else if (!plot.isAdded(pp.getUUID())) { + final Flag use = FlagManager.getPlotFlag(plot, "use"); + if ((use != null) && ((HashSet) use.getValue()).contains(new PlotBlock((short) e.getBucket().getId(), (byte) 0))) { return; } - if (PlotMain.hasPermission(p, "plots.admin.build.other")) { + if (Permissions.hasPermission(pp, "plots.admin.build.other")) { return; } - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.other"); + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.other"); e.setCancelled(true); return; } @@ -689,7 +741,7 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - + @EventHandler(priority = EventPriority.HIGHEST) public static void onInventoryClick(final InventoryClickEvent event) { if (event.getInventory().getName().equalsIgnoreCase("PlotSquared Commands")) { @@ -697,60 +749,60 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi return; } } - + @EventHandler public static void onLeave(final PlayerQuitEvent event) { - if (PlotSelection.currentSelection.containsKey(event.getPlayer().getName())) { - PlotSelection.currentSelection.remove(event.getPlayer().getName()); - } - if (Setup.setupMap.containsKey(event.getPlayer().getName())) { - Setup.setupMap.remove(event.getPlayer().getName()); + String name = event.getPlayer().getName(); + if (SetupUtils.setupMap.containsKey(name)) { + SetupUtils.setupMap.remove(name); } + BukkitUtil.removePlayer(name); if (Settings.DELETE_PLOTS_ON_BAN && event.getPlayer().isBanned()) { - final Set plots = PlotMain.getPlots(event.getPlayer()); + final Collection plots = PlotSquared.getPlots(name).values(); for (final Plot plot : plots) { - PlotWorld plotworld = PlotMain.getWorldSettings(plot.world); - final PlotManager manager = PlotMain.getPlotManager(plot.getWorld()); - manager.clearPlot(null, plotworld, plot, true, null); - DBFunc.delete(plot.getWorld().getName(), plot); - PlotMain.sendConsoleSenderMessage(String.format("&cPlot &6%s &cwas deleted + cleared due to &6%s&c getting banned", plot.getId(), event.getPlayer().getName())); + final PlotWorld plotworld = PlotSquared.getPlotWorld(plot.world); + final PlotManager manager = PlotSquared.getPlotManager(plot.world); + manager.clearPlot(plotworld, plot, true, null); + DBFunc.delete(plot.world, plot); + PlotSquared.log(String.format("&cPlot &6%s &cwas deleted + cleared due to &6%s&c getting banned", plot.getId(), event.getPlayer().getName())); } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onBucketFill(final PlayerBucketFillEvent e) { final Block b = e.getBlockClicked(); - Location loc = b.getLocation(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); if (isPlotWorld(loc)) { - Player p = e.getPlayer(); + final Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(p); if (!isInPlot(loc)) { - if (PlotMain.hasPermission(p, "plots.admin.build.road")) { + if (Permissions.hasPermission(pp, "plots.admin.build.road")) { return; } - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.road"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.road"); e.setCancelled(true); return; } else { final Plot plot = getCurrentPlot(loc); - if (plot == null || !plot.hasOwner()) { - if (PlotMain.hasPermission(p, "plots.admin.build.unowned")) { + if ((plot == null) || !plot.hasOwner()) { + if (Permissions.hasPermission(pp, "plots.admin.build.unowned")) { return; } - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.unowned"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.unowned"); e.setCancelled(true); return; - } else if (!plot.hasRights(e.getPlayer())) { - Flag use = FlagManager.getPlotFlag(plot, "use"); - Block block = e.getBlockClicked(); - if (use != null && ((HashSet) use.getValue()).contains(new PlotBlock((short) block.getTypeId(), block.getData()))) { + } else if (!plot.isAdded(pp.getUUID())) { + final Flag use = FlagManager.getPlotFlag(plot, "use"); + final Block block = e.getBlockClicked(); + if ((use != null) && ((HashSet) use.getValue()).contains(new PlotBlock((short) block.getTypeId(), block.getData()))) { return; } - if (PlotMain.hasPermission(p, "plots.admin.build.other")) { + if (Permissions.hasPermission(pp, "plots.admin.build.other")) { return; } - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.other"); + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.other"); e.setCancelled(true); return; } @@ -758,34 +810,35 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onHangingPlace(final HangingPlaceEvent e) { final Block b = e.getBlock(); - Location loc = b.getLocation(); + final Location loc = BukkitUtil.getLocation(b.getLocation()); if (isPlotWorld(loc)) { final Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(p); if (!isInPlot(loc)) { - if (!PlotMain.hasPermission(p, "plots.admin.build.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.road"); + if (!Permissions.hasPermission(pp, "plots.admin.build.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.road"); e.setCancelled(true); return; } } else { final Plot plot = getCurrentPlot(loc); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.build.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.unowned"); + if ((plot == null) || !plot.hasOwner()) { + if (!Permissions.hasPermission(pp, "plots.admin.build.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.unowned"); e.setCancelled(true); return; } - } else if (!plot.hasRights(p)) { + } else if (!plot.isAdded(pp.getUUID())) { if (FlagManager.isPlotFlagTrue(plot, "hanging-place")) { return; } - if (!PlotMain.hasPermission(p, "plots.admin.build.other")) { - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.build.other"); + if (!Permissions.hasPermission(pp, "plots.admin.build.other")) { + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.other"); e.setCancelled(true); return; } @@ -794,35 +847,36 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onHangingBreakByEntity(final HangingBreakByEntityEvent e) { final Entity r = e.getRemover(); if (r instanceof Player) { final Player p = (Player) r; - final Location l = e.getEntity().getLocation(); + final Location l = BukkitUtil.getLocation(e.getEntity()); + PlotPlayer pp = BukkitUtil.getPlayer(p); if (isPlotWorld(l)) { if (!isInPlot(l)) { - if (!PlotMain.hasPermission(p, "plots.admin.destroy.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.destroy.road"); + if (!Permissions.hasPermission(pp, "plots.admin.destroy.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.destroy.road"); e.setCancelled(true); return; } } else { final Plot plot = getCurrentPlot(l); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.destroy.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.destroy.unowned"); + if ((plot == null) || !plot.hasOwner()) { + if (!Permissions.hasPermission(pp, "plots.admin.destroy.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.destroy.unowned"); e.setCancelled(true); return; } - } else if (!plot.hasRights(p)) { + } else if (!plot.isAdded(pp.getUUID())) { if (FlagManager.isPlotFlagTrue(plot, "hanging-break")) { return; } - if (!PlotMain.hasPermission(p, "plots.admin.destroy.other")) { + if (!Permissions.hasPermission(pp, "plots.admin.destroy.other")) { if (isPlotArea(l)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.destroy.other"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.destroy.other"); e.setCancelled(true); return; } @@ -832,43 +886,44 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onPlayerInteractEntity(final PlayerInteractEntityEvent e) { - final Location l = e.getRightClicked().getLocation(); + final Location l = BukkitUtil.getLocation(e.getRightClicked().getLocation()); if (isPlotWorld(l)) { final Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(p); if (!isInPlot(l)) { - if (!PlotMain.hasPermission(p, "plots.admin.interact.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.interact.road"); + if (!Permissions.hasPermission(pp, "plots.admin.interact.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.road"); e.setCancelled(true); return; } } else { final Plot plot = getCurrentPlot(l); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.interact.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.interact.unowned"); + if ((plot == null) || !plot.hasOwner()) { + if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.unowned"); e.setCancelled(true); return; } - } else if (!plot.hasRights(p)) { - Entity entity = e.getRightClicked(); - if (entity instanceof Monster && FlagManager.isPlotFlagTrue(plot, "hostile-interact")) { + } else if (!plot.isAdded(pp.getUUID())) { + final Entity entity = e.getRightClicked(); + if ((entity instanceof Monster) && FlagManager.isPlotFlagTrue(plot, "hostile-interact")) { return; } - if (entity instanceof Animals && FlagManager.isPlotFlagTrue(plot, "animal-interact")) { + if ((entity instanceof Animals) && FlagManager.isPlotFlagTrue(plot, "animal-interact")) { return; } - if (entity instanceof Tameable && ((Tameable) entity).isTamed() && FlagManager.isPlotFlagTrue(plot, "tamed-interact")) { + if ((entity instanceof Tameable) && ((Tameable) entity).isTamed() && FlagManager.isPlotFlagTrue(plot, "tamed-interact")) { return; } - if (entity instanceof RideableMinecart && FlagManager.isPlotFlagTrue(plot, "vehicle-use")) { + if ((entity instanceof RideableMinecart) && FlagManager.isPlotFlagTrue(plot, "vehicle-use")) { return; } - if (!PlotMain.hasPermission(p, "plots.admin.interact.other")) { - if (isPlotArea(l)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.interact.other"); + if (!Permissions.hasPermission(pp, "plots.admin.interact.other")) { + if (isPlotArea(l)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.other"); e.setCancelled(true); return; } @@ -877,38 +932,39 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public static void onVehicleDestroy (VehicleDestroyEvent e) { - final Location l = e.getVehicle().getLocation(); + public static void onVehicleDestroy(final VehicleDestroyEvent e) { + final Location l = BukkitUtil.getLocation(e.getVehicle()); if (isPlotWorld(l)) { - Entity d = e.getAttacker(); + final Entity d = e.getAttacker(); if (d instanceof Player) { final Player p = (Player) d; - final PlotWorld pW = getPlotWorld(l.getWorld()); + final PlotWorld pW = PlotSquared.getPlotWorld(l.getWorld()); + PlotPlayer pp = BukkitUtil.getPlayer(p); if (!isInPlot(l)) { - if (!PlotMain.hasPermission(p, "plots.admin.vehicle.break.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.vehicle.break.road"); + if (!Permissions.hasPermission(pp, "plots.admin.vehicle.break.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.vehicle.break.road"); e.setCancelled(true); return; } } else { final Plot plot = getCurrentPlot(l); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.vehicle.break.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.vehicle.break.unowned"); + if ((plot == null) || !plot.hasOwner()) { + if (!Permissions.hasPermission(pp, "plots.admin.vehicle.break.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.vehicle.break.unowned"); e.setCancelled(true); return; } return; - } - if (!plot.hasRights(p)) { + } + if (!plot.isAdded(pp.getUUID())) { if (FlagManager.isPlotFlagTrue(plot, "vehicle-break")) { return; } - if (!PlotMain.hasPermission(p, "plots.admin.vehicle.break.other")) { + if (!Permissions.hasPermission(pp, "plots.admin.vehicle.break.other")) { if (isPlotArea(l)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.vehicle.break.other"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.vehicle.break.other"); e.setCancelled(true); return; } @@ -921,39 +977,39 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onEntityDamageByEntityEvent(final EntityDamageByEntityEvent e) { - final Location l = e.getEntity().getLocation(); + final Location l = BukkitUtil.getLocation(e.getEntity()); final Entity d = e.getDamager(); final Entity a = e.getEntity(); - - if (Settings.TELEPORT_DELAY != 0 && TaskManager.TELEPORT_QUEUE.size() > 0 && a instanceof Player) { - Player player = (Player) a; - String name = player.getName(); + if ((Settings.TELEPORT_DELAY != 0) && (TaskManager.TELEPORT_QUEUE.size() > 0) && (a instanceof Player)) { + final Player player = (Player) a; + final String name = player.getName(); if (TaskManager.TELEPORT_QUEUE.contains(name)) { TaskManager.TELEPORT_QUEUE.remove(name); } } - if (isPlotWorld(l)) { if (d instanceof Player) { final Player p = (Player) d; final boolean aPlr = a instanceof Player; - final PlotWorld pW = getPlotWorld(l.getWorld()); - if (!aPlr && pW.PVE && (!(a instanceof ItemFrame) && !(a.getType().getTypeId() == 30) ) ) { + final PlotWorld pW = PlotSquared.getPlotWorld(l.getWorld()); + if (!aPlr && pW.PVE && (!(a instanceof ItemFrame) && !(a.getType().getTypeId() == 30))) { return; } else if (aPlr && pW.PVP) { return; } if (!isInPlot(l)) { - if (!PlotMain.hasPermission(p, "plots.admin.pve.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.pve.road"); + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!Permissions.hasPermission(pp, "plots.admin.pve.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.pve.road"); e.setCancelled(true); return; } } else { final Plot plot = getCurrentPlot(l); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.pve.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.pve.unowned"); + if ((plot == null) || !plot.hasOwner()) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!Permissions.hasPermission(pp, "plots.admin.pve.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.pve.unowned"); e.setCancelled(true); return; } @@ -964,19 +1020,20 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi return; } assert plot != null; - if (!plot.hasRights(p)) { - if (a instanceof Monster && FlagManager.isPlotFlagTrue(plot, "hostile-attack")) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!plot.isAdded(pp.getUUID())) { + if ((a instanceof Monster) && FlagManager.isPlotFlagTrue(plot, "hostile-attack")) { return; } - if (a instanceof Animals && FlagManager.isPlotFlagTrue(plot, "animal-attack")) { + if ((a instanceof Animals) && FlagManager.isPlotFlagTrue(plot, "animal-attack")) { return; } - if (a instanceof Tameable && ((Tameable) a).isTamed() && FlagManager.isPlotFlagTrue(plot, "tamed-attack")) { + if ((a instanceof Tameable) && ((Tameable) a).isTamed() && FlagManager.isPlotFlagTrue(plot, "tamed-attack")) { return; } - if (!PlotMain.hasPermission(p, "plots.admin.pve.other")) { - if (isPlotArea(l)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.pve.other"); + if (!Permissions.hasPermission(pp, "plots.admin.pve.other")) { + if (isPlotArea(l)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.pve.other"); e.setCancelled(true); return; } @@ -984,35 +1041,36 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - if (d instanceof Arrow && isPlotArea(l) && (!(a instanceof Creature))) { + if ((d instanceof Arrow) && isPlotArea(l) && (!(a instanceof Creature))) { e.setCancelled(true); } } } - + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public static void onPlayerEggThrow(final PlayerEggThrowEvent e) { - final Location l = e.getEgg().getLocation(); + final Location l = BukkitUtil.getLocation(e.getEgg().getLocation()); if (isPlotWorld(l)) { final Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(p); if (!isInPlot(l)) { - if (!PlotMain.hasPermission(p, "plots.admin.projectile.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.projectile.road"); + if (!Permissions.hasPermission(pp, "plots.admin.projectile.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.projectile.road"); e.setHatching(false); return; } } else { final Plot plot = getCurrentPlot(l); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.projectile.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.projectile.unowned"); + if ((plot == null) || !plot.hasOwner()) { + if (!Permissions.hasPermission(pp, "plots.admin.projectile.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.projectile.unowned"); e.setHatching(false); return; } - } else if (!plot.hasRights(p)) { - if (!PlotMain.hasPermission(p, "plots.admin.projectile.other")) { - if (isPlotArea(l)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.projectile.other"); + } else if (!plot.isAdded(pp.getUUID())) { + if (!Permissions.hasPermission(pp, "plots.admin.projectile.other")) { + if (isPlotArea(l)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.projectile.other"); e.setHatching(false); return; } @@ -1021,45 +1079,46 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi } } } - + @EventHandler(priority = EventPriority.HIGH) public void BlockCreate(final BlockPlaceEvent event) { - final World world = event.getPlayer().getWorld(); + final Player player = event.getPlayer(); + final String world = player.getWorld().getName(); if (!isPlotWorld(world)) { return; } - if (PlotMain.hasPermission(event.getPlayer(), "plots.admin")) { + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (Permissions.hasPermission(pp, "plots.admin")) { return; } - Player player = event.getPlayer(); - Location loc = event.getBlock().getLocation(); + final Location loc = BukkitUtil.getLocation(event.getBlock().getLocation()); if (isInPlot(loc)) { final Plot plot = getCurrentPlot(loc); if (!plot.hasOwner()) { - if (PlotMain.hasPermission(player, "plots.admin.build.unowned")) { + if (Permissions.hasPermission(pp, "plots.admin.build.unowned")) { return; } - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.build.unowned"); + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.unowned"); event.setCancelled(true); return; } - if (!plot.hasRights(player)) { - Flag place = FlagManager.getPlotFlag(plot, "place"); - Block block = event.getBlock(); - if (place != null && ((HashSet) place.getValue()).contains(new PlotBlock((short) block.getTypeId(), (byte) block.getData()))) { + if (!plot.isAdded(pp.getUUID())) { + final Flag place = FlagManager.getPlotFlag(plot, "place"); + final Block block = event.getBlock(); + if ((place != null) && ((HashSet) place.getValue()).contains(new PlotBlock((short) block.getTypeId(), block.getData()))) { return; } - if (!PlotMain.hasPermission(player, "plots.admin.build.other")) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.build.other"); + if (!Permissions.hasPermission(pp, "plots.admin.build.other")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.other"); event.setCancelled(true); return; } } return; } - if (!PlotMain.hasPermission(player, "plots.admin.build.road")) { - if (isPlotArea(loc)) { - PlayerFunctions.sendMessage(player, C.NO_PERMISSION, "plots.admin.build.road"); + if (!Permissions.hasPermission(pp, "plots.admin.build.road")) { + if (isPlotArea(loc)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.build.road"); event.setCancelled(true); return; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents_1_8.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents_1_8.java index 320602b6a..9c52f184f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents_1_8.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlayerEvents_1_8.java @@ -1,46 +1,52 @@ package com.intellectualcrafters.plot.listeners; -import org.bukkit.Location; +import java.util.UUID; + import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractAtEntityEvent; -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; public class PlayerEvents_1_8 extends PlotListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public static void onInteract(final PlayerInteractAtEntityEvent e) { - final Location l = e.getRightClicked().getLocation(); + final Location l = BukkitUtil.getLocation(e.getRightClicked().getLocation()); if (isPlotWorld(l)) { final Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(e.getPlayer()); if (!isInPlot(l)) { - if (!PlotMain.hasPermission(p, "plots.admin.interact.road")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.interact.road"); + if (!Permissions.hasPermission(pp, "plots.admin.interact.road")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.road"); e.setCancelled(true); } } else { - final Plot plot = getCurrentPlot(l); - if (plot == null || !plot.hasOwner()) { - if (!PlotMain.hasPermission(p, "plots.admin.interact.unowned")) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.interact.unowned"); + final Plot plot = MainUtil.getPlot(l); + if ((plot == null) || !plot.hasOwner()) { + if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.unowned"); e.setCancelled(true); } - } else if (!plot.hasRights(p)) { - if (!PlotMain.hasPermission(p, "plots.admin.interact.other")) { - if (isPlotArea(l)) { - PlayerFunctions.sendMessage(p, C.NO_PERMISSION, "plots.admin.interact.other"); - e.setCancelled(true); + } else { + UUID uuid = pp.getUUID(); + if (!plot.isAdded(uuid)) { + if (!Permissions.hasPermission(pp, "plots.admin.interact.other")) { + if (isPlotArea(l)) { + MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.other"); + e.setCancelled(true); + } } } } } } } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java index 3a5fb92b6..99646b975 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java @@ -18,133 +18,117 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.listeners; -import java.util.ArrayList; import java.util.Arrays; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; -import org.bukkit.Location; import org.bukkit.WeatherType; -import org.bukkit.World; -import org.bukkit.block.Biome; import org.bukkit.entity.Player; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent; import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent; import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.titles.AbstractTitle; import com.intellectualcrafters.plot.util.ClusterManager; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * @author Citymonstret * @author Empire92 */ -@SuppressWarnings({"unused", "deprecation"}) public class PlotListener { - +public class PlotListener { public static void textures(final Player p) { - if ((Settings.PLOT_SPECIFIC_RESOURCE_PACK.length() > 1) && isPlotWorld(p.getWorld())) { + if ((Settings.PLOT_SPECIFIC_RESOURCE_PACK.length() > 1) && isPlotWorld(p.getWorld().getName())) { p.setResourcePack(Settings.PLOT_SPECIFIC_RESOURCE_PACK); } } - public static boolean booleanFlag(Plot plot, String key, boolean defaultValue) { - Flag flag = FlagManager.getPlotFlag(plot, key); - if (flag == null) { - return defaultValue; - } - Object value = flag.getValue(); - if (value instanceof Boolean) { - return (boolean) value; - } - return defaultValue; - } - - public static boolean isInPlot(final Player player) { - return PlayerFunctions.isInPlot(player); - } - - public static Plot getPlot(final Player player) { - return PlayerFunctions.getCurrentPlot(player); - } - - public static boolean isPlotWorld(final World world) { - return PlotMain.isPlotWorld(world); + public static boolean booleanFlag(final Plot plot, final String key, final boolean defaultValue) { + final Flag flag = FlagManager.getPlotFlag(plot, key); + if (flag == null) { + return defaultValue; + } + final Object value = flag.getValue(); + if (value instanceof Boolean) { + return (boolean) value; + } + return defaultValue; } - public static boolean isPlotArea(Location location) { - PlotWorld plotworld = PlotMain.getWorldSettings(location.getWorld()); + public static boolean isInPlot(final String world, final int x, final int y, final int z) { + return (MainUtil.getPlot(new Location(world, x, y, z)) != null); + } + + public static boolean isPlotWorld(final String world) { + return PlotSquared.isPlotWorld(world); + } + + public static boolean isPlotArea(final Location location) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(location.getWorld()); if (plotworld.TYPE == 2) { return ClusterManager.getCluster(location) != null; } return true; } - - public static PlotWorld getPlotWorld(final World world) { - return PlotMain.getWorldSettings(world); - } - + private static String getName(final UUID id) { if (id == null) { return "none"; } - String name = UUIDHandler.getName(id); + final String name = UUIDHandler.getName(id); if (name == null) { return "unknown"; } return name; } - + public static UUID getUUID(final String name) { return UUIDHandler.getUUID(name); } - + public static boolean enteredPlot(final Location l1, final Location l2) { - final PlotId p1 = PlayerFunctions.getPlot(new Location(l1.getWorld(), l1.getBlockX(), 0, l1.getBlockZ())); - final PlotId p2 = PlayerFunctions.getPlot(new Location(l2.getWorld(), l2.getBlockX(), 0, l2.getBlockZ())); + final PlotId p1 = MainUtil.getPlotId(l1); + final PlotId p2 = MainUtil.getPlotId(l2); return (p2 != null) && ((p1 == null) || !p1.equals(p2)); - } - + public static boolean leftPlot(final Location l1, final Location l2) { - final PlotId p1 = PlayerFunctions.getPlot(new Location(l1.getWorld(), l1.getBlockX(), 0, l1.getBlockZ())); - final PlotId p2 = PlayerFunctions.getPlot(new Location(l2.getWorld(), l2.getBlockX(), 0, l2.getBlockZ())); + final PlotId p1 = MainUtil.getPlotId(l1); + final PlotId p2 = MainUtil.getPlotId(l2); return (p1 != null) && ((p2 == null) || !p1.equals(p2)); } - + public static boolean isPlotWorld(final Location l) { - return PlotMain.isPlotWorld(l.getWorld()); + return PlotSquared.isPlotWorld(l.getWorld()); } - + public static boolean isInPlot(final Location loc) { return getCurrentPlot(loc) != null; } - + public static Plot getCurrentPlot(final Location loc) { - final PlotId id = PlayerFunctions.getPlot(loc); + final PlotId id = MainUtil.getPlotId(loc); if (id == null) { return null; } - final World world = loc.getWorld(); - if (PlotMain.getPlots(world).containsKey(id)) { - return PlotMain.getPlots(world).get(id); - } - return new Plot(id, null, Biome.FOREST, new ArrayList(), new ArrayList(), loc.getWorld().getName()); + return MainUtil.getPlot(loc.getWorld(), id); } - + private static WeatherType getWeatherType(String str) { str = str.toLowerCase(); if (str.equals("rain")) { @@ -152,8 +136,8 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } else { return WeatherType.CLEAR; } - } - + } + private static GameMode getGameMode(final String str) { switch (str) { case "creative": @@ -166,37 +150,39 @@ import com.intellectualcrafters.plot.util.UUIDHandler; return Bukkit.getDefaultGameMode(); } } - + + public static void plotEntry(final PlotPlayer player, final Plot plot) { + plotEntry(((BukkitPlayer) player).player, plot); + } + public static void plotEntry(final Player player, final Plot plot) { if (plot.hasOwner()) { - Flag gamemodeFlag = FlagManager.getPlotFlag(plot, "gamemode"); + final Flag gamemodeFlag = FlagManager.getPlotFlag(plot, "gamemode"); if (gamemodeFlag != null) { player.setGameMode(getGameMode(gamemodeFlag.getValueString())); } - Flag flyFlag = FlagManager.getPlotFlag(plot, "fly"); + final Flag flyFlag = FlagManager.getPlotFlag(plot, "fly"); if (flyFlag != null) { player.setAllowFlight((boolean) flyFlag.getValue()); } - Flag timeFlag = FlagManager.getPlotFlag(plot, "time"); + final Flag timeFlag = FlagManager.getPlotFlag(plot, "time"); if (timeFlag != null) { try { - long time = (long) timeFlag.getValue(); + final long time = (long) timeFlag.getValue(); player.setPlayerTime(time, true); } catch (final Exception e) { FlagManager.removePlotFlag(plot, "time"); } } - Flag weatherFlag = FlagManager.getPlotFlag(plot, "weather"); + final Flag weatherFlag = FlagManager.getPlotFlag(plot, "weather"); if (weatherFlag != null) { player.setPlayerWeather(getWeatherType(weatherFlag.getValueString())); } if ((booleanFlag(plot, "titles", false) || Settings.TITLES) && (C.TITLE_ENTERED_PLOT.s().length() > 2)) { final String sTitleMain = C.TITLE_ENTERED_PLOT.s().replaceAll("%x%", plot.id.x + "").replaceAll("%z%", plot.id.y + "").replaceAll("%world%", plot.world + ""); final String sTitleSub = C.TITLE_ENTERED_PLOT_SUB.s().replaceFirst("%s", getName(plot.owner)); - final ChatColor sTitleMainColor = ChatColor.valueOf(C.TITLE_ENTERED_PLOT_COLOR.s()); - final ChatColor sTitleSubColor = ChatColor.valueOf(C.TITLE_ENTERED_PLOT_SUB_COLOR.s()); if (AbstractTitle.TITLE_CLASS != null) { - AbstractTitle.TITLE_CLASS.sendTitle(player, sTitleMain, sTitleSub, ChatColor.valueOf(C.TITLE_ENTERED_PLOT_COLOR.s()), ChatColor.valueOf(C.TITLE_ENTERED_PLOT_SUB_COLOR.s())); + AbstractTitle.TITLE_CLASS.sendTitle(player, sTitleMain, sTitleSub, ChatColor.valueOf(C.TITLE_ENTERED_PLOT_COLOR.s()), ChatColor.valueOf(C.TITLE_ENTERED_PLOT_SUB_COLOR.s())); } } { @@ -205,7 +191,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } } } - + public static void plotExit(final Player player, final Plot plot) { { final PlayerLeavePlotEvent callEvent = new PlayerLeavePlotEvent(player, plot); @@ -224,7 +210,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; player.resetPlayerWeather(); } } - + public static boolean getFlagValue(final String value) { return Arrays.asList("true", "on", "enabled", "yes").contains(value.toLowerCase()); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java index 6aceec9d0..1d6546d20 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.listeners; import java.util.ArrayList; @@ -27,6 +26,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -46,25 +46,27 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent; import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Created 2014-10-30 for PlotSquared * * @author Citymonstret */ -@SuppressWarnings({"deprecation", "unused"}) public class PlotPlusListener extends PlotListener implements Listener { - +@SuppressWarnings({ "deprecation", "unused" }) +public class PlotPlusListener extends PlotListener implements Listener { private final static HashMap feedRunnable = new HashMap<>(); private final static HashMap healRunnable = new HashMap<>(); - + public static void startRunnable(final JavaPlugin plugin) { plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { @Override @@ -96,7 +98,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } }, 0l, 20l); } - + @EventHandler public void onInventoryClick(final InventoryClickEvent event) { final Player player = (Player) event.getWhoClicked(); @@ -104,18 +106,21 @@ import com.intellectualcrafters.plot.util.UUIDHandler; return; } event.setCancelled(true); - if (!isInPlot(player)) { - PlayerFunctions.sendMessage(player, C.NOT_IN_PLOT); + final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(player)); + PlotPlayer pp = BukkitUtil.getPlayer(player); + if (plot == null) { + MainUtil.sendMessage(pp, C.NOT_IN_PLOT); return; } - final Plot plot = getPlot(player); - if (!plot.hasRights(player)) { - PlayerFunctions.sendMessage(player, C.NO_PLOT_PERMS); + UUID uuid = pp.getUUID(); + if (!plot.isAdded(uuid)) { + MainUtil.sendMessage(pp, C.NO_PLOT_PERMS); return; } final Set plotPlayers = new HashSet<>(); for (final Player p : player.getWorld().getPlayers()) { - if (isInPlot(p) && getPlot(p).equals(plot)) { + Plot newPlot = MainUtil.getPlot(BukkitUtil.getLocation(player)); + if (plot.equals(newPlot)) { plotPlayers.add(p); } } @@ -131,54 +136,68 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } for (final Player p : plotPlayers) { p.playEffect(p.getLocation(), Effect.RECORD_PLAY, meta.getMaterial()); - PlayerFunctions.sendMessage(p, C.RECORD_PLAY.s().replaceAll("%player", player.getName()).replaceAll("%name", meta.toString())); + MainUtil.sendMessage(pp, C.RECORD_PLAY.s().replaceAll("%player", player.getName()).replaceAll("%name", meta.toString())); } - } - + @EventHandler(priority = EventPriority.HIGH) public void onInteract(final BlockDamageEvent event) { final Player player = event.getPlayer(); if (player.getGameMode() != GameMode.SURVIVAL) { return; } - if (!isInPlot(player)) { + final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(player)); + if (plot == null) { return; } - final Plot plot = getPlot(player); if (booleanFlag(plot, "instabreak", false)) { event.getBlock().breakNaturally(); } } - + @EventHandler(priority = EventPriority.HIGH) public void onDamage(final EntityDamageEvent event) { if (event.getEntityType() != EntityType.PLAYER) { return; } final Player player = (Player) event.getEntity(); - if (!isInPlot(player)) { + final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(player)); + if (plot == null) { return; } - if (booleanFlag(getPlot(player), "invincible", false)) { + if (booleanFlag(plot, "invincible", false)) { event.setCancelled(true); } } - + @EventHandler public void onItemPickup(final PlayerPickupItemEvent event) { - if (isInPlot(event.getPlayer()) && !getPlot(event.getPlayer()).hasRights(event.getPlayer()) && booleanFlag(getPlot(event.getPlayer()), "drop-protection", false)) { + final Player player = event.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(player); + final Plot plot = MainUtil.getPlot(pp.getLocation()); + if (plot == null) { + return; + } + UUID uuid = pp.getUUID(); + if (plot.isAdded(uuid) && booleanFlag(plot, "drop-protection", false)) { event.setCancelled(true); } } - + @EventHandler public void onItemDrop(final PlayerDropItemEvent event) { - if (isInPlot(event.getPlayer()) && !getPlot(event.getPlayer()).hasRights(event.getPlayer()) && booleanFlag(getPlot(event.getPlayer()), "item-drop", false)) { + final Player player = event.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(player); + final Plot plot = MainUtil.getPlot(pp.getLocation()); + if (plot == null) { + return; + } + UUID uuid = pp.getUUID(); + if (plot.isAdded(uuid) && booleanFlag(plot, "item-drop", false)) { event.setCancelled(true); } } - + @EventHandler public void onPlotEnter(final PlayerEnterPlotEvent event) { final Plot plot = event.getPlot(); @@ -187,80 +206,85 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } if (booleanFlag(plot, "notify-enter", false)) { if (plot.hasOwner()) { - final Player player = UUIDHandler.uuidWrapper.getPlayer(plot.getOwner()); - if (player == null) { + final PlotPlayer pp = UUIDHandler.getPlayer(plot.getOwner()); + if (pp == null) { return; } - Player trespasser = event.getPlayer(); - if (UUIDHandler.getUUID(player).equals(UUIDHandler.getUUID(trespasser))) { + final Player trespasser = event.getPlayer(); + PlotPlayer pt = BukkitUtil.getPlayer(trespasser); + if (pp.getUUID().equals(pt.getUUID())) { return; } - if (PlotMain.hasPermission(trespasser, "plots.flag.notify-enter.bypass")) { + if (Permissions.hasPermission(pt, "plots.flag.notify-enter.bypass")) { return; } - if (player.isOnline()) { - PlayerFunctions.sendMessage(player, C.NOTIFY_ENTER.s().replace("%player", trespasser.getName()).replace("%plot", plot.getId().toString())); + if (pp.isOnline()) { + MainUtil.sendMessage(pp, C.NOTIFY_ENTER.s().replace("%player", trespasser.getName()).replace("%plot", plot.getId().toString())); } } } } - + @EventHandler public void onPlayerQuit(final PlayerQuitEvent event) { - if (feedRunnable.containsKey(event.getPlayer().getName())) { - feedRunnable.remove(event.getPlayer().getName()); + Player player = event.getPlayer(); + String name = player.getName(); + if (feedRunnable.containsKey(name)) { + feedRunnable.remove(name); } - if (healRunnable.containsKey(event.getPlayer().getName())) { - healRunnable.remove(event.getPlayer().getName()); + if (healRunnable.containsKey(name)) { + healRunnable.remove(name); } } - + @EventHandler public void onPlotLeave(final PlayerLeavePlotEvent event) { - event.getPlayer().playEffect(event.getPlayer().getLocation(), Effect.RECORD_PLAY, 0); + Player leaver = event.getPlayer(); + leaver.playEffect(leaver.getLocation(), Effect.RECORD_PLAY, 0); final Plot plot = event.getPlot(); if (FlagManager.getPlotFlag(plot, "farewell") != null) { event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', C.PREFIX_FAREWELL.s().replaceAll("%id%", plot.id + "") + FlagManager.getPlotFlag(plot, "farewell").getValueString())); } - if (feedRunnable.containsKey(event.getPlayer().getName())) { - feedRunnable.remove(event.getPlayer().getName()); + PlotPlayer pl = BukkitUtil.getPlayer(leaver); + String name = pl.getName(); + if (feedRunnable.containsKey(leaver)) { + feedRunnable.remove(leaver); } - if (healRunnable.containsKey(event.getPlayer().getName())) { - healRunnable.remove(event.getPlayer().getName()); + if (healRunnable.containsKey(leaver)) { + healRunnable.remove(leaver); } if (booleanFlag(plot, "notify-leave", false)) { if (plot.hasOwner()) { - final Player player = UUIDHandler.uuidWrapper.getPlayer(plot.getOwner()); - if (player == null) { + final PlotPlayer pp = UUIDHandler.getPlayer(plot.getOwner()); + if (pp == null) { return; } - Player trespasser = event.getPlayer(); - if (UUIDHandler.getUUID(player).equals(UUIDHandler.getUUID(trespasser))) { + if (pp.getUUID().equals(pl.getUUID())) { return; } - if (PlotMain.hasPermission(trespasser, "plots.flag.notify-leave.bypass")) { + if (Permissions.hasPermission(pl, "plots.flag.notify-leave.bypass")) { return; } - if (player.isOnline()) { - PlayerFunctions.sendMessage(player, C.NOTIFY_LEAVE.s().replace("%player", trespasser.getName()).replace("%plot", plot.getId().toString())); + if (pp.isOnline()) { + MainUtil.sendMessage(pp, C.NOTIFY_LEAVE.s().replace("%player", pl.getName()).replace("%plot", plot.getId().toString())); } } } } - + public static class Interval { public final int interval; public final int amount; public final int max; public int count = 0; - + public Interval(final int interval, final int amount, final int max) { this.interval = interval; this.amount = amount; this.max = max; } } - + /** * Record Meta Class * @@ -268,31 +292,29 @@ import com.intellectualcrafters.plot.util.UUIDHandler; */ public static class RecordMeta { public final static List metaList = new ArrayList<>(); - static { for (int x = 3; x < 12; x++) { metaList.add(new RecordMeta(x + "", Material.valueOf("RECORD_" + x))); } } - private final String name; private final Material material; - + public RecordMeta(final String name, final Material material) { this.name = name; this.material = material; } - + @Override public String toString() { return this.name; } - + @Override public int hashCode() { return this.name.hashCode(); } - + public Material getMaterial() { return this.material; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java index 2a1ca7ed2..4741b631b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.listeners; import java.util.Arrays; @@ -40,17 +39,19 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerTeleportEvent; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.events.PlotDeleteEvent; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PWE; -import com.intellectualcrafters.plot.util.PlayerFunctions; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.Permissions; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.PWE; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.bukkit.selections.Selection; @@ -61,37 +62,35 @@ import com.sk89q.worldedit.function.mask.Mask; * @author Empire92 */ public class WorldEditListener implements Listener { - - final List monitored = Arrays.asList(new String[]{"set", "replace", "overlay", "walls", "outline", "deform", "hollow", "smooth", "move", "stack", "naturalize", "paste", "count", "regen", "copy", "cut", ""}); - + final List monitored = Arrays.asList(new String[] { "set", "replace", "overlay", "walls", "outline", "deform", "hollow", "smooth", "move", "stack", "naturalize", "paste", "count", "regen", "copy", "cut", "" }); public final Set blockedcmds = new HashSet<>(Arrays.asList("/gmask", "//gmask", "/worldedit:gmask")); public final Set restrictedcmds = new HashSet<>(Arrays.asList("/up", "//up", "/worldedit:up")); - + private boolean isPlotWorld(final Location l) { - return (PlotMain.isPlotWorld(l.getWorld())); + return (PlotSquared.isPlotWorld(l.getWorld().getName())); } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onDelete(final PlotDeleteEvent e) { final String world = e.getWorld(); final PlotId id = e.getPlotId(); - final Plot plot = PlotMain.getPlots(world).get(id); + final Plot plot = PlotSquared.getPlots(world).get(id); if ((plot == null) || (plot.owner == null)) { return; } - final Player player = UUIDHandler.uuidWrapper.getPlayer(plot.owner); + final PlotPlayer player = UUIDHandler.getPlayer(plot.owner); if (player == null) { return; } - if (!world.equals(player.getWorld().getName())) { + if (!world.equals(player.getLocation().getWorld())) { return; } - if (PlotMain.hasPermission(player, "plots.worldedit.bypass")) { + if (Permissions.hasPermission(player, "plots.worldedit.bypass")) { return; } PWE.setNoMask(player); } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInteract(final PlayerInteractEvent e) { final Block b = e.getClickedBlock(); @@ -107,28 +106,30 @@ public class WorldEditListener implements Listener { if ((p.getItemInHand() == null) || (p.getItemInHand().getType() == Material.AIR)) { return; } - final Plot plot = PlotHelper.getCurrentPlot(b.getLocation()); + PlotPlayer pp = BukkitUtil.getPlayer(p); + com.intellectualcrafters.plot.object.Location loc = pp.getLocation(); + final Plot plot = MainUtil.getPlot(loc); if (plot != null) { - if (plot.hasOwner() && (plot.helpers != null) && (plot.helpers.contains(DBFunc.everyone) || plot.helpers.contains(UUIDHandler.getUUID(p)))) { - PWE.setMask(p, l, false); + if (plot.hasOwner() && (plot.helpers != null) && (plot.helpers.contains(DBFunc.everyone) || plot.helpers.contains(pp.getUUID()))) { + PWE.setMask(BukkitUtil.getPlayer(p), loc, false); } } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerCommand(final PlayerCommandPreprocessEvent e) { final Player p = e.getPlayer(); - if (!PlotMain.isPlotWorld(p.getWorld()) || PlotMain.hasPermission(p, "plots.worldedit.bypass")) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (!PlotSquared.isPlotWorld(p.getWorld().getName()) || Permissions.hasPermission(pp, "plots.worldedit.bypass")) { return; } String cmd = e.getMessage().toLowerCase(); - if (cmd.contains(" ")) { cmd = cmd.substring(0, cmd.indexOf(" ")); } if (this.restrictedcmds.contains(cmd)) { - final Plot plot = PlayerFunctions.getCurrentPlot(p); - if ((plot == null) || !(plot.helpers.contains(DBFunc.everyone) || plot.helpers.contains(UUIDHandler.getUUID(p)))) { + final Plot plot = MainUtil.getPlot(pp.getLocation()); + if ((plot == null) || !(plot.helpers.contains(DBFunc.everyone) || plot.helpers.contains(pp.getUUID()))) { e.setCancelled(true); } return; @@ -141,49 +142,49 @@ public class WorldEditListener implements Listener { } for (final String c : this.monitored) { if (cmd.equals("//" + c) || cmd.equals("/" + c) || cmd.equals("/worldedit:/" + c)) { - final Selection selection = PlotMain.worldEdit.getSelection(p); + final Selection selection = PlotSquared.worldEdit.getSelection(p); if (selection == null) { return; } final BlockVector pos1 = selection.getNativeMinimumPoint().toBlockVector(); final BlockVector pos2 = selection.getNativeMaximumPoint().toBlockVector(); - - final LocalSession session = PlotMain.worldEdit.getSession(p); + final LocalSession session = PlotSquared.worldEdit.getSession(p); final Mask mask = session.getMask(); if (mask == null) { - PlayerFunctions.sendMessage(p, C.REQUIRE_SELECTION_IN_MASK, "Both points"); + MainUtil.sendMessage(pp, C.REQUIRE_SELECTION_IN_MASK, "Both points"); return; } if (!mask.test(pos1)) { e.setCancelled(true); - PlayerFunctions.sendMessage(p, C.REQUIRE_SELECTION_IN_MASK, "Position 1"); + MainUtil.sendMessage(pp, C.REQUIRE_SELECTION_IN_MASK, "Position 1"); } if (!mask.test(pos2)) { e.setCancelled(true); - PlayerFunctions.sendMessage(p, C.REQUIRE_SELECTION_IN_MASK, "Position 2"); + MainUtil.sendMessage(pp, C.REQUIRE_SELECTION_IN_MASK, "Position 2"); } } } - } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerJoin(final PlayerJoinEvent e) { final Player p = e.getPlayer(); final Location l = p.getLocation(); - if (PlotMain.hasPermission(p, "plots.worldedit.bypass")) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) { if (isPlotWorld(l)) { - PWE.removeMask(p); + PWE.removeMask(pp); } return; } if (isPlotWorld(l)) { - PWE.setMask(p, l, false); + com.intellectualcrafters.plot.object.Location loc = BukkitUtil.getLocation(l); + PWE.setMask(pp, loc, false); } else { - PWE.removeMask(p); + PWE.removeMask(pp); } } - + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(final PlayerMoveEvent e) { final Location t = e.getTo(); @@ -192,58 +193,65 @@ public class WorldEditListener implements Listener { } final Location f = e.getFrom(); final Player p = e.getPlayer(); - if (PlotMain.hasPermission(p, "plots.worldedit.bypass")) { - if (!PWE.hasMask(p)) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) { + if (!PWE.hasMask(pp)) { return; } } - if ((f.getBlockX() != t.getBlockX()) || (f.getBlockZ() != t.getBlockZ())) { - final PlotId idF = PlayerFunctions.getPlot(f); - final PlotId idT = PlayerFunctions.getPlot(t); + com.intellectualcrafters.plot.object.Location locf = BukkitUtil.getLocation(f); + com.intellectualcrafters.plot.object.Location loct = BukkitUtil.getLocation(t); + if ((locf.getX() != loct.getX()) || (locf.getZ() != loct.getZ())) { + final PlotId idF = MainUtil.getPlotId(locf); + final PlotId idT = MainUtil.getPlotId(loct); if ((idT != null) && !(idF == idT)) { - PWE.setMask(p, t, false); + PWE.setMask(pp, loct, false); } } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPortal(final PlayerPortalEvent e) { - if (PlotMain.hasPermission(e.getPlayer(), "plots.worldedit.bypass")) { + Player p = e.getPlayer(); + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) { return; } - final Player p = e.getPlayer(); final Location t = e.getTo(); final Location f = e.getFrom(); if (t == null) { - PWE.removeMask(p); + PWE.removeMask(pp); return; } if (isPlotWorld(t)) { - PWE.setMask(p, t, false); + com.intellectualcrafters.plot.object.Location loct = BukkitUtil.getLocation(t); + PWE.setMask(pp, loct, false); return; } if ((f != null) && isPlotWorld(f)) { - PWE.removeMask(p); + PWE.removeMask(pp); } } - + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onTeleport(final PlayerTeleportEvent e) { final Player p = e.getPlayer(); - if (PlotMain.hasPermission(e.getPlayer(), "plots.worldedit.bypass")) { - if (!PWE.hasMask(p)) { + PlotPlayer pp = BukkitUtil.getPlayer(p); + if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) { + if (!PWE.hasMask(pp)) { return; } } final Location t = e.getTo(); - final Location q = new Location(t.getWorld(), t.getBlockX(), 64, t.getZ()); + com.intellectualcrafters.plot.object.Location loct = BukkitUtil.getLocation(t); final Location f = e.getFrom(); - if (!isPlotWorld(q)) { + if (!PlotSquared.isPlotWorld(loct.getWorld())) { if (isPlotWorld(f)) { - PWE.removeMask(p); + PWE.removeMask(pp); } return; } - PWE.setMask(p, q, false); + + PWE.setMask(pp, loct, false); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java deleted file mode 100644 index 5154a1182..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java +++ /dev/null @@ -1,269 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.listeners; - -import java.util.ArrayList; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.events.PlayerClaimPlotEvent; -import com.intellectualcrafters.plot.events.PlayerPlotHelperEvent; -import com.intellectualcrafters.plot.events.PlayerPlotTrustedEvent; -import com.intellectualcrafters.plot.events.PlotDeleteEvent; -import com.intellectualcrafters.plot.events.PlotMergeEvent; -import com.intellectualcrafters.plot.events.PlotUnlinkEvent; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.flags.DefaultFlag; -import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -/** - * Created 2014-09-24 for PlotSquared - * - * @author Citymonstret - * @author Empire92 - */ -public class WorldGuardListener implements Listener { - public final ArrayList str_flags; - public final ArrayList> flags; - - public WorldGuardListener(final PlotMain plugin) { - this.str_flags = new ArrayList<>(); - this.flags = new ArrayList<>(); - for (final Flag flag : DefaultFlag.getFlags()) { - this.str_flags.add(flag.getName()); - this.flags.add(flag); - } - } - - public void changeOwner(final Player requester, final UUID owner, final World world, final Plot plot) { - try { - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - ProtectedRegion region = manager.getRegion(plot.id.x + "-" + plot.id.y); - DefaultDomain owners = new DefaultDomain(); - owners.addPlayer(UUIDHandler.getName(owner)); - region.setOwners(owners); - } catch (final Exception e) { - } - } - - public void removeFlag(final Player requester, final World world, final Plot plot, final String key) { - final boolean op = requester.isOp(); - requester.setOp(true); - try { - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - manager.getRegion(plot.id.x + "-" + plot.id.y); - for (final Flag flag : this.flags) { - if (flag.getName().equalsIgnoreCase(key)) { - requester.performCommand("region flag " + (plot.id.x + "-" + plot.id.y) + " " + key); - } - } - } catch (final Exception e) { - requester.setOp(op); - } finally { - requester.setOp(op); - } - } - - public void addFlag(final Player requester, final World world, final Plot plot, final String key, final String value) { - final boolean op = requester.isOp(); - requester.setOp(true); - try { - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - manager.getRegion(plot.id.x + "-" + plot.id.y); - for (final Flag flag : this.flags) { - if (flag.getName().equalsIgnoreCase(key)) { - requester.performCommand("region flag " + (plot.id.x + "-" + plot.id.y) + " " + key + " " + value); - } - } - } catch (final Exception e) { - requester.setOp(op); - } finally { - requester.setOp(op); - } - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onMerge(final PlotMergeEvent event) { - final Plot main = event.getPlot(); - final ArrayList plots = event.getPlots(); - final World world = event.getWorld(); - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - for (final PlotId plot : plots) { - if (!plot.equals(main.getId())) { - manager.removeRegion(plot.x + "-" + plot.y); - } - } - final ProtectedRegion region = manager.getRegion(main.id.x + "-" + main.id.y); - final DefaultDomain owner = region.getOwners(); - final Map, Object> flags = region.getFlags(); - final DefaultDomain members = region.getMembers(); - manager.removeRegion(main.id.x + "-" + main.id.y); - - final Location location1 = PlotHelper.getPlotBottomLocAbs(world, plots.get(0)); - final Location location2 = PlotHelper.getPlotTopLocAbs(world, plots.get(plots.size() - 1)); - - final BlockVector vector1 = new BlockVector(location1.getBlockX(), 1, location1.getBlockZ()); - final BlockVector vector2 = new BlockVector(location2.getBlockX(), world.getMaxHeight(), location2.getBlockZ()); - final ProtectedRegion rg = new ProtectedCuboidRegion(main.id.x + "-" + main.id.y, vector1, vector2); - - rg.setFlags(flags); - - rg.setOwners(owner); - - rg.setMembers(members); - - manager.addRegion(rg); - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onUnlink(final PlotUnlinkEvent event) { - try { - final World w = event.getWorld(); - final ArrayList plots = event.getPlots(); - final Plot main = PlotMain.getPlots(w).get(plots.get(0)); - - final RegionManager manager = PlotMain.worldGuard.getRegionManager(w); - final ProtectedRegion region = manager.getRegion(main.id.x + "-" + main.id.y); - - final DefaultDomain owner = region.getOwners(); - final Map, Object> flags = region.getFlags(); - final DefaultDomain members = region.getMembers(); - - manager.removeRegion(main.id.x + "-" + main.id.y); - for (int i = 1; i < plots.size(); i++) { - final PlotId id = plots.get(i); - final Location location1 = PlotHelper.getPlotBottomLocAbs(w, id); - final Location location2 = PlotHelper.getPlotTopLocAbs(w, id); - - final BlockVector vector1 = new BlockVector(location1.getBlockX(), 1, location1.getBlockZ()); - final BlockVector vector2 = new BlockVector(location2.getBlockX(), w.getMaxHeight(), location2.getBlockZ()); - final ProtectedRegion rg = new ProtectedCuboidRegion(id.x + "-" + id.y, vector1, vector2); - - rg.setFlags(flags); - - rg.setOwners(owner); - - rg.setMembers(members); - - manager.addRegion(rg); - } - } catch (final Exception e) { - } - } - - @EventHandler - public void onPlotClaim(final PlayerClaimPlotEvent event) { - try { - final Player player = event.getPlayer(); - final Plot plot = event.getPlot(); - final RegionManager manager = PlotMain.worldGuard.getRegionManager(plot.getWorld()); - - final Location location1 = PlotHelper.getPlotBottomLoc(plot.getWorld(), plot.getId()); - final Location location2 = PlotHelper.getPlotTopLoc(plot.getWorld(), plot.getId()); - - final BlockVector vector1 = new BlockVector(location1.getBlockX(), 1, location1.getBlockZ()); - final BlockVector vector2 = new BlockVector(location2.getBlockX(), plot.getWorld().getMaxHeight(), location2.getBlockZ()); - - final ProtectedRegion region = new ProtectedCuboidRegion(plot.getId().x + "-" + plot.getId().y, vector1, vector2); - - final DefaultDomain owner = new DefaultDomain(); - owner.addPlayer(PlotMain.worldGuard.wrapPlayer(player)); - - region.setOwners(owner); - - manager.addRegion(region); - } catch (final Exception e) { - } - } - - @EventHandler - public void onPlotDelete(final PlotDeleteEvent event) { - try { - final PlotId plot = event.getPlotId(); - final World world = Bukkit.getWorld(event.getWorld()); - - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - manager.removeRegion(plot.x + "-" + plot.y); - } catch (final Exception e) { - } - } - - public void addUser(final Player requester, final UUID user, final World world, final Plot plot) { - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - ProtectedRegion region = manager.getRegion(plot.id.x + "-" + plot.id.y); - DefaultDomain members = region.getMembers(); - members.addPlayer(UUIDHandler.getName(user)); - region.setMembers(members); - } - - public void removeUser(final Player requester, final UUID user, final World world, final Plot plot) { - final RegionManager manager = PlotMain.worldGuard.getRegionManager(world); - ProtectedRegion region = manager.getRegion(plot.id.x + "-" + plot.id.y); - DefaultDomain members = region.getMembers(); - members.removePlayer(UUIDHandler.getName(user)); - region.setMembers(members); - } - - @EventHandler - public void onPlotHelper(final PlayerPlotHelperEvent event) { - if (event.wasAdded()) { - addUser(event.getInitiator(), event.getPlayer(), event.getInitiator().getWorld(), event.getPlot()); - } - else { - removeUser(event.getInitiator(), event.getPlayer(), event.getInitiator().getWorld(), event.getPlot()); - } - } - - @EventHandler - public void onPlotTrusted(final PlayerPlotTrustedEvent event) { - if (event.wasAdded()) { - addUser(event.getInitiator(), event.getPlayer(), event.getInitiator().getWorld(), event.getPlot()); - } - else { - removeUser(event.getInitiator(), event.getPlayer(), event.getInitiator().getWorld(), event.getPlot()); - } - } - - @EventHandler - public void onPlotDenied(final PlayerPlotTrustedEvent event) { - if (event.wasAdded()) { - removeUser(event.getInitiator(), event.getPlayer(), event.getInitiator().getWorld(), event.getPlot()); - } - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockLoc.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockLoc.java index d16e38716..1cc9b4b9e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockLoc.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockLoc.java @@ -1,17 +1,14 @@ package com.intellectualcrafters.plot.object; - - public class BlockLoc { public int x; public int y; public int z; - public BlockLoc(int x, int y, int z) { + public BlockLoc(final int x, final int y, final int z) { this.x = x; this.y = y; this.z = z; - } @Override @@ -25,7 +22,7 @@ public class BlockLoc { } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -35,8 +32,7 @@ public class BlockLoc { if (getClass() != obj.getClass()) { return false; } - BlockLoc other = (BlockLoc) obj; + final BlockLoc other = (BlockLoc) obj; return ((this.x == other.x) && (this.y == other.y) && (this.z == other.z)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockWrapper.java index 39fbeda1a..b65a8adfa 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BlockWrapper.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; import org.bukkit.World; @@ -33,32 +32,27 @@ import org.bukkit.block.Block; * @author Citymonstret */ public class BlockWrapper { - /** * X Coordinate */ public final int x; - /** * Y Coordinate */ public final int y; - /** * Z Coordinate */ public final int z; - /** * Block ID */ public final int id; - /** * Block Data Value */ public final byte data; - + /** * Constructor * @@ -75,13 +69,13 @@ public class BlockWrapper { this.id = id; this.data = data; } - + /** * Alternative Constructor Uses block data, rather than typed data * * @param block Block from which we get the data */ - @SuppressWarnings({"deprecation", "unused"}) + @SuppressWarnings({ "deprecation", "unused" }) public BlockWrapper(final Block block) { this.x = block.getX(); this.y = block.getY(); @@ -89,7 +83,7 @@ public class BlockWrapper { this.id = block.getTypeId(); this.data = block.getData(); } - + /** * Get a block based on the block wrapper * @@ -97,7 +91,7 @@ public class BlockWrapper { * * @return block created/fetched from settings */ - @SuppressWarnings({"unused", "deprecation"}) + @SuppressWarnings({ "unused", "deprecation" }) public Block toBlock(final World world) { final Block block = world.getBlockAt(this.x, this.y, this.z); block.setTypeIdAndData(this.id, this.data, true); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BukkitOfflinePlayer.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BukkitOfflinePlayer.java new file mode 100644 index 000000000..c09e291be --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BukkitOfflinePlayer.java @@ -0,0 +1,38 @@ +package com.intellectualcrafters.plot.object; + +import java.util.UUID; + +import org.bukkit.OfflinePlayer; + +public class BukkitOfflinePlayer implements OfflinePlotPlayer { + + public final OfflinePlayer player; + + /** + * Please do not use this method. Instead use BukkitUtil.getPlayer(Player), as it caches player objects. + * @param player + */ + public BukkitOfflinePlayer(OfflinePlayer player) { + this.player = player; + } + + @Override + public UUID getUUID() { + return player.getUniqueId(); + } + + @Override + public long getLastPlayed() { + return player.getLastPlayed(); + } + + @Override + public boolean isOnline() { + return player.isOnline(); + } + + @Override + public String getName() { + return player.getName(); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BukkitPlayer.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BukkitPlayer.java new file mode 100644 index 000000000..02735f673 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/BukkitPlayer.java @@ -0,0 +1,105 @@ +package com.intellectualcrafters.plot.object; + +import java.util.HashSet; +import java.util.UUID; + +import org.bukkit.entity.Player; + +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; + +public class BukkitPlayer implements PlotPlayer { + + public final Player player; + UUID uuid; + String name; + private HashSet hasPerm; + private HashSet noPerm; + private int op = 0; + + /** + * Please do not use this method. Instead use BukkitUtil.getPlayer(Player), as it caches player objects. + * @param player + */ + public BukkitPlayer(Player player) { + this.player = player; + } + + @Override + public Location getLocation() { + return BukkitUtil.getLocation(this.player); + } + + @Override + public UUID getUUID() { + if (this.uuid == null) { + this.uuid = UUIDHandler.getUUID(this); + } + return this.uuid; + } + + @Override + public boolean hasPermission(String perm) { + if (noPerm.contains(perm)) { + return false; + } + if (hasPerm.contains(perm)) { + return true; + } + boolean result = player.hasPermission(perm); + if (!result) { + noPerm.add(perm); + return false; + } + hasPerm.add(perm); + return true; + } + + @Override + public void sendMessage(String message) { + this.player.sendMessage(message); + } + + @Override + public void teleport(Location loc) { + this.player.teleport(new org.bukkit.Location(BukkitUtil.getWorld(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ())); + + } + + @Override + public boolean isOp() { + if (this.op != 0) { + if (this.op == 1) { + return false; + } + return true; + } + boolean result = this.player.isOp(); + if (!result) { + this.op = 1; + return false; + } + this.op = 2; + return true; + } + + @Override + public String getName() { + if (this.name == null) { + this.name = player.getName(); + } + return this.name; + } + + @Override + public boolean isOnline() { + return this.player.isOnline(); + } + + @Override + public void setCompassTarget(Location loc) { + player.setCompassTarget(new org.bukkit.Location(BukkitUtil.getWorld(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ())); + + } + +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/ChunkLoc.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/ChunkLoc.java index 4e8614585..c5282d48d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/ChunkLoc.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/ChunkLoc.java @@ -1,14 +1,12 @@ package com.intellectualcrafters.plot.object; - public class ChunkLoc { public int x; public int z; - public ChunkLoc(int x, int z) { + public ChunkLoc(final int x, final int z) { this.x = x; this.z = z; - } @Override @@ -21,7 +19,7 @@ public class ChunkLoc { } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -31,8 +29,7 @@ public class ChunkLoc { if (getClass() != obj.getClass()) { return false; } - ChunkLoc other = (ChunkLoc) obj; + final ChunkLoc other = (ChunkLoc) obj; return ((this.x == other.x) && (this.z == other.z)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java index eb85f740a..61741c1bf 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java @@ -13,7 +13,8 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * Created 2014-11-18 for PlotSquared @@ -21,37 +22,37 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Citymonstret */ public class InfoInventory implements InventoryHolder { - private final Plot plot; private final Inventory inventory; private final Player player; - + /** * Constructor * * @param plot from which we take information */ - public InfoInventory(final Plot plot, final Player player) { + public InfoInventory(final Plot plot, final PlotPlayer plr) { this.plot = plot; - this.player = player; + this.player = ((BukkitPlayer) plr).player; this.inventory = Bukkit.createInventory(this, 9, "Plot: " + plot.id.toString()); } - + @Override public Inventory getInventory() { return this.inventory; } - public String getName(UUID uuid) { - String name = UUIDHandler.getName(this.plot.getOwner()); + public String getName(final UUID uuid) { + final String name = UUIDHandler.getName(this.plot.getOwner()); if (name == null) { return "unknown"; } return name; } - + public InfoInventory build() { - final ItemStack generalInfo = getItem(Material.EMERALD, "&cPlot Info", "&cID: &6" + this.plot.getId().toString(), "&cOwner: &6" + getName(this.plot.getOwner()), "&cAlias: &6" + this.plot.settings.getAlias(), "&cBiome: &6" + this.plot.settings.getBiome().toString().replaceAll("_", "").toLowerCase(), "&cCan Build: &6" + this.plot.hasRights(this.player), "&cIs Denied: &6" + this.plot.deny_entry(this.player)); + UUID uuid = UUIDHandler.getUUID(BukkitUtil.getPlayer(player)); + final ItemStack generalInfo = getItem(Material.EMERALD, "&cPlot Info", "&cID: &6" + this.plot.getId().toString(), "&cOwner: &6" + getName(this.plot.getOwner()), "&cAlias: &6" + this.plot.settings.getAlias(), "&cBiome: &6" + this.plot.settings.getBiome().toString().replaceAll("_", "").toLowerCase(), "&cCan Build: &6" + this.plot.isAdded(uuid), "&cIs Denied: &6" + this.plot.isDenied(uuid)); final ItemStack helpers = getItem(Material.EMERALD, "&cHelpers", "&cAmount: &6" + this.plot.helpers.size(), "&8Click to view a list of the plot helpers"); final ItemStack trusted = getItem(Material.EMERALD, "&cTrusted", "&cAmount: &6" + this.plot.trusted.size(), "&8Click to view a list of trusted players"); final ItemStack denied = getItem(Material.EMERALD, "&cDenied", "&cAmount: &6" + this.plot.denied.size(), "&8Click to view a list of denied players"); @@ -63,13 +64,13 @@ public class InfoInventory implements InventoryHolder { this.inventory.setItem(6, flags); return this; } - + public InfoInventory display() { this.player.closeInventory(); this.player.openInventory(this.inventory); return this; } - + private ItemStack getItem(final Material material, final String name, final String... lore) { final ItemStack stack = new ItemStack(material); final ItemMeta meta = stack.getItemMeta(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Location.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Location.java index 4f5540496..0aa2d0ea0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Location.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Location.java @@ -10,14 +10,18 @@ import java.lang.reflect.Method; * @author Citymonstret */ public class Location implements Cloneable, Comparable { - - private double x, y, z; + private int x, y, z; private float yaw, pitch; private String world; private boolean built; private Object o; - - public Location(final String world, final double x, final double y, final double z, final float yaw, final float pitch) { + + @Override + public Location clone() { + return new Location(this.world, this.x, this.y, this.z, this.yaw, this.pitch); + } + + public Location(final String world, final int x, final int y, final int z, final float yaw, final float pitch) { this.world = world; this.x = x; this.y = y; @@ -27,178 +31,186 @@ public class Location implements Cloneable, Comparable { this.built = false; this.o = null; } - + public Location() { - this("", 0d, 0d, 0d, 0f, 0f); + this("", 0, 0, 0, 0, 0); } - - public Location(final String world, final double x, final double y, final double z) { + + public Location(final String world, final int x, final int y, final int z) { this(world, x, y, z, 0f, 0f); } - - public double getX() { + + public int getX() { return this.x; } - - public void setX(final double x) { + + public void setX(final int x) { this.x = x; this.built = false; } - - public double getY() { + + public int getY() { return this.y; } - - public void setY(final double y) { + + public void setY(final int y) { this.y = y; this.built = false; } - - public double getZ() { + + public int getZ() { return this.z; } - - public void setZ(final double z) { + + public void setZ(final int z) { this.z = z; this.built = false; } - + public String getWorld() { return this.world; } - + public void setWorld(final String world) { this.world = world; this.built = false; } - + public float getYaw() { return this.yaw; } - + public void setYaw(final float yaw) { this.yaw = yaw; this.built = false; } - + public float getPitch() { return this.pitch; } - + public void setPitch(final float pitch) { this.pitch = pitch; this.built = false; } - - public void add(double x, double y, double z) { + + public Location add(final int x, final int y, final int z) { this.x += x; this.y += y; this.z += z; this.built = false; + return this; } - + public double getEuclideanDistanceSquared(final Location l2) { - double x = getX() - l2.getX(); - double y = getY() - l2.getY(); - double z = getZ() - l2.getZ(); + final double x = getX() - l2.getX(); + final double y = getY() - l2.getY(); + final double z = getZ() - l2.getZ(); return (x * x) + (y * y) + (z * z); } - + public double getEuclideanDistance(final Location l2) { return Math.sqrt(getEuclideanDistanceSquared(l2)); } - + public boolean isInSphere(final Location origin, final int radius) { - return getEuclideanDistanceSquared(origin) < radius * radius; + return getEuclideanDistanceSquared(origin) < (radius * radius); } - + @Override public int hashCode() { int hash = 127; - hash = hash * 31 + (int) x; - hash = hash * 31 + (int) y; - hash = hash * 31 + (int) z; - hash = (int) (hash * 31 + getYaw()); - hash = (int) (hash * 31 + getPitch()); - return hash * 31 + (world == null ? 127 : world.hashCode()); + hash = (hash * 31) + this.x; + hash = (hash * 31) + this.y; + hash = (hash * 31) + this.z; + hash = (int) ((hash * 31) + getYaw()); + hash = (int) ((hash * 31) + getPitch()); + return (hash * 31) + (this.world == null ? 127 : this.world.hashCode()); } - + public boolean isInAABB(final Location min, final Location max) { - return x >= min.getX() && x <= max.getX() && y >= min.getY() && - y <= max.getY() && z >= min.getX() && z < max.getZ(); + return (this.x >= min.getX()) && (this.x <= max.getX()) && (this.y >= min.getY()) && (this.y <= max.getY()) && (this.z >= min.getX()) && (this.z < max.getZ()); } - - public void lookTowards(double x, double y) { - double l = this.x - x; - double w = this.z - z; - double c = Math.sqrt(l * l + w * w); - if ((Math.asin(w / c) / Math.PI * 180) > 90) { - setYaw((float) (180 - (-Math.asin(l / c) / Math.PI * 180))); + + public void lookTowards(final int x, final int y) { + final double l = this.x - x; + final double w = this.z - this.z; + final double c = Math.sqrt((l * l) + (w * w)); + if (((Math.asin(w / c) / Math.PI) * 180) > 90) { + setYaw((float) (180 - ((-Math.asin(l / c) / Math.PI) * 180))); } else { - setYaw((float) (-Math.asin(l / c) / Math.PI * 180)); + setYaw((float) ((-Math.asin(l / c) / Math.PI) * 180)); } this.built = false; } - - public void subtract(double x, double y, double z) { + + public Location subtract(final int x, final int y, final int z) { this.x -= x; this.y -= y; this.z -= z; this.built = false; + return this; } - + @Override - public boolean equals(Object o) { - if (!(o instanceof Location)) + public boolean equals(final Object o) { + if (o == null) { return false; - Location l = (Location) o; - return x == l.getX() && y == l.getY() && - z == l.getZ() && world.equals(l.getWorld()) && - yaw == l.getY() && pitch == l.getPitch(); + } + if (!(o instanceof Location)) { + return false; + } + final Location l = (Location) o; + return (this.x == l.getX()) && (this.y == l.getY()) && (this.z == l.getZ()) && this.world.equals(l.getWorld()) && (this.yaw == l.getY()) && (this.pitch == l.getPitch()); } - + @Override public int compareTo(final Location o) { if (o == null) { throw new NullPointerException("Specified object was null"); } - if (x == o.getX() && y == o.getY() || z == o.getZ()) + if (((this.x == o.getX()) && (this.y == o.getY())) || (this.z == o.getZ())) { return 0; - if (x < o.getX() && y < o.getY() && z < o.getZ()) + } + if ((this.x < o.getX()) && (this.y < o.getY()) && (this.z < o.getZ())) { return -1; + } return 1; } - + @Override public String toString() { - return "\"plotsquaredlocation\":{" + "\"x\":" + x + ",\"y\":" + y + ",\"z\":" + z + ",\"yaw\":" + yaw + ",\"pitch\":" + pitch + ",\"world\":\"" + world + "\"}"; + return "\"plotsquaredlocation\":{" + "\"x\":" + this.x + ",\"y\":" + this.y + ",\"z\":" + this.z + ",\"yaw\":" + this.yaw + ",\"pitch\":" + this.pitch + ",\"world\":\"" + this.world + "\"}"; } - + private Object getBukkitWorld() { try { - Class clazz = Class.forName("org.bukkit.Bukkit"); - return clazz.getMethod("getWorld", String.class).invoke(null, world); - } catch (Exception e) { + final Class clazz = Class.forName("org.bukkit.Bukkit"); + return clazz.getMethod("getWorld", String.class).invoke(null, this.world); + } catch (final Exception e) { return null; } } - + public Object toBukkitLocation() { - if (built) { - return o; + if (this.built) { + return this.o; } try { - Constructor constructor = Class.forName("org.bukkit.Location").getConstructor(Class.forName("org.bukkit.World"), double.class, double.class, double.class, float.class, float.class); - built = true; - return (o = constructor.newInstance(Class.forName("org.bukkit.World").cast(getBukkitWorld()), x, y, z, yaw, pitch)); + final Constructor constructor = Class.forName("org.bukkit.Location").getConstructor(Class.forName("org.bukkit.World"), double.class, double.class, double.class, float.class, float.class); + this.built = true; + return (this.o = constructor.newInstance(Class.forName("org.bukkit.World").cast(getBukkitWorld()), this.x, this.y, this.z, this.yaw, this.pitch)); } catch (IllegalAccessException | InstantiationException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException e) { return null; } } - + + /** + * Please use utility class as this is not efficient + */ public void teleport(final Object o) throws Exception { if (o.getClass().getName().contains("org.bukkit.entity")) { - Method m = o.getClass().getMethod("teleport", Class.forName("org.bukkit.Location")); + final Method m = o.getClass().getMethod("teleport", Class.forName("org.bukkit.Location")); m.invoke(o, toBukkitLocation()); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/OfflinePlotPlayer.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/OfflinePlotPlayer.java new file mode 100644 index 000000000..41d3865fe --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/OfflinePlotPlayer.java @@ -0,0 +1,18 @@ +package com.intellectualcrafters.plot.object; + +import java.util.UUID; + +/** + * Created 2015-02-20 for PlotSquared + * + * @author Citymonstret + */ +public interface OfflinePlotPlayer { + public UUID getUUID(); + + public long getLastPlayed(); + + public boolean isOnline(); + + public String getName(); +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java index 20547a052..a11eef6f0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; import java.util.ArrayList; @@ -26,16 +25,9 @@ import java.util.HashSet; import java.util.Set; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.Flag; -import com.intellectualcrafters.plot.util.PlotHelper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; /** * The plot class @@ -43,8 +35,8 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * @author Citymonstret * @author Empire92 */ -@SuppressWarnings("javadoc") public class Plot implements Cloneable { - +@SuppressWarnings("javadoc") +public class Plot implements Cloneable { /** * plot ID */ @@ -86,34 +78,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; */ public boolean hasChanged = false; public boolean countsTowardsMax = true; - - /** - * Primary constructor - * - * @param id - * @param owner - * @param plotBiome - * @param helpers - * @param denied - * - * @deprecated - */ - @Deprecated - @SuppressWarnings("unused") - public Plot(final PlotId id, final UUID owner, final Biome plotBiome, final ArrayList helpers, final ArrayList denied, final String world) { - this.id = id; - this.settings = new PlotSettings(this); - this.owner = owner; - this.deny_entry = this.owner == null; - this.helpers = helpers; - this.denied = denied; - this.trusted = new ArrayList<>(); - this.settings.setAlias(""); - this.delete = false; - this.settings.flags = new HashSet(); - this.world = world; - } - + /** * Primary constructor * @@ -135,41 +100,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; this.settings.flags = new HashSet(); this.world = world; } - - /** - * Constructor for saved plots - * - * @param id - * @param owner - * @param plotBiome - * @param helpers - * @param denied - * @param merged - * - * @deprecated - */ - @Deprecated - @SuppressWarnings("unused") - public Plot(final PlotId id, final UUID owner, final Biome plotBiome, final ArrayList helpers, final ArrayList trusted, final ArrayList denied, final String alias, final BlockLoc position, final Set flags, final String world, final boolean[] merged) { - this.id = id; - this.settings = new PlotSettings(this); - this.owner = owner; - this.deny_entry = this.owner != null; - this.trusted = trusted; - this.helpers = helpers; - this.denied = denied; - this.settings.setAlias(alias); - this.settings.setPosition(position); - this.settings.setMerged(merged); - this.delete = false; - if (flags != null) { - this.settings.flags = flags; - } else { - this.settings.flags = new HashSet(); - } - this.world = world; - } - + /** * Constructor for saved plots * @@ -198,7 +129,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; } this.world = world; } - + /** * Check if the plot has a set owner * @@ -207,7 +138,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public boolean hasOwner() { return this.owner != null; } - + /** * Check if the player is either the owner or on the helpers list * @@ -215,10 +146,10 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * * @return true if the player is added as a helper or is the owner */ - public boolean hasRights(final Player player) { - return PlotMain.hasPermission(player, "plots.admin.build.other") || ((this.helpers != null) && this.helpers.contains(DBFunc.everyone)) || ((this.helpers != null) && this.helpers.contains(UUIDHandler.getUUID(player))) || ((this.owner != null) && this.owner.equals(UUIDHandler.getUUID(player))) || ((this.owner != null) && (this.trusted != null) && (UUIDHandler.uuidWrapper.getPlayer(this.owner) != null) && (this.trusted.contains(UUIDHandler.getUUID(player)) || this.trusted.contains(DBFunc.everyone))); + public boolean isAdded(final UUID uuid) { + return ((this.helpers != null) && this.helpers.contains(DBFunc.everyone)) || ((this.helpers != null) && this.helpers.contains(uuid)) || ((this.owner != null) && this.owner.equals(uuid)) || ((this.owner != null) && (this.trusted != null) && (UUIDHandler.getPlayer(this.owner) != null) && (this.trusted.contains(uuid) || this.trusted.contains(DBFunc.everyone))); } - + /** * Should the player be allowed to enter? * @@ -226,40 +157,33 @@ import com.intellectualcrafters.plot.util.UUIDHandler; * * @return false if the player is allowed to enter */ - public boolean deny_entry(final Player player) { - return (this.denied != null) && ((this.denied.contains(DBFunc.everyone) && !this.hasRights(player)) || (!this.hasRights(player) && this.denied.contains(UUIDHandler.getUUID(player)))); + public boolean isDenied(final UUID uuid) { + return (this.denied != null) && ((this.denied.contains(DBFunc.everyone) && !this.isAdded(uuid)) || (!this.isAdded(uuid) && this.denied.contains(uuid))); } - + /** * Get the UUID of the owner */ public UUID getOwner() { return this.owner; } - + /** * Set the owner * * @param player */ - public void setOwner(final Player player) { - this.owner = UUIDHandler.getUUID(player); + public void setOwner(final UUID uuid) { + this.owner = uuid; } - + /** * Get the plot ID */ public PlotId getId() { return this.id; } - - /** - * Get the plot World - */ - public World getWorld() { - return Bukkit.getWorld(this.world); - } - + /** * Get a clone of the plot * @@ -269,11 +193,11 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public Object clone() throws CloneNotSupportedException { final Plot p = (Plot) super.clone(); if (!p.equals(this) || (p != this)) { - return new Plot(this.id, this.owner, this.helpers, this.trusted, this.denied, this.settings.getAlias(), this.settings.getPosition(), this.settings.flags, getWorld().getName(), this.settings.getMerged()); + return new Plot(this.id, this.owner, this.helpers, this.trusted, this.denied, this.settings.getAlias(), this.settings.getPosition(), this.settings.flags, this.world, this.settings.getMerged()); } return p; } - + /** * Deny someone (use DBFunc.addDenied() as well) * @@ -282,7 +206,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public void addDenied(final UUID uuid) { this.denied.add(uuid); } - + /** * Add someone as a helper (use DBFunc as well) * @@ -291,7 +215,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public void addHelper(final UUID uuid) { this.helpers.add(uuid); } - + /** * Add someone as a trusted user (use DBFunc as well) * @@ -300,19 +224,20 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public void addTrusted(final UUID uuid) { this.trusted.add(uuid); } - + /** * Get plot display name * * @return alias if set, else id */ + @Override public String toString() { if (this.settings.getAlias().length() > 1) { return this.settings.getAlias(); } return this.world + ";" + this.getId().x + ";" + this.getId().y; } - + /** * Remove a denied player (use DBFunc as well) * @@ -321,7 +246,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public void removeDenied(final UUID uuid) { this.denied.remove(uuid); } - + /** * Remove a helper (use DBFunc as well) * @@ -330,7 +255,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public void removeHelper(final UUID uuid) { this.helpers.remove(uuid); } - + /** * Remove a trusted user (use DBFunc as well) * @@ -339,16 +264,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; public void removeTrusted(final UUID uuid) { this.trusted.remove(uuid); } - - /** - * Clear a plot - * - * @param plr initiator - */ - public void clear(final Player plr, final boolean isDelete) { - PlotHelper.clear(plr, this, isDelete); - } - + @Override public boolean equals(final Object obj) { if (this == obj) { @@ -363,7 +279,7 @@ import com.intellectualcrafters.plot.util.UUIDHandler; final Plot other = (Plot) obj; return ((this.id.x.equals(other.id.x)) && (this.id.y.equals(other.id.y)) && (this.world.equals(other.world))); } - + /** * Get the plot hashcode * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotBlock.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotBlock.java index e6d0782f1..b27a3c0d4 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotBlock.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotBlock.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; /** @@ -27,12 +26,12 @@ package com.intellectualcrafters.plot.object; public class PlotBlock { public final short id; public final byte data; - + public PlotBlock(final short id, final byte data) { this.id = id; this.data = data; } - + @Override public boolean equals(final Object obj) { if (this == obj) { @@ -45,12 +44,12 @@ public class PlotBlock { return false; } final PlotBlock other = (PlotBlock) obj; - return (this.id == other.id && (this.data == other.data || this.data == -1 || other.data == -1)); + return ((this.id == other.id) && ((this.data == other.data) || (this.data == -1) || (other.data == -1))); } - + @Override public int hashCode() { - return id; + return this.id; } @Override diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotCluster.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotCluster.java index 5df277f5a..2bdef8e7c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotCluster.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotCluster.java @@ -6,62 +6,58 @@ import java.util.UUID; import com.intellectualcrafters.plot.database.DBFunc; public class PlotCluster { - - public final String world; - - public PlotSettings settings; - public UUID owner; - - public HashSet helpers = new HashSet(); - public HashSet invited = new HashSet(); - - private PlotId pos1; - private PlotId pos2; - - public PlotId getP1() { - return this.pos1; - } - - public PlotId getP2() { - return this.pos2; - } - - public void setP1(PlotId id) { - this.pos1 = id; - } - - public void setP2(PlotId id) { - this.pos2 = id; - } - - public PlotCluster(String world, PlotId pos1, PlotId pos2, UUID owner) { - this.world = world; - this.pos1 = pos1; - this.pos2 = pos2; - this.owner = owner; - this.settings = new PlotSettings(null); - } - - public boolean hasRights(UUID uuid) { - return (owner.equals(uuid) || invited.contains(uuid)|| invited.contains(DBFunc.everyone) || helpers.contains(uuid) || helpers.contains(DBFunc.everyone)); + public final String world; + public PlotSettings settings; + public UUID owner; + public HashSet helpers = new HashSet(); + public HashSet invited = new HashSet(); + private PlotId pos1; + private PlotId pos2; + + public PlotId getP1() { + return this.pos1; } - - public boolean hasHelperRights(UUID uuid) { - return (owner.equals(uuid) || helpers.contains(uuid) || helpers.contains(DBFunc.everyone)); + + public PlotId getP2() { + return this.pos2; } - - public String getName() { - return this.settings.getAlias(); - } - - @Override - public int hashCode() { - return this.pos1.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { + + public void setP1(final PlotId id) { + this.pos1 = id; + } + + public void setP2(final PlotId id) { + this.pos2 = id; + } + + public PlotCluster(final String world, final PlotId pos1, final PlotId pos2, final UUID owner) { + this.world = world; + this.pos1 = pos1; + this.pos2 = pos2; + this.owner = owner; + this.settings = new PlotSettings(null); + } + + public boolean hasRights(final UUID uuid) { + return (this.owner.equals(uuid) || this.invited.contains(uuid) || this.invited.contains(DBFunc.everyone) || this.helpers.contains(uuid) || this.helpers.contains(DBFunc.everyone)); + } + + public boolean hasHelperRights(final UUID uuid) { + return (this.owner.equals(uuid) || this.helpers.contains(uuid) || this.helpers.contains(DBFunc.everyone)); + } + + public String getName() { + return this.settings.getAlias(); + } + + @Override + public int hashCode() { + return this.pos1.hashCode(); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { return true; } if (obj == null) { @@ -72,10 +68,10 @@ public class PlotCluster { } final PlotCluster other = (PlotCluster) obj; return (this.world.equals(other.world) && this.pos1.equals(other.pos1) && this.pos2.equals(other.pos2)); - } - - @Override - public String toString() { - return world + ";" + pos1.x + ";" + pos1.y + ";" + pos2.x + ";" + pos2.y; - } + } + + @Override + public String toString() { + return this.world + ";" + this.pos1.x + ";" + this.pos1.y + ";" + this.pos2.x + ";" + this.pos2.y; + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotClusterId.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotClusterId.java index 127996f6e..ae8f4d2f1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotClusterId.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotClusterId.java @@ -1,12 +1,11 @@ package com.intellectualcrafters.plot.object; public class PlotClusterId { - - public final PlotId pos1; - public final PlotId pos2; - - public PlotClusterId(PlotId pos1, PlotId pos2) { - this.pos1 = pos1; - this.pos2 = pos2; - } + public final PlotId pos1; + public final PlotId pos2; + + public PlotClusterId(final PlotId pos1, final PlotId pos2) { + this.pos1 = pos1; + this.pos2 = pos2; + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotComment.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotComment.java index 1472435bb..0effd85d2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotComment.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotComment.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; /** @@ -28,7 +27,7 @@ public class PlotComment { public final String comment; public final int tier; public final String senderName; - + public PlotComment(final String comment, final String senderName, final int tier) { this.comment = comment; this.tier = tier; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotGenerator.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotGenerator.java index 73935683e..752c5e2bd 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotGenerator.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotGenerator.java @@ -18,20 +18,18 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; import org.bukkit.generator.ChunkGenerator; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; public abstract class PlotGenerator extends ChunkGenerator { - public PlotGenerator(final String world) { - PlotMain.loadWorld(world, this); + PlotSquared.loadWorld(world, this); } - + public abstract PlotWorld getNewPlotWorld(final String world); - + public abstract PlotManager getPlotManager(); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotHologram.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotHologram.java index bb6b97007..99953d5a0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotHologram.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotHologram.java @@ -7,7 +7,7 @@ // //import com.gmail.filoghost.holographicdisplays.api.Hologram; //import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; -//import com.intellectualcrafters.plot.PlotMain; +//import com.intellectualcrafters.plot.PlotSquared; //import com.intellectualcrafters.plot.util.PlotHelper; // ///** @@ -25,7 +25,7 @@ // public PlotHologram(final String world, final PlotId id) { // this.id = id; // this.world = world; -// this.hologram = createHologram(PlotMain.getPlotManager(world).getSignLoc(Bukkit.getWorld(world), PlotMain.getWorldSettings(world), PlotHelper.getPlot(Bukkit.getWorld(world), id))); +// this.hologram = createHologram(PlotSquared.getPlotManager(world).getSignLoc(Bukkit.getWorld(world), PlotSquared.getPlotWorld(world), PlotHelper.getPlot(Bukkit.getWorld(world), id))); // } // // public static Hologram createHologram(final org.bukkit.Location location) { @@ -34,7 +34,7 @@ // // public static JavaPlugin getPlugin() { // if (plugin == null) { -// plugin = JavaPlugin.getPlugin(PlotMain.class); +// plugin = JavaPlugin.getPlugin(PlotSquared.class); // } // return plugin; // } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotId.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotId.java index ba57c9016..53c46c5c8 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotId.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotId.java @@ -18,11 +18,9 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; public class PlotId { - /** * x value */ @@ -31,7 +29,7 @@ public class PlotId { * y value */ public Integer y; - + /** * PlotId class (PlotId x,y values do not correspond to Block locations) * @@ -42,7 +40,7 @@ public class PlotId { this.x = x; this.y = y; } - + /** * Get a Plot Id based on a string * @@ -64,7 +62,7 @@ public class PlotId { } return new PlotId(x, y); } - + @Override public boolean equals(final Object obj) { if (this == obj) { @@ -79,12 +77,12 @@ public class PlotId { final PlotId other = (PlotId) obj; return ((this.x.equals(other.x)) && (this.y.equals(other.y))); } - + @Override public String toString() { return this.x + ";" + this.y; } - + @Override public int hashCode() { if (this.x >= 0) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java index 6197014ca..5c2706b14 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotLoc.java @@ -4,7 +4,7 @@ public class PlotLoc { public short x; public short z; - public PlotLoc(short x, short z) { + public PlotLoc(final short x, final short z) { this.x = x; this.z = z; } @@ -19,7 +19,7 @@ public class PlotLoc { } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (this == obj) { return true; } @@ -29,7 +29,7 @@ public class PlotLoc { if (getClass() != obj.getClass()) { return false; } - PlotLoc other = (PlotLoc) obj; + final PlotLoc other = (PlotLoc) obj; return ((this.x == other.x) && (this.z == other.z)); } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotManager.java index 71c71dba5..62bd5aab5 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotManager.java @@ -18,75 +18,67 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; import java.util.ArrayList; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Biome; - public abstract class PlotManager { - /* * Plot locations (methods with Abs in them will not need to consider mega * plots) */ - - public abstract PlotId getPlotIdAbs(final PlotWorld plotworld, final Location loc); - - public abstract PlotId getPlotId(final PlotWorld plotworld, final Location loc); - + public abstract PlotId getPlotIdAbs(final PlotWorld plotworld, final int x, final int y, final int z); + + public abstract PlotId getPlotId(final PlotWorld plotworld, final int x, final int y, final int z); + // If you have a circular plot, just return the corner if it were a square public abstract Location getPlotBottomLocAbs(final PlotWorld plotworld, final PlotId plotid); - + // the same applies here public abstract Location getPlotTopLocAbs(final PlotWorld plotworld, final PlotId plotid); + /* * Plot clearing (return false if you do not support some method) */ - public abstract boolean clearPlot(final World world, final PlotWorld plotworld, final Plot plot, boolean isDelete, Runnable whenDone); - - public abstract boolean claimPlot(final World world, final PlotWorld plotworld, final Plot plot); + public abstract boolean clearPlot(final PlotWorld plotworld, final Plot plot, boolean isDelete, Runnable whenDone); - public abstract boolean unclaimPlot(final World world, final PlotWorld plotworld, final Plot plot); + public abstract boolean claimPlot(final PlotWorld plotworld, final Plot plot); + + public abstract boolean unclaimPlot(final PlotWorld plotworld, final Plot plot); + + public abstract Location getSignLoc(final PlotWorld plotworld, final Plot plot); - public abstract Location getSignLoc(final World world, final PlotWorld plotworld, final Plot plot); - /* * Plot set functions (return false if you do not support the specific set * method) */ - - public abstract String[] getPlotComponents(final World world, final PlotWorld plotworld, final PlotId plotid); + public abstract String[] getPlotComponents(final PlotWorld plotworld, final PlotId plotid); + + public abstract boolean setComponent(final PlotWorld plotworld, final PlotId plotid, final String component, final PlotBlock[] blocks); + + public abstract boolean setBiome(final Plot plot, final int biome); - public abstract boolean setComponent(final World world, final PlotWorld plotworld, final PlotId plotid, final String component, final PlotBlock[] blocks); - - public abstract boolean setBiome(final World world, final Plot plot, final Biome biome); - /* * PLOT MERGING (return false if your generator does not support plot * merging) */ public abstract boolean createRoadEast(final PlotWorld plotworld, final Plot plot); - + public abstract boolean createRoadSouth(final PlotWorld plotworld, final Plot plot); - + public abstract boolean createRoadSouthEast(final PlotWorld plotworld, final Plot plot); - + public abstract boolean removeRoadEast(final PlotWorld plotworld, final Plot plot); - + public abstract boolean removeRoadSouth(final PlotWorld plotworld, final Plot plot); - + public abstract boolean removeRoadSouthEast(final PlotWorld plotworld, final Plot plot); - - public abstract boolean startPlotMerge(final World world, final PlotWorld plotworld, final ArrayList plotIds); - - public abstract boolean startPlotUnlink(final World world, final PlotWorld plotworld, final ArrayList plotIds); - - public abstract boolean finishPlotMerge(final World world, final PlotWorld plotworld, final ArrayList plotIds); - - public abstract boolean finishPlotUnlink(final World world, final PlotWorld plotworld, final ArrayList plotIds); - + + public abstract boolean startPlotMerge(final PlotWorld plotworld, final ArrayList plotIds); + + public abstract boolean startPlotUnlink(final PlotWorld plotworld, final ArrayList plotIds); + + public abstract boolean finishPlotMerge(final PlotWorld plotworld, final ArrayList plotIds); + + public abstract boolean finishPlotUnlink(final PlotWorld plotworld, final ArrayList plotIds); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java new file mode 100644 index 000000000..f74f500f8 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotPlayer.java @@ -0,0 +1,28 @@ +package com.intellectualcrafters.plot.object; + +import java.util.UUID; + +/** + * Created 2015-02-20 for PlotSquared + * + * @author Citymonstret + */ +public interface PlotPlayer { + public Location getLocation(); + + public UUID getUUID(); + + public boolean hasPermission(final String perm); + + public void sendMessage(final String message); + + public void teleport(final Location loc); + + public boolean isOp(); + + public boolean isOnline(); + + public String getName(); + + public void setCompassTarget(Location loc); +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSelection.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSelection.java deleted file mode 100644 index 69fa04bb4..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSelection.java +++ /dev/null @@ -1,136 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.object; - -import java.util.HashMap; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; - -import com.intellectualcrafters.plot.util.PlotHelper; - -/** - * Created 2014-10-12 for PlotSquared - * - * @author Citymonstret - */ -@SuppressWarnings("deprecation") public class PlotSelection { - - public final static HashMap currentSelection = new HashMap<>(); - - private final PlotBlock[] plotBlocks; - - private final int width; - - private final Plot plot; - - private final Biome biome; - - public PlotSelection(final int width, final World world, final Plot plot) { - this.width = width; - this.plot = plot; - - this.plotBlocks = new PlotBlock[(width * width) * (world.getMaxHeight() - 1)]; - - final Location bot = PlotHelper.getPlotBottomLocAbs(world, plot.getId()), top = PlotHelper.getPlotTopLocAbs(world, plot.getId()); - final int minX = bot.getBlockX(), maxX = top.getBlockX(), minZ = bot.getBlockZ(), maxZ = top.getBlockZ(), minY = 1, maxY = world.getMaxHeight(); - Block current; - - this.biome = world.getBiome(minX, minZ); - - int index = 0; - for (int x = minX; x < maxX; x++) { - for (int z = minZ; z < maxZ; z++) { - for (int y = minY; y < maxY; y++) { - current = world.getBlockAt(x + 1, y, z + 1); - this.plotBlocks[index++] = new PlotBlock((short) current.getTypeId(), current.getData()); - } - } - } - - // Yay :D - } - - public static boolean swap(final World world, final PlotId id1, final PlotId id2) { - - final Location bot2 = PlotHelper.getPlotBottomLocAbs(world, id2).add(1, 0, 1); - final Location bot1 = PlotHelper.getPlotBottomLocAbs(world, id1).add(1, 0, 1); - final Location top1 = PlotHelper.getPlotTopLocAbs(world, id1); - final int minX = bot1.getBlockX(), maxX = top1.getBlockX(), minZ = bot1.getBlockZ(), maxZ = top1.getBlockZ(), minX2 = bot2.getBlockX(), minZ2 = bot2.getBlockZ(); - for (int x = 0; x <= (maxX - minX); x++) { - for (int z = 0; z <= (maxZ - minZ); z++) { - for (int y = 1; y <= world.getMaxHeight(); y++) { - - final Block block1 = world.getBlockAt(x + minX, y, z + minZ); - final Block block2 = world.getBlockAt(x + minX2, y, z + minZ2); - - final BlockWrapper b1 = wrapBlock(block1); - final BlockWrapper b2 = wrapBlock(block2); - - if ((b1.id != b2.id) || (b1.data != b2.data)) { - PlotHelper.setBlock(world, b1.x, b1.y, b1.z, b2.id, b2.data); - } - } - } - } - return true; - } - - private static BlockWrapper wrapBlock(final Block block) { - return new BlockWrapper(block.getX(), block.getY(), block.getZ(), (short) block.getTypeId(), block.getData()); - } - - public PlotBlock[] getBlocks() { - return this.plotBlocks; - } - - public int getWidth() { - return this.width; - } - - public Plot getPlot() { - return this.plot; - } - - public void paste(final World world, final Plot plot) { - - final Location bot = PlotHelper.getPlotBottomLocAbs(world, plot.getId()), top = PlotHelper.getPlotTopLocAbs(world, plot.getId()); - final int minX = bot.getBlockX(), maxX = top.getBlockX(), minZ = bot.getBlockZ(), maxZ = top.getBlockZ(), minY = 1, maxY = world.getMaxHeight(); - - if (this.biome != world.getBiome(minX, minZ)) { - PlotHelper.setBiome(world, plot, this.biome); - } - - int index = 0; - PlotBlock current; - for (int x = minX; x < maxX; x++) { - for (int z = minZ; z < maxZ; z++) { - for (int y = minY; y < maxY; y++) { - current = this.plotBlocks[index++]; - world.getBlockAt(x + 1, y, z + 1).setTypeIdAndData(current.id, current.data, true); - } - } - } - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSettings.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSettings.java index e0a39f0ad..c21fc6e3b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSettings.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotSettings.java @@ -18,17 +18,15 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; import java.util.ArrayList; import java.util.Set; -import org.bukkit.block.Biome; - import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; -import com.intellectualcrafters.plot.util.PlotHelper; +import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.MainUtil; /** * plot settings @@ -36,7 +34,8 @@ import com.intellectualcrafters.plot.util.PlotHelper; * @author Citymonstret * @author Empire92 */ -@SuppressWarnings("unused") public class PlotSettings { +@SuppressWarnings("unused") +public class PlotSettings { /** * Plot */ @@ -44,7 +43,7 @@ import com.intellectualcrafters.plot.util.PlotHelper; /** * merged plots */ - private boolean[] merged = new boolean[]{false, false, false, false}; + private boolean[] merged = new boolean[] { false, false, false, false }; /** * plot alias */ @@ -61,7 +60,7 @@ import com.intellectualcrafters.plot.util.PlotHelper; * Home Position */ private BlockLoc position; - + /** * Constructor * @@ -71,7 +70,7 @@ import com.intellectualcrafters.plot.util.PlotHelper; this.alias = ""; this.plot = plot; } - + /** * Check if the plot is merged in a direction
0 = North
1 = East
2 = South
3 = West
* @@ -82,48 +81,49 @@ import com.intellectualcrafters.plot.util.PlotHelper; public boolean getMerged(final int direction) { return this.merged[direction]; } - + /** * Returns true if the plot is merged (i.e. if it's a mega plot) */ public boolean isMerged() { return (this.merged[0] || this.merged[1] || this.merged[2] || this.merged[3]); } - + public boolean[] getMerged() { return this.merged; } - + public void setMerged(final boolean[] merged) { this.merged = merged; } - + public void setMerged(final int direction, final boolean merged) { this.merged[direction] = merged; } - + /** * @return biome at plot loc */ - public Biome getBiome() { - return PlotHelper.getPlotBottomLoc(this.plot.getWorld(), this.plot.getId()).add(1, 0, 1).getBlock().getBiome(); + public String getBiome() { + final Location loc = MainUtil.getPlotBottomLoc(this.plot.world, this.plot.getId()).add(1, 0, 1); + return BlockManager.manager.getBiome(loc); } - + public BlockLoc getPosition() { if (this.position == null) { return new BlockLoc(0, 0, 0); } return this.position; } - - public void setPosition(BlockLoc position) { + + public void setPosition(final BlockLoc position) { this.position = position; } - + public String getAlias() { return this.alias; } - + /** * Set the plot alias * @@ -132,28 +132,28 @@ import com.intellectualcrafters.plot.util.PlotHelper; public void setAlias(final String alias) { this.alias = alias; } - + public String getJoinMessage() { - final Flag greeting = FlagManager.getPlotFlag(plot, "greeting"); + final Flag greeting = FlagManager.getPlotFlag(this.plot, "greeting"); if (greeting != null) { return greeting.getValueString(); } return ""; } - + /** * Get the "farewell" flag value * * @return Farewell flag */ public String getLeaveMessage() { - final Flag farewell = FlagManager.getPlotFlag(plot, "farewell"); + final Flag farewell = FlagManager.getPlotFlag(this.plot, "farewell"); if (farewell != null) { return farewell.getValueString(); } return ""; } - + public ArrayList getComments(final int tier) { final ArrayList c = new ArrayList<>(); if (this.comments == null) { @@ -166,23 +166,23 @@ import com.intellectualcrafters.plot.util.PlotHelper; } return c; } - + public void setComments(final ArrayList comments) { this.comments = comments; } - + public void removeComment(final PlotComment comment) { if (this.comments.contains(comment)) { this.comments.remove(comment); } } - + public void removeComments(final ArrayList comments) { for (final PlotComment comment : comments) { removeComment(comment); } } - + public void addComment(final PlotComment comment) { if (this.comments == null) { this.comments = new ArrayList<>(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java index 8fc2813c4..1b3b0a3c7 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/PlotWorld.java @@ -18,19 +18,15 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.apache.commons.lang.StringUtils; -import org.bukkit.Material; -import org.bukkit.block.Biome; import org.bukkit.configuration.ConfigurationSection; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.Configuration; import com.intellectualcrafters.plot.config.ConfigurationNode; import com.intellectualcrafters.plot.config.Settings; @@ -41,10 +37,9 @@ import com.intellectualcrafters.plot.flag.FlagManager; * @author Jesse Boyd */ public abstract class PlotWorld { - public final static boolean AUTO_MERGE_DEFAULT = false; public final static boolean MOB_SPAWNING_DEFAULT = false; - public final static Biome PLOT_BIOME_DEFAULT = Biome.FOREST; + public final static String PLOT_BIOME_DEFAULT = "FOREST"; public final static boolean PLOT_CHAT_DEFAULT = false; public final static boolean SCHEMATIC_CLAIM_SPECIFY_DEFAULT = false; public final static boolean SCHEMATIC_ON_CLAIM_DEFAULT = false; @@ -60,28 +55,20 @@ public abstract class PlotWorld { public final static boolean SPAWN_CUSTOM_DEFAULT = true; public final static boolean SPAWN_BREEDING_DEFAULT = false; public final static boolean WORLD_BORDER_DEFAULT = false; - // are plot clusters enabled // require claim in cluster - - // TODO make this configurable // make non static and static_default_valu + add config option - public static List BLOCKS; - + public static int[] BLOCKS; static { - BLOCKS = new ArrayList<>(); - for (final Material material : Material.values()) { - if (material.isBlock() && material.isSolid() && !material.hasGravity() && !material.isTransparent() && material.isOccluding() && (material != Material.DROPPER) && (material != Material.COMMAND)) { - BLOCKS.add(material); - } - } + BLOCKS = new int[] { + 1,2,3,4,5,7,14,15,16,17,19,21,22,23,24,25,35,41,42,43,45,47,48,49,52,56,57,58,61,62,73,74,80,82,84,86,87,88,91,97,98,99,100,103,110,112,120,121,123,124,125,129,133,153,155,159,162,165,166,168,170,172,173,174,179,181 + }; } - public final String worldname; public boolean AUTO_MERGE; public boolean MOB_SPAWNING; - public Biome PLOT_BIOME; + public String PLOT_BIOME; public boolean PLOT_CHAT; public boolean SCHEMATIC_CLAIM_SPECIFY = false; public boolean SCHEMATIC_ON_CLAIM; @@ -100,45 +87,43 @@ public abstract class PlotWorld { public boolean WORLD_BORDER; public int TYPE = 0; public int TERRAIN = 0; - + public PlotWorld(final String worldname) { this.worldname = worldname; } - + /** * When a world is created, the following method will be called for each * * @param config Configuration Section */ public void loadDefaultConfiguration(final ConfigurationSection config) { - if (config.contains("generator.terrain")) { - this.TERRAIN = config.getInt("generator.terrain"); - this.TYPE = config.getInt("generator.type"); - } + if (config.contains("generator.terrain")) { + this.TERRAIN = config.getInt("generator.terrain"); + this.TYPE = config.getInt("generator.type"); + } this.MOB_SPAWNING = config.getBoolean("natural_mob_spawning"); this.AUTO_MERGE = config.getBoolean("plot.auto_merge"); - this.PLOT_BIOME = (Biome) Configuration.BIOME.parseString(config.getString("plot.biome")); + this.PLOT_BIOME = (String) Configuration.BIOME.parseString(config.getString("plot.biome")); this.SCHEMATIC_ON_CLAIM = config.getBoolean("schematic.on_claim"); this.SCHEMATIC_FILE = config.getString("schematic.file"); this.SCHEMATIC_CLAIM_SPECIFY = config.getBoolean("schematic.specify_on_claim"); this.SCHEMATICS = config.getStringList("schematic.schematics"); - this.USE_ECONOMY = config.getBoolean("economy.use"); + this.USE_ECONOMY = config.getBoolean("economy.use") && PlotSquared.economy != null; this.PLOT_PRICE = config.getDouble("economy.prices.claim"); this.MERGE_PRICE = config.getDouble("economy.prices.merge"); this.SELL_PRICE = config.getDouble("economy.prices.sell"); this.PLOT_CHAT = config.getBoolean("chat.enabled"); this.WORLD_BORDER = config.getBoolean("world.border"); - List flags = config.getStringList("flags.default"); + final List flags = config.getStringList("flags.default"); if (flags == null) { this.DEFAULT_FLAGS = new Flag[] {}; - } - else { + } else { try { this.DEFAULT_FLAGS = FlagManager.parseFlags(flags); - } - catch (Exception e) { - PlotMain.sendConsoleSenderMessage("&cInvalid default flags for "+this.worldname+": "+StringUtils.join(flags,",")); - this.DEFAULT_FLAGS = new Flag[]{}; + } catch (final Exception e) { + PlotSquared.log("&cInvalid default flags for " + this.worldname + ": " + StringUtils.join(flags, ",")); + this.DEFAULT_FLAGS = new Flag[] {}; } } this.PVP = config.getBoolean("event.pvp"); @@ -148,9 +133,9 @@ public abstract class PlotWorld { this.SPAWN_BREEDING = config.getBoolean("event.spawn.breeding"); loadConfiguration(config); } - + public abstract void loadConfiguration(final ConfigurationSection config); - + /** * Saving core plotworld settings * @@ -158,7 +143,6 @@ public abstract class PlotWorld { */ public void saveConfiguration(final ConfigurationSection config) { final HashMap options = new HashMap<>(); - options.put("natural_mob_spawning", PlotWorld.MOB_SPAWNING_DEFAULT); options.put("plot.auto_merge", PlotWorld.AUTO_MERGE_DEFAULT); options.put("plot.biome", PlotWorld.PLOT_BIOME_DEFAULT.toString()); @@ -178,10 +162,10 @@ public abstract class PlotWorld { options.put("event.spawn.custom", PlotWorld.SPAWN_CUSTOM_DEFAULT); options.put("event.spawn.breeding", PlotWorld.SPAWN_BREEDING_DEFAULT); options.put("world.border", PlotWorld.WORLD_BORDER_DEFAULT); - if (Settings.ENABLE_CLUSTERS && this.TYPE != 0) { + if (Settings.ENABLE_CLUSTERS && (this.TYPE != 0)) { options.put("generator.terrain", this.TERRAIN); options.put("generator.type", this.TYPE); - } + } final ConfigurationNode[] settings = getSettingNodes(); /* * Saving generator specific settings @@ -189,14 +173,13 @@ public abstract class PlotWorld { for (final ConfigurationNode setting : settings) { options.put(setting.getConstant(), setting.getType().parseObject(setting.getValue())); } - for (final String option : options.keySet()) { if (!config.contains(option)) { config.set(option, options.get(option)); } } } - + /** * Used for the /plot setup command Return null if you do not want to support this feature * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/RegionWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/RegionWrapper.java index 1eb2a9e61..9f07ea83b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/RegionWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/RegionWrapper.java @@ -1,13 +1,12 @@ package com.intellectualcrafters.plot.object; - public class RegionWrapper { public final int minX; public final int maxX; public final int minZ; public final int maxZ; - public RegionWrapper(int minX, int maxX, int minZ, int maxZ) { + public RegionWrapper(final int minX, final int maxX, final int minZ, final int maxZ) { this.maxX = maxX; this.minX = minX; this.maxZ = maxZ; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/SetupObject.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/SetupObject.java new file mode 100644 index 000000000..f809c99ef --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/SetupObject.java @@ -0,0 +1,13 @@ +package com.intellectualcrafters.plot.object; + +import com.intellectualcrafters.plot.config.ConfigurationNode; + +public class SetupObject { + public int current = 0; + public int setup_index = 0; + public String world = null; + public String generator = null; + public int type = 0; + public int terrain = 0; + public ConfigurationNode[] step = null; +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/StringWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/StringWrapper.java index f6df20a35..bfea23147 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/StringWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/StringWrapper.java @@ -18,16 +18,14 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.object; - /** * @author Empire92 */ public class StringWrapper { public final String value; - + /** * Constructor * @@ -36,7 +34,7 @@ public class StringWrapper { public StringWrapper(final String value) { this.value = value; } - + /** * Check if a wrapped string equals another one * @@ -56,12 +54,12 @@ public class StringWrapper { return false; } final StringWrapper other = (StringWrapper) obj; - if (other.value == null || this.value == null) { + if ((other.value == null) || (this.value == null)) { return false; } return other.value.toLowerCase().equals(this.value.toLowerCase()); } - + /** * Get the string value * @@ -71,7 +69,7 @@ public class StringWrapper { public String toString() { return this.value; } - + /** * Get the hash value * diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/AgeableStats.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/AgeableStats.java index 779bfddc8..829a201d1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/AgeableStats.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/AgeableStats.java @@ -1,9 +1,7 @@ package com.intellectualcrafters.plot.object.entity; public class AgeableStats { - public int age; public boolean locked; public boolean adult; - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/EntityWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/EntityWrapper.java index da7740b57..094c57148 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/EntityWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/EntityWrapper.java @@ -30,40 +30,32 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; public class EntityWrapper { - public short id; public float yaw; public float pitch; public double x; public double y; public double z; - public short depth; - public EntityBaseStats base = null; - // Extended public ItemStack stack; public ItemStack[] inventory; public byte dataByte; public byte dataByte2; public String dataString; - - public LivingEntityStats lived; - public AgeableStats aged; - public TameableStats tamed; private HorseStats horse; - + public void storeInventory(final InventoryHolder held) { this.inventory = held.getInventory().getContents().clone(); } - + private void restoreLiving(final LivingEntity entity) { if (this.lived.loot) { entity.setCanPickupItems(this.lived.loot); @@ -72,33 +64,31 @@ public class EntityWrapper { entity.setCustomName(this.lived.name); entity.setCustomNameVisible(this.lived.visible); } - if (this.lived.potions != null && this.lived.potions.size() > 0) { + if ((this.lived.potions != null) && (this.lived.potions.size() > 0)) { entity.addPotionEffects(this.lived.potions); } entity.setRemainingAir(this.lived.air); entity.setRemoveWhenFarAway(this.lived.persistent); - - if (lived.equipped) { - EntityEquipment equipment = entity.getEquipment(); + if (this.lived.equipped) { + final EntityEquipment equipment = entity.getEquipment(); equipment.setItemInHand(this.lived.hands); equipment.setHelmet(this.lived.helmet); equipment.setChestplate(this.lived.chestplate); equipment.setLeggings(this.lived.leggings); equipment.setBoots(this.lived.boots); } - - if (lived.leashed) { + if (this.lived.leashed) { // TODO leashes -// World world = entity.getWorld(); -// Entity leash = world.spawnEntity(new Location(world, Math.floor(x) + lived.leash_x, Math.floor(y) + lived.leash_y, Math.floor(z) + lived.leash_z), EntityType.LEASH_HITCH); -// entity.setLeashHolder(leash); + // World world = entity.getWorld(); + // Entity leash = world.spawnEntity(new Location(world, Math.floor(x) + lived.leash_x, Math.floor(y) + lived.leash_y, Math.floor(z) + lived.leash_z), EntityType.LEASH_HITCH); + // entity.setLeashHolder(leash); } } - + private void restoreInventory(final InventoryHolder entity) { entity.getInventory().setContents(this.inventory); } - + public void storeLiving(final LivingEntity lived) { this.lived = new LivingEntityStats(); this.lived.potions = lived.getActivePotionEffects(); @@ -108,16 +98,13 @@ public class EntityWrapper { this.lived.health = (float) lived.getHealth(); this.lived.air = (short) lived.getRemainingAir(); this.lived.persistent = lived.getRemoveWhenFarAway(); - this.lived.leashed = lived.isLeashed(); - if (this.lived.leashed) { final Location loc = lived.getLeashHolder().getLocation(); this.lived.leash_x = (short) (this.x - loc.getBlockX()); this.lived.leash_y = (short) (this.y - loc.getBlockY()); this.lived.leash_z = (short) (this.z - loc.getBlockZ()); } - final EntityEquipment equipment = lived.getEquipment(); this.lived.equipped = equipment != null; if (this.lived.equipped) { @@ -128,7 +115,7 @@ public class EntityWrapper { this.lived.helmet = equipment.getHelmet().clone(); } } - + private void restoreTameable(final Tameable entity) { if (this.tamed.tamed) { if (this.tamed.owner != null) { @@ -137,7 +124,7 @@ public class EntityWrapper { } } } - + private void restoreAgeable(final Ageable entity) { if (!this.aged.adult) { entity.setBaby(); @@ -147,20 +134,20 @@ public class EntityWrapper { } entity.setAge(this.aged.age); } - + public void storeAgeable(final Ageable aged) { this.aged = new AgeableStats(); this.aged.age = aged.getAge(); this.aged.locked = aged.getAgeLock(); this.aged.adult = aged.isAdult(); } - + public void storeTameable(final Tameable tamed) { this.tamed = new TameableStats(); this.tamed.owner = tamed.getOwner(); this.tamed.tamed = tamed.isTamed(); } - + @SuppressWarnings("deprecation") public EntityWrapper(final org.bukkit.entity.Entity entity, final short depth) { this.depth = depth; @@ -171,11 +158,9 @@ public class EntityWrapper { this.y = loc.getY(); this.z = loc.getZ(); this.id = entity.getType().getTypeId(); - if (depth == 0) { return; } - this.base = new EntityBaseStats(); final Entity p = entity.getPassenger(); if (p != null) { @@ -188,11 +173,9 @@ public class EntityWrapper { this.base.v_x = velocity.getX(); this.base.v_y = velocity.getY(); this.base.v_z = velocity.getZ(); - if (depth == 1) { return; } - switch (entity.getType()) { case ARROW: case BOAT: @@ -227,10 +210,9 @@ public class EntityWrapper { return; } default: { - PlotMain.sendConsoleSenderMessage("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType()); + PlotSquared.log("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType()); return; } - // MISC // case DROPPED_ITEM: { final Item item = (Item) entity; @@ -253,15 +235,14 @@ public class EntityWrapper { this.z = Math.floor(this.z); final Art a = painting.getArt(); this.dataByte = getOrdinal(BlockFace.values(), painting.getFacing()); - int h = a.getBlockHeight(); - if (h % 2 == 0) { - y -= 1; + final int h = a.getBlockHeight(); + if ((h % 2) == 0) { + this.y -= 1; } this.dataString = a.name(); return; } // END MISC // - // INVENTORY HOLDER // case MINECART_CHEST: { storeInventory((InventoryHolder) entity); @@ -271,7 +252,6 @@ public class EntityWrapper { storeInventory((InventoryHolder) entity); return; } - // START LIVING ENTITY // // START AGEABLE // // START TAMEABLE // @@ -298,7 +278,6 @@ public class EntityWrapper { return; } // END AMEABLE // - case SHEEP: { final Sheep sheep = (Sheep) entity; this.dataByte = (byte) ((sheep).isSheared() ? 1 : 0); @@ -307,7 +286,6 @@ public class EntityWrapper { storeLiving((LivingEntity) entity); return; } - case VILLAGER: case CHICKEN: case COW: @@ -329,13 +307,11 @@ public class EntityWrapper { storeLiving((LivingEntity) entity); return; } - case SKELETON: { // NEW this.dataByte = (byte) ((Skeleton) entity).getSkeletonType().getId(); storeLiving((LivingEntity) entity); return; } - case ARMOR_STAND: { // NEW // CHECK positions final ArmorStand stand = (ArmorStand) entity; @@ -343,7 +319,6 @@ public class EntityWrapper { storeLiving((LivingEntity) entity); return; } - case ENDERMITE: // NEW case BAT: case ENDER_DRAGON: @@ -369,7 +344,7 @@ public class EntityWrapper { // END LIVING // } } - + @SuppressWarnings("deprecation") public Entity spawn(final World world, final int x_offset, final int z_offset) { final Location loc = new Location(world, this.x + x_offset, this.y, this.z + z_offset); @@ -378,7 +353,7 @@ public class EntityWrapper { if (this.id == -1) { return null; } - EntityType type = EntityType.fromId(this.id); + final EntityType type = EntityType.fromId(this.id); Entity entity; switch (type) { case DROPPED_ITEM: { @@ -392,7 +367,6 @@ public class EntityWrapper { entity = world.spawnEntity(loc, type); break; } - if (this.depth == 0) { return entity; } @@ -443,10 +417,9 @@ public class EntityWrapper { return entity; } default: { - PlotMain.sendConsoleSenderMessage("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType()); + PlotSquared.log("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType()); return entity; } - // MISC // case ITEM_FRAME: { final ItemFrame itemframe = (ItemFrame) entity; @@ -461,7 +434,6 @@ public class EntityWrapper { return entity; } // END MISC // - // INVENTORY HOLDER // case MINECART_CHEST: { restoreInventory((InventoryHolder) entity); @@ -471,7 +443,6 @@ public class EntityWrapper { restoreInventory((InventoryHolder) entity); return entity; } - // START LIVING ENTITY // // START AGEABLE // // START TAMEABLE // @@ -497,7 +468,6 @@ public class EntityWrapper { return entity; } // END AMEABLE // - case SHEEP: { final Sheep sheep = (Sheep) entity; if (this.dataByte == 1) { @@ -510,7 +480,6 @@ public class EntityWrapper { restoreLiving((LivingEntity) entity); return entity; } - case VILLAGER: case CHICKEN: case COW: @@ -536,7 +505,6 @@ public class EntityWrapper { restoreLiving((LivingEntity) entity); return entity; } - case SKELETON: { // NEW if (this.dataByte != 0) { ((Skeleton) entity).setSkeletonType(SkeletonType.values()[this.dataByte]); @@ -544,7 +512,6 @@ public class EntityWrapper { storeLiving((LivingEntity) entity); return entity; } - case ARMOR_STAND: { // NEW // CHECK positions final ArmorStand stand = (ArmorStand) entity; @@ -566,7 +533,6 @@ public class EntityWrapper { restoreLiving((LivingEntity) entity); return entity; } - case ENDERMITE: // NEW case BAT: case ENDER_DRAGON: @@ -593,7 +559,7 @@ public class EntityWrapper { } } - private byte getOrdinal(Object[] list, Object value) { + private byte getOrdinal(final Object[] list, final Object value) { for (byte i = 0; i < list.length; i++) { if (list[i].equals(value)) { return i; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/HorseStats.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/HorseStats.java index 8fc524c3e..9265667f2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/HorseStats.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/HorseStats.java @@ -1,7 +1,6 @@ package com.intellectualcrafters.plot.object.entity; public class HorseStats { - public double jump; public boolean chest; public int variant; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/LivingEntityStats.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/LivingEntityStats.java index e482a63b8..c70028eb1 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/LivingEntityStats.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/LivingEntityStats.java @@ -6,19 +6,16 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; public class LivingEntityStats { - public boolean loot; public String name; public boolean visible; public float health; public short air; public boolean persistent; - public boolean leashed; public short leash_x; public short leash_y; public short leash_z; - public boolean equipped; public ItemStack hands; public ItemStack helmet; @@ -26,5 +23,4 @@ public class LivingEntityStats { public ItemStack leggings; public ItemStack chestplate; public Collection potions; - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/TameableStats.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/TameableStats.java index 9ff08b87c..e3d347cf0 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/TameableStats.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/entity/TameableStats.java @@ -3,8 +3,6 @@ package com.intellectualcrafters.plot.object.entity; import org.bukkit.entity.AnimalTamer; public class TameableStats { - public AnimalTamer owner; public boolean tamed; - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/AbstractTitle.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/AbstractTitle.java index de5de8ca0..dae7b8f41 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/AbstractTitle.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/AbstractTitle.java @@ -4,7 +4,7 @@ import org.bukkit.ChatColor; import org.bukkit.entity.Player; public abstract class AbstractTitle { - public static AbstractTitle TITLE_CLASS; - - public abstract void sendTitle(Player player, String head, String sub, ChatColor head_color, ChatColor sub_color); + public static AbstractTitle TITLE_CLASS; + + public abstract void sendTitle(Player player, String head, String sub, ChatColor head_color, ChatColor sub_color); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitle.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitle.java index 4050a947f..028687206 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitle.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitle.java @@ -4,17 +4,16 @@ import org.bukkit.ChatColor; import org.bukkit.entity.Player; public class DefaultTitle extends AbstractTitle { - @Override - public void sendTitle(Player player, String head, String sub, ChatColor head_color, ChatColor sub_color) { - try { - DefaultTitleManager title = new DefaultTitleManager(head,sub,1, 2, 1); - title.setTitleColor(head_color); - title.setSubtitleColor(sub_color); - title.send(player); - } - catch (Throwable e) { - AbstractTitle.TITLE_CLASS = new HackTitle(); - AbstractTitle.TITLE_CLASS.sendTitle(player, head, sub, head_color, sub_color); - } - } + @Override + public void sendTitle(final Player player, final String head, final String sub, final ChatColor head_color, final ChatColor sub_color) { + try { + final DefaultTitleManager title = new DefaultTitleManager(head, sub, 1, 2, 1); + title.setTitleColor(head_color); + title.setSubtitleColor(sub_color); + title.send(player); + } catch (final Throwable e) { + AbstractTitle.TITLE_CLASS = new HackTitle(); + AbstractTitle.TITLE_CLASS.sendTitle(player, head, sub, head_color, sub_color); + } + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitleManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitleManager.java index a21d16259..6ea57eafb 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitleManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/DefaultTitleManager.java @@ -15,396 +15,389 @@ import org.bukkit.entity.Player; * * @version 1.1.0 * @author Maxim Van de Wynckel - * + * */ public class DefaultTitleManager { - /* Title packet */ - private Class packetTitle; - /* Title packet actions ENUM */ - private Class packetActions; - /* Chat serializer */ - private Class nmsChatSerializer; - private Class chatBaseComponent; - /* Title text and color */ - private String title = ""; - private ChatColor titleColor = ChatColor.WHITE; - /* Subtitle text and color */ - private String subtitle = ""; - private ChatColor subtitleColor = ChatColor.WHITE; - /* Title timings */ - private int fadeInTime = -1; - private int stayTime = -1; - private int fadeOutTime = -1; - private boolean ticks = false; - - private static final Map, Class> CORRESPONDING_TYPES = new HashMap, Class>(); - - /** - * Create a new 1.8 title - * - * @param title - * Title - * @throws ClassNotFoundException - */ - public DefaultTitleManager(String title) throws ClassNotFoundException { - this.title = title; - loadClasses(); - } - - /** - * Create a new 1.8 title - * - * @param title - * Title text - * @param subtitle - * Subtitle text - * @throws ClassNotFoundException - */ - public DefaultTitleManager(String title, String subtitle) throws ClassNotFoundException { - this.title = title; - this.subtitle = subtitle; - loadClasses(); - } - - /** - * Copy 1.8 title - * - * @param title - * Title - * @throws ClassNotFoundException - */ - public DefaultTitleManager(DefaultTitleManager title) throws ClassNotFoundException { - // Copy title - this.title = title.title; - this.subtitle = title.subtitle; - this.titleColor = title.titleColor; - this.subtitleColor = title.subtitleColor; - this.fadeInTime = title.fadeInTime; - this.fadeOutTime = title.fadeOutTime; - this.stayTime = title.stayTime; - this.ticks = title.ticks; - loadClasses(); - } - - /** - * Create a new 1.8 title - * - * @param title - * Title text - * @param subtitle - * Subtitle text - * @param fadeInTime - * Fade in time - * @param stayTime - * Stay on screen time - * @param fadeOutTime - * Fade out time - * @throws ClassNotFoundException - */ - public DefaultTitleManager(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) throws ClassNotFoundException { - this.title = title; - this.subtitle = subtitle; - this.fadeInTime = fadeInTime; - this.stayTime = stayTime; - this.fadeOutTime = fadeOutTime; - loadClasses(); - } - - /** - * Load spigot and NMS classes - * @throws ClassNotFoundException - */ - private void loadClasses() throws ClassNotFoundException { - packetTitle = getNMSClass("PacketPlayOutTitle"); - packetActions = getNMSClass("EnumTitleAction"); - chatBaseComponent = getNMSClass("IChatBaseComponent"); - nmsChatSerializer = getNMSClass("ChatSerializer"); - } - - /** - * Set title text - * - * @param title - * Title - */ - public void setTitle(String title) { - this.title = title; - } - - /** - * Get title text - * - * @return Title text - */ - public String getTitle() { - return this.title; - } - - /** - * Set subtitle text - * - * @param subtitle - * Subtitle text - */ - public void setSubtitle(String subtitle) { - this.subtitle = subtitle; - } - - /** - * Get subtitle text - * - * @return Subtitle text - */ - public String getSubtitle() { - return this.subtitle; - } - - /** - * Set the title color - * - * @param color - * Chat color - */ - public void setTitleColor(ChatColor color) { - this.titleColor = color; - } - - /** - * Set the subtitle color - * - * @param color - * Chat color - */ - public void setSubtitleColor(ChatColor color) { - this.subtitleColor = color; - } - - /** - * Set title fade in time - * - * @param time - * Time - */ - public void setFadeInTime(int time) { - this.fadeInTime = time; - } - - /** - * Set title fade out time - * - * @param time - * Time - */ - public void setFadeOutTime(int time) { - this.fadeOutTime = time; - } - - /** - * Set title stay time - * - * @param time - * Time - */ - public void setStayTime(int time) { - this.stayTime = time; - } - - /** - * Set timings to ticks - */ - public void setTimingsToTicks() { - ticks = true; - } - - /** - * Set timings to seconds - */ - public void setTimingsToSeconds() { - ticks = false; - } - - /** - * Send the title to a player - * - * @param player - * Player - * @throws InvocationTargetException - * @throws IllegalArgumentException - * @throws IllegalAccessException - */ - public void send(Player player) throws Exception { - if (packetTitle != null) { - // First reset previous settings - resetTitle(player); - // Send timings first - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), "playerConnection").get(handle); - Object[] actions = packetActions.getEnumConstants(); - Method sendPacket = getMethod(connection.getClass(), "sendPacket"); - Object packet = - packetTitle.getConstructor(packetActions, chatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(actions[2], null, fadeInTime - * (ticks ? 1 : 20), stayTime * (ticks ? 1 : 20), fadeOutTime * (ticks ? 1 : 20)); - // Send if set - if (fadeInTime != -1 && fadeOutTime != -1 && stayTime != -1) - sendPacket.invoke(connection, packet); - - // Send title - Object serialized = - getMethod(nmsChatSerializer, "a", String.class).invoke(null, "{text:\"" - + ChatColor.translateAlternateColorCodes('&', title) + "\",color:" - + titleColor.name().toLowerCase() + "}"); - packet = - packetTitle.getConstructor(packetActions, chatBaseComponent).newInstance(actions[0], serialized); - sendPacket.invoke(connection, packet); - if (subtitle != "") { - // Send subtitle if present - serialized = - getMethod(nmsChatSerializer, "a", String.class).invoke(null, "{text:\"" - + ChatColor.translateAlternateColorCodes('&', subtitle) + "\",color:" - + subtitleColor.name().toLowerCase() + "}"); - packet = - packetTitle.getConstructor(packetActions, chatBaseComponent).newInstance(actions[1], serialized); - sendPacket.invoke(connection, packet); - } - } - } - - /** - * Broadcast the title to all players - * @throws Exception - */ - public void broadcast() throws Exception { - for (Player p : Bukkit.getOnlinePlayers()) { - send(p); - } - } - - /** - * Clear the title - * - * @param player - * Player - */ - public void clearTitle(Player player) { - try { - // Send timings first - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), "playerConnection").get(handle); - Object[] actions = packetActions.getEnumConstants(); - Method sendPacket = getMethod(connection.getClass(), "sendPacket"); - Object packet = packetTitle.getConstructor(packetActions, chatBaseComponent).newInstance(actions[3], null); - sendPacket.invoke(connection, packet); - } - catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Reset the title settings - * - * @param player - * Player - */ - public void resetTitle(Player player) { - try { - // Send timings first - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), "playerConnection").get(handle); - Object[] actions = packetActions.getEnumConstants(); - Method sendPacket = getMethod(connection.getClass(), "sendPacket"); - Object packet = packetTitle.getConstructor(packetActions, chatBaseComponent).newInstance(actions[4], null); - sendPacket.invoke(connection, packet); - } - catch (Exception e) { - e.printStackTrace(); - } - } - - private Class getPrimitiveType(Class clazz) { - return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz; - } - - private Class[] toPrimitiveTypeArray(Class[] classes) { - int a = classes != null ? classes.length : 0; - Class[] types = new Class[a]; - for (int i = 0; i < a; i++) - types[i] = getPrimitiveType(classes[i]); - return types; - } - - private static boolean equalsTypeArray(Class[] a, Class[] o) { - if (a.length != o.length) - return false; - for (int i = 0; i < a.length; i++) - if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i])) - return false; - return true; - } - - private Object getHandle(Object obj) { - try { - return getMethod("getHandle", obj.getClass()).invoke(obj); - } - catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - private Method getMethod(String name, Class clazz, Class... paramTypes) { - Class[] t = toPrimitiveTypeArray(paramTypes); - for (Method m : clazz.getMethods()) { - Class[] types = toPrimitiveTypeArray(m.getParameterTypes()); - if (m.getName().equals(name) && equalsTypeArray(types, t)) - return m; - } - return null; - } - - private String getVersion() { - String name = Bukkit.getServer().getClass().getPackage().getName(); - String version = name.substring(name.lastIndexOf('.') + 1) + "."; - return version; - } - - private Class getNMSClass(String className) throws ClassNotFoundException { - String fullName = "net.minecraft.server." + getVersion() + className; - Class clazz = null; - clazz = Class.forName(fullName); - return clazz; - } - - private Field getField(Class clazz, String name) { - try { - Field field = clazz.getDeclaredField(name); - field.setAccessible(true); - return field; - } - catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - private Method getMethod(Class clazz, String name, Class... args) { - for (Method m : clazz.getMethods()) - if (m.getName().equals(name) && (args.length == 0 || ClassListEqual(args, m.getParameterTypes()))) { - m.setAccessible(true); - return m; - } - return null; - } - - private boolean ClassListEqual(Class[] l1, Class[] l2) { - boolean equal = true; - if (l1.length != l2.length) - return false; - for (int i = 0; i < l1.length; i++) - if (l1[i] != l2[i]) { - equal = false; - break; - } - return equal; - } + /* Title packet */ + private Class packetTitle; + /* Title packet actions ENUM */ + private Class packetActions; + /* Chat serializer */ + private Class nmsChatSerializer; + private Class chatBaseComponent; + /* Title text and color */ + private String title = ""; + private ChatColor titleColor = ChatColor.WHITE; + /* Subtitle text and color */ + private String subtitle = ""; + private ChatColor subtitleColor = ChatColor.WHITE; + /* Title timings */ + private int fadeInTime = -1; + private int stayTime = -1; + private int fadeOutTime = -1; + private boolean ticks = false; + private static final Map, Class> CORRESPONDING_TYPES = new HashMap, Class>(); + + /** + * Create a new 1.8 title + * + * @param title + * Title + * @throws ClassNotFoundException + */ + public DefaultTitleManager(final String title) throws ClassNotFoundException { + this.title = title; + loadClasses(); + } + + /** + * Create a new 1.8 title + * + * @param title + * Title text + * @param subtitle + * Subtitle text + * @throws ClassNotFoundException + */ + public DefaultTitleManager(final String title, final String subtitle) throws ClassNotFoundException { + this.title = title; + this.subtitle = subtitle; + loadClasses(); + } + + /** + * Copy 1.8 title + * + * @param title + * Title + * @throws ClassNotFoundException + */ + public DefaultTitleManager(final DefaultTitleManager title) throws ClassNotFoundException { + // Copy title + this.title = title.title; + this.subtitle = title.subtitle; + this.titleColor = title.titleColor; + this.subtitleColor = title.subtitleColor; + this.fadeInTime = title.fadeInTime; + this.fadeOutTime = title.fadeOutTime; + this.stayTime = title.stayTime; + this.ticks = title.ticks; + loadClasses(); + } + + /** + * Create a new 1.8 title + * + * @param title + * Title text + * @param subtitle + * Subtitle text + * @param fadeInTime + * Fade in time + * @param stayTime + * Stay on screen time + * @param fadeOutTime + * Fade out time + * @throws ClassNotFoundException + */ + public DefaultTitleManager(final String title, final String subtitle, final int fadeInTime, final int stayTime, final int fadeOutTime) throws ClassNotFoundException { + this.title = title; + this.subtitle = subtitle; + this.fadeInTime = fadeInTime; + this.stayTime = stayTime; + this.fadeOutTime = fadeOutTime; + loadClasses(); + } + + /** + * Load spigot and NMS classes + * @throws ClassNotFoundException + */ + private void loadClasses() throws ClassNotFoundException { + this.packetTitle = getNMSClass("PacketPlayOutTitle"); + this.packetActions = getNMSClass("EnumTitleAction"); + this.chatBaseComponent = getNMSClass("IChatBaseComponent"); + this.nmsChatSerializer = getNMSClass("ChatSerializer"); + } + + /** + * Set title text + * + * @param title + * Title + */ + public void setTitle(final String title) { + this.title = title; + } + + /** + * Get title text + * + * @return Title text + */ + public String getTitle() { + return this.title; + } + + /** + * Set subtitle text + * + * @param subtitle + * Subtitle text + */ + public void setSubtitle(final String subtitle) { + this.subtitle = subtitle; + } + + /** + * Get subtitle text + * + * @return Subtitle text + */ + public String getSubtitle() { + return this.subtitle; + } + + /** + * Set the title color + * + * @param color + * Chat color + */ + public void setTitleColor(final ChatColor color) { + this.titleColor = color; + } + + /** + * Set the subtitle color + * + * @param color + * Chat color + */ + public void setSubtitleColor(final ChatColor color) { + this.subtitleColor = color; + } + + /** + * Set title fade in time + * + * @param time + * Time + */ + public void setFadeInTime(final int time) { + this.fadeInTime = time; + } + + /** + * Set title fade out time + * + * @param time + * Time + */ + public void setFadeOutTime(final int time) { + this.fadeOutTime = time; + } + + /** + * Set title stay time + * + * @param time + * Time + */ + public void setStayTime(final int time) { + this.stayTime = time; + } + + /** + * Set timings to ticks + */ + public void setTimingsToTicks() { + this.ticks = true; + } + + /** + * Set timings to seconds + */ + public void setTimingsToSeconds() { + this.ticks = false; + } + + /** + * Send the title to a player + * + * @param player + * Player + * @throws InvocationTargetException + * @throws IllegalArgumentException + * @throws IllegalAccessException + */ + public void send(final Player player) throws Exception { + if (this.packetTitle != null) { + // First reset previous settings + resetTitle(player); + // Send timings first + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object[] actions = this.packetActions.getEnumConstants(); + final Method sendPacket = getMethod(connection.getClass(), "sendPacket"); + Object packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(actions[2], null, this.fadeInTime * (this.ticks ? 1 : 20), this.stayTime * (this.ticks ? 1 : 20), this.fadeOutTime * (this.ticks ? 1 : 20)); + // Send if set + if ((this.fadeInTime != -1) && (this.fadeOutTime != -1) && (this.stayTime != -1)) { + sendPacket.invoke(connection, packet); + } + // Send title + Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.title) + "\",color:" + this.titleColor.name().toLowerCase() + "}"); + packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[0], serialized); + sendPacket.invoke(connection, packet); + if (this.subtitle != "") { + // Send subtitle if present + serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.subtitle) + "\",color:" + this.subtitleColor.name().toLowerCase() + "}"); + packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[1], serialized); + sendPacket.invoke(connection, packet); + } + } + } + + /** + * Broadcast the title to all players + * @throws Exception + */ + public void broadcast() throws Exception { + for (final Player p : Bukkit.getOnlinePlayers()) { + send(p); + } + } + + /** + * Clear the title + * + * @param player + * Player + */ + public void clearTitle(final Player player) { + try { + // Send timings first + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object[] actions = this.packetActions.getEnumConstants(); + final Method sendPacket = getMethod(connection.getClass(), "sendPacket"); + final Object packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[3], null); + sendPacket.invoke(connection, packet); + } catch (final Exception e) { + e.printStackTrace(); + } + } + + /** + * Reset the title settings + * + * @param player + * Player + */ + public void resetTitle(final Player player) { + try { + // Send timings first + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object[] actions = this.packetActions.getEnumConstants(); + final Method sendPacket = getMethod(connection.getClass(), "sendPacket"); + final Object packet = this.packetTitle.getConstructor(this.packetActions, this.chatBaseComponent).newInstance(actions[4], null); + sendPacket.invoke(connection, packet); + } catch (final Exception e) { + e.printStackTrace(); + } + } + + private Class getPrimitiveType(final Class clazz) { + return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz; + } + + private Class[] toPrimitiveTypeArray(final Class[] classes) { + final int a = classes != null ? classes.length : 0; + final Class[] types = new Class[a]; + for (int i = 0; i < a; i++) { + types[i] = getPrimitiveType(classes[i]); + } + return types; + } + + private static boolean equalsTypeArray(final Class[] a, final Class[] o) { + if (a.length != o.length) { + return false; + } + for (int i = 0; i < a.length; i++) { + if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i])) { + return false; + } + } + return true; + } + + private Object getHandle(final Object obj) { + try { + return getMethod("getHandle", obj.getClass()).invoke(obj); + } catch (final Exception e) { + e.printStackTrace(); + return null; + } + } + + private Method getMethod(final String name, final Class clazz, final Class... paramTypes) { + final Class[] t = toPrimitiveTypeArray(paramTypes); + for (final Method m : clazz.getMethods()) { + final Class[] types = toPrimitiveTypeArray(m.getParameterTypes()); + if (m.getName().equals(name) && equalsTypeArray(types, t)) { + return m; + } + } + return null; + } + + private String getVersion() { + final String name = Bukkit.getServer().getClass().getPackage().getName(); + final String version = name.substring(name.lastIndexOf('.') + 1) + "."; + return version; + } + + private Class getNMSClass(final String className) throws ClassNotFoundException { + final String fullName = "net.minecraft.server." + getVersion() + className; + Class clazz = null; + clazz = Class.forName(fullName); + return clazz; + } + + private Field getField(final Class clazz, final String name) { + try { + final Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field; + } catch (final Exception e) { + e.printStackTrace(); + return null; + } + } + + private Method getMethod(final Class clazz, final String name, final Class... args) { + for (final Method m : clazz.getMethods()) { + if (m.getName().equals(name) && ((args.length == 0) || ClassListEqual(args, m.getParameterTypes()))) { + m.setAccessible(true); + return m; + } + } + return null; + } + + private boolean ClassListEqual(final Class[] l1, final Class[] l2) { + boolean equal = true; + if (l1.length != l2.length) { + return false; + } + for (int i = 0; i < l1.length; i++) { + if (l1[i] != l2[i]) { + equal = false; + break; + } + } + return equal; + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitle.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitle.java index b348c37dc..9534e4444 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitle.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitle.java @@ -3,22 +3,21 @@ package com.intellectualcrafters.plot.titles; import org.bukkit.ChatColor; import org.bukkit.entity.Player; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.Settings; public class HackTitle extends AbstractTitle { - @Override - public void sendTitle(Player player, String head, String sub, ChatColor head_color, ChatColor sub_color) { - try { - HackTitleManager title = new HackTitleManager(head,sub,1, 2, 1); - title.setTitleColor(head_color); - title.setSubtitleColor(sub_color); - title.send(player); - } - catch (Throwable e) { - PlotMain.sendConsoleSenderMessage("&cYour server version does not support titles!"); - Settings.TITLES = false; - AbstractTitle.TITLE_CLASS = null; - } - } + @Override + public void sendTitle(final Player player, final String head, final String sub, final ChatColor head_color, final ChatColor sub_color) { + try { + final HackTitleManager title = new HackTitleManager(head, sub, 1, 2, 1); + title.setTitleColor(head_color); + title.setSubtitleColor(sub_color); + title.send(player); + } catch (final Throwable e) { + PlotSquared.log("&cYour server version does not support titles!"); + Settings.TITLES = false; + AbstractTitle.TITLE_CLASS = null; + } + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitleManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitleManager.java index 7c9c5dfa7..b879bf45d 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitleManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/titles/HackTitleManager.java @@ -11,477 +11,444 @@ import org.bukkit.entity.Player; /** * Minecraft 1.8 Title - * + * * @version 1.0.4 * @author Maxim Van de Wynckel */ public class HackTitleManager { - /* Title packet */ - private Class packetTitle; - /* Title packet actions ENUM */ - private Class packetActions; - /* Chat serializer */ - private Class nmsChatSerializer; - /* Title text and color */ - private String title = ""; - private ChatColor titleColor = ChatColor.WHITE; - /* Subtitle text and color */ - private String subtitle = ""; - private ChatColor subtitleColor = ChatColor.WHITE; - /* Title timings */ - private int fadeInTime = -1; - private int stayTime = -1; - private int fadeOutTime = -1; - private boolean ticks = false; - - private static final Map, Class> CORRESPONDING_TYPES = new HashMap, Class>(); - - /** - * Create a new 1.8 title - * - * @param title - * Title - * @throws ClassNotFoundException - */ - public HackTitleManager(String title) throws ClassNotFoundException { - this.title = title; - loadClasses(); - } - - /** - * Create a new 1.8 title - * - * @param title - * Title text - * @param subtitle - * Subtitle text - * @throws ClassNotFoundException - */ - public HackTitleManager(String title, String subtitle) throws ClassNotFoundException { - this.title = title; - this.subtitle = subtitle; - loadClasses(); - } - - /** - * Copy 1.8 title - * - * @param title - * Title - * @throws ClassNotFoundException - */ - public HackTitleManager(HackTitleManager title) throws ClassNotFoundException { - // Copy title - this.title = title.title; - this.subtitle = title.subtitle; - this.titleColor = title.titleColor; - this.subtitleColor = title.subtitleColor; - this.fadeInTime = title.fadeInTime; - this.fadeOutTime = title.fadeOutTime; - this.stayTime = title.stayTime; - this.ticks = title.ticks; - loadClasses(); - } - - /** - * Create a new 1.8 title - * - * @param title - * Title text - * @param subtitle - * Subtitle text - * @param fadeInTime - * Fade in time - * @param stayTime - * Stay on screen time - * @param fadeOutTime - * Fade out time - * @throws ClassNotFoundException - */ - public HackTitleManager(String title, String subtitle, int fadeInTime, int stayTime, - int fadeOutTime) throws ClassNotFoundException { - this.title = title; - this.subtitle = subtitle; - this.fadeInTime = fadeInTime; - this.stayTime = stayTime; - this.fadeOutTime = fadeOutTime; - loadClasses(); - } - - /** - * Load spigot and NMS classes - * @throws ClassNotFoundException - */ - private void loadClasses() throws ClassNotFoundException { - packetTitle = getClass("org.spigotmc.ProtocolInjector$PacketTitle"); - packetActions = getClass("org.spigotmc.ProtocolInjector$PacketTitle$Action"); - nmsChatSerializer = getNMSClass("ChatSerializer"); - } - - /** - * Set title text - * - * @param title - * Title - */ - public void setTitle(String title) { - this.title = title; - } - - /** - * Get title text - * - * @return Title text - */ - public String getTitle() { - return this.title; - } - - /** - * Set subtitle text - * - * @param subtitle - * Subtitle text - */ - public void setSubtitle(String subtitle) { - this.subtitle = subtitle; - } - - /** - * Get subtitle text - * - * @return Subtitle text - */ - public String getSubtitle() { - return this.subtitle; - } - - /** - * Set the title color - * - * @param color - * Chat color - */ - public void setTitleColor(ChatColor color) { - this.titleColor = color; - } - - /** - * Set the subtitle color - * - * @param color - * Chat color - */ - public void setSubtitleColor(ChatColor color) { - this.subtitleColor = color; - } - - /** - * Set title fade in time - * - * @param time - * Time - */ - public void setFadeInTime(int time) { - this.fadeInTime = time; - } - - /** - * Set title fade out time - * - * @param time - * Time - */ - public void setFadeOutTime(int time) { - this.fadeOutTime = time; - } - - /** - * Set title stay time - * - * @param time - * Time - */ - public void setStayTime(int time) { - this.stayTime = time; - } - - /** - * Set timings to ticks - */ - public void setTimingsToTicks() { - ticks = true; - } - - /** - * Set timings to seconds - */ - public void setTimingsToSeconds() { - ticks = false; - } - - /** - * Send the title to a player - * - * @param player - * Player - */ - public void send(Player player) throws Exception { - if (getProtocolVersion(player) >= 47 && isSpigot() - && packetTitle != null) { - // First reset previous settings - resetTitle(player); - // Send timings first - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), - "playerConnection").get(handle); - Object[] actions = packetActions.getEnumConstants(); - Method sendPacket = getMethod(connection.getClass(), - "sendPacket"); - Object packet = packetTitle.getConstructor(packetActions, - Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance( - actions[2], fadeInTime * (ticks ? 1 : 20), - stayTime * (ticks ? 1 : 20), - fadeOutTime * (ticks ? 1 : 20)); - // Send if set - if (fadeInTime != -1 && fadeOutTime != -1 && stayTime != -1) - sendPacket.invoke(connection, packet); - - // Send title - Object serialized = getMethod(nmsChatSerializer, "a", - String.class).invoke( - null, - "{text:\"" - + ChatColor.translateAlternateColorCodes('&', - title) + "\",color:" - + titleColor.name().toLowerCase() + "}"); - packet = packetTitle.getConstructor(packetActions, - getNMSClass("IChatBaseComponent")).newInstance( - actions[0], serialized); - sendPacket.invoke(connection, packet); - if (subtitle != "") { - // Send subtitle if present - serialized = getMethod(nmsChatSerializer, "a", String.class) - .invoke(null, - "{text:\"" - + ChatColor - .translateAlternateColorCodes( - '&', subtitle) - + "\",color:" - + subtitleColor.name() - .toLowerCase() + "}"); - packet = packetTitle.getConstructor(packetActions, - getNMSClass("IChatBaseComponent")).newInstance( - actions[1], serialized); - sendPacket.invoke(connection, packet); - } - } - } - - /** - * Broadcast the title to all players - */ - public void broadcast() throws Exception { - for (Player p : Bukkit.getOnlinePlayers()) { - send(p); - } - } - - /** - * Clear the title - * - * @param player - * Player - */ - public void clearTitle(Player player) { - if (getProtocolVersion(player) >= 47 && isSpigot()) { - try { - // Send timings first - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), - "playerConnection").get(handle); - Object[] actions = packetActions.getEnumConstants(); - Method sendPacket = getMethod(connection.getClass(), - "sendPacket"); - Object packet = packetTitle.getConstructor(packetActions) - .newInstance(actions[3]); - sendPacket.invoke(connection, packet); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - /** - * Reset the title settings - * - * @param player - * Player - */ - public void resetTitle(Player player) { - if (getProtocolVersion(player) >= 47 && isSpigot()) { - try { - // Send timings first - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), - "playerConnection").get(handle); - Object[] actions = packetActions.getEnumConstants(); - Method sendPacket = getMethod(connection.getClass(), - "sendPacket"); - Object packet = packetTitle.getConstructor(packetActions) - .newInstance(actions[4]); - sendPacket.invoke(connection, packet); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - /** - * Get the protocol version of the player - * - * @param player - * Player - * @return Protocol version - */ - private int getProtocolVersion(Player player) { - int version = 0; - try { - Object handle = getHandle(player); - Object connection = getField(handle.getClass(), "playerConnection") - .get(handle); - Object networkManager = getValue("networkManager", connection); - version = (Integer) getMethod("getVersion", - networkManager.getClass()).invoke(networkManager); - - return version; - } catch (Exception ex) { - ex.printStackTrace(); - } - return version; - } - - /** - * Check if running spigot - * - * @return Spigot - */ - private boolean isSpigot() { - return Bukkit.getVersion().contains("Spigot"); - } - - /** - * Get class by url - * - * @param namespace - * Namespace url - * @return Class - */ - private Class getClass(String namespace) { - try { - return Class.forName(namespace); - } catch (Exception e) { - - } - return null; - } - - private Field getField(String name, Class clazz) throws Exception { - return clazz.getDeclaredField(name); - } - - private Object getValue(String name, Object obj) throws Exception { - Field f = getField(name, obj.getClass()); - f.setAccessible(true); - return f.get(obj); - } - - private Class getPrimitiveType(Class clazz) { - return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES - .get(clazz) : clazz; - } - - private Class[] toPrimitiveTypeArray(Class[] classes) { - int a = classes != null ? classes.length : 0; - Class[] types = new Class[a]; - for (int i = 0; i < a; i++) - types[i] = getPrimitiveType(classes[i]); - return types; - } - - private static boolean equalsTypeArray(Class[] a, Class[] o) { - if (a.length != o.length) - return false; - for (int i = 0; i < a.length; i++) - if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i])) - return false; - return true; - } - - private Object getHandle(Object obj) { - try { - return getMethod("getHandle", obj.getClass()).invoke(obj); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - private Method getMethod(String name, Class clazz, - Class... paramTypes) { - Class[] t = toPrimitiveTypeArray(paramTypes); - for (Method m : clazz.getMethods()) { - Class[] types = toPrimitiveTypeArray(m.getParameterTypes()); - if (m.getName().equals(name) && equalsTypeArray(types, t)) - return m; - } - return null; - } - - private String getVersion() { - String name = Bukkit.getServer().getClass().getPackage().getName(); - String version = name.substring(name.lastIndexOf('.') + 1) + "."; - return version; - } - - private Class getNMSClass(String className) throws ClassNotFoundException { - String fullName = "net.minecraft.server." + getVersion() + className; - Class clazz = null; - clazz = Class.forName(fullName); - return clazz; - } - - private Field getField(Class clazz, String name) { - try { - Field field = clazz.getDeclaredField(name); - field.setAccessible(true); - return field; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - private Method getMethod(Class clazz, String name, Class... args) { - for (Method m : clazz.getMethods()) - if (m.getName().equals(name) - && (args.length == 0 || ClassListEqual(args, - m.getParameterTypes()))) { - m.setAccessible(true); - return m; - } - return null; - } - - private boolean ClassListEqual(Class[] l1, Class[] l2) { - boolean equal = true; - if (l1.length != l2.length) - return false; - for (int i = 0; i < l1.length; i++) - if (l1[i] != l2[i]) { - equal = false; - break; - } - return equal; - } -} \ No newline at end of file + /* Title packet */ + private Class packetTitle; + /* Title packet actions ENUM */ + private Class packetActions; + /* Chat serializer */ + private Class nmsChatSerializer; + /* Title text and color */ + private String title = ""; + private ChatColor titleColor = ChatColor.WHITE; + /* Subtitle text and color */ + private String subtitle = ""; + private ChatColor subtitleColor = ChatColor.WHITE; + /* Title timings */ + private int fadeInTime = -1; + private int stayTime = -1; + private int fadeOutTime = -1; + private boolean ticks = false; + private static final Map, Class> CORRESPONDING_TYPES = new HashMap, Class>(); + + /** + * Create a new 1.8 title + * + * @param title + * Title + * @throws ClassNotFoundException + */ + public HackTitleManager(final String title) throws ClassNotFoundException { + this.title = title; + loadClasses(); + } + + /** + * Create a new 1.8 title + * + * @param title + * Title text + * @param subtitle + * Subtitle text + * @throws ClassNotFoundException + */ + public HackTitleManager(final String title, final String subtitle) throws ClassNotFoundException { + this.title = title; + this.subtitle = subtitle; + loadClasses(); + } + + /** + * Copy 1.8 title + * + * @param title + * Title + * @throws ClassNotFoundException + */ + public HackTitleManager(final HackTitleManager title) throws ClassNotFoundException { + // Copy title + this.title = title.title; + this.subtitle = title.subtitle; + this.titleColor = title.titleColor; + this.subtitleColor = title.subtitleColor; + this.fadeInTime = title.fadeInTime; + this.fadeOutTime = title.fadeOutTime; + this.stayTime = title.stayTime; + this.ticks = title.ticks; + loadClasses(); + } + + /** + * Create a new 1.8 title + * + * @param title + * Title text + * @param subtitle + * Subtitle text + * @param fadeInTime + * Fade in time + * @param stayTime + * Stay on screen time + * @param fadeOutTime + * Fade out time + * @throws ClassNotFoundException + */ + public HackTitleManager(final String title, final String subtitle, final int fadeInTime, final int stayTime, final int fadeOutTime) throws ClassNotFoundException { + this.title = title; + this.subtitle = subtitle; + this.fadeInTime = fadeInTime; + this.stayTime = stayTime; + this.fadeOutTime = fadeOutTime; + loadClasses(); + } + + /** + * Load spigot and NMS classes + * @throws ClassNotFoundException + */ + private void loadClasses() throws ClassNotFoundException { + this.packetTitle = getClass("org.spigotmc.ProtocolInjector$PacketTitle"); + this.packetActions = getClass("org.spigotmc.ProtocolInjector$PacketTitle$Action"); + this.nmsChatSerializer = getNMSClass("ChatSerializer"); + } + + /** + * Set title text + * + * @param title + * Title + */ + public void setTitle(final String title) { + this.title = title; + } + + /** + * Get title text + * + * @return Title text + */ + public String getTitle() { + return this.title; + } + + /** + * Set subtitle text + * + * @param subtitle + * Subtitle text + */ + public void setSubtitle(final String subtitle) { + this.subtitle = subtitle; + } + + /** + * Get subtitle text + * + * @return Subtitle text + */ + public String getSubtitle() { + return this.subtitle; + } + + /** + * Set the title color + * + * @param color + * Chat color + */ + public void setTitleColor(final ChatColor color) { + this.titleColor = color; + } + + /** + * Set the subtitle color + * + * @param color + * Chat color + */ + public void setSubtitleColor(final ChatColor color) { + this.subtitleColor = color; + } + + /** + * Set title fade in time + * + * @param time + * Time + */ + public void setFadeInTime(final int time) { + this.fadeInTime = time; + } + + /** + * Set title fade out time + * + * @param time + * Time + */ + public void setFadeOutTime(final int time) { + this.fadeOutTime = time; + } + + /** + * Set title stay time + * + * @param time + * Time + */ + public void setStayTime(final int time) { + this.stayTime = time; + } + + /** + * Set timings to ticks + */ + public void setTimingsToTicks() { + this.ticks = true; + } + + /** + * Set timings to seconds + */ + public void setTimingsToSeconds() { + this.ticks = false; + } + + /** + * Send the title to a player + * + * @param player + * Player + */ + public void send(final Player player) throws Exception { + if ((getProtocolVersion(player) >= 47) && isSpigot() && (this.packetTitle != null)) { + // First reset previous settings + resetTitle(player); + // Send timings first + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object[] actions = this.packetActions.getEnumConstants(); + final Method sendPacket = getMethod(connection.getClass(), "sendPacket"); + Object packet = this.packetTitle.getConstructor(this.packetActions, Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(actions[2], this.fadeInTime * (this.ticks ? 1 : 20), this.stayTime * (this.ticks ? 1 : 20), this.fadeOutTime * (this.ticks ? 1 : 20)); + // Send if set + if ((this.fadeInTime != -1) && (this.fadeOutTime != -1) && (this.stayTime != -1)) { + sendPacket.invoke(connection, packet); + } + // Send title + Object serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.title) + "\",color:" + this.titleColor.name().toLowerCase() + "}"); + packet = this.packetTitle.getConstructor(this.packetActions, getNMSClass("IChatBaseComponent")).newInstance(actions[0], serialized); + sendPacket.invoke(connection, packet); + if (this.subtitle != "") { + // Send subtitle if present + serialized = getMethod(this.nmsChatSerializer, "a", String.class).invoke(null, "{text:\"" + ChatColor.translateAlternateColorCodes('&', this.subtitle) + "\",color:" + this.subtitleColor.name().toLowerCase() + "}"); + packet = this.packetTitle.getConstructor(this.packetActions, getNMSClass("IChatBaseComponent")).newInstance(actions[1], serialized); + sendPacket.invoke(connection, packet); + } + } + } + + /** + * Broadcast the title to all players + */ + public void broadcast() throws Exception { + for (final Player p : Bukkit.getOnlinePlayers()) { + send(p); + } + } + + /** + * Clear the title + * + * @param player + * Player + */ + public void clearTitle(final Player player) { + if ((getProtocolVersion(player) >= 47) && isSpigot()) { + try { + // Send timings first + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object[] actions = this.packetActions.getEnumConstants(); + final Method sendPacket = getMethod(connection.getClass(), "sendPacket"); + final Object packet = this.packetTitle.getConstructor(this.packetActions).newInstance(actions[3]); + sendPacket.invoke(connection, packet); + } catch (final Exception e) { + e.printStackTrace(); + } + } + } + + /** + * Reset the title settings + * + * @param player + * Player + */ + public void resetTitle(final Player player) { + if ((getProtocolVersion(player) >= 47) && isSpigot()) { + try { + // Send timings first + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object[] actions = this.packetActions.getEnumConstants(); + final Method sendPacket = getMethod(connection.getClass(), "sendPacket"); + final Object packet = this.packetTitle.getConstructor(this.packetActions).newInstance(actions[4]); + sendPacket.invoke(connection, packet); + } catch (final Exception e) { + e.printStackTrace(); + } + } + } + + /** + * Get the protocol version of the player + * + * @param player + * Player + * @return Protocol version + */ + private int getProtocolVersion(final Player player) { + int version = 0; + try { + final Object handle = getHandle(player); + final Object connection = getField(handle.getClass(), "playerConnection").get(handle); + final Object networkManager = getValue("networkManager", connection); + version = (Integer) getMethod("getVersion", networkManager.getClass()).invoke(networkManager); + return version; + } catch (final Exception ex) { + ex.printStackTrace(); + } + return version; + } + + /** + * Check if running spigot + * + * @return Spigot + */ + private boolean isSpigot() { + return Bukkit.getVersion().contains("Spigot"); + } + + /** + * Get class by url + * + * @param namespace + * Namespace url + * @return Class + */ + private Class getClass(final String namespace) { + try { + return Class.forName(namespace); + } catch (final Exception e) { + } + return null; + } + + private Field getField(final String name, final Class clazz) throws Exception { + return clazz.getDeclaredField(name); + } + + private Object getValue(final String name, final Object obj) throws Exception { + final Field f = getField(name, obj.getClass()); + f.setAccessible(true); + return f.get(obj); + } + + private Class getPrimitiveType(final Class clazz) { + return CORRESPONDING_TYPES.containsKey(clazz) ? CORRESPONDING_TYPES.get(clazz) : clazz; + } + + private Class[] toPrimitiveTypeArray(final Class[] classes) { + final int a = classes != null ? classes.length : 0; + final Class[] types = new Class[a]; + for (int i = 0; i < a; i++) { + types[i] = getPrimitiveType(classes[i]); + } + return types; + } + + private static boolean equalsTypeArray(final Class[] a, final Class[] o) { + if (a.length != o.length) { + return false; + } + for (int i = 0; i < a.length; i++) { + if (!a[i].equals(o[i]) && !a[i].isAssignableFrom(o[i])) { + return false; + } + } + return true; + } + + private Object getHandle(final Object obj) { + try { + return getMethod("getHandle", obj.getClass()).invoke(obj); + } catch (final Exception e) { + e.printStackTrace(); + return null; + } + } + + private Method getMethod(final String name, final Class clazz, final Class... paramTypes) { + final Class[] t = toPrimitiveTypeArray(paramTypes); + for (final Method m : clazz.getMethods()) { + final Class[] types = toPrimitiveTypeArray(m.getParameterTypes()); + if (m.getName().equals(name) && equalsTypeArray(types, t)) { + return m; + } + } + return null; + } + + private String getVersion() { + final String name = Bukkit.getServer().getClass().getPackage().getName(); + final String version = name.substring(name.lastIndexOf('.') + 1) + "."; + return version; + } + + private Class getNMSClass(final String className) throws ClassNotFoundException { + final String fullName = "net.minecraft.server." + getVersion() + className; + Class clazz = null; + clazz = Class.forName(fullName); + return clazz; + } + + private Field getField(final Class clazz, final String name) { + try { + final Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field; + } catch (final Exception e) { + e.printStackTrace(); + return null; + } + } + + private Method getMethod(final Class clazz, final String name, final Class... args) { + for (final Method m : clazz.getMethods()) { + if (m.getName().equals(name) && ((args.length == 0) || ClassListEqual(args, m.getParameterTypes()))) { + m.setAccessible(true); + return m; + } + } + return null; + } + + private boolean ClassListEqual(final Class[] l1, final Class[] l2) { + boolean equal = true; + if (l1.length != l2.length) { + return false; + } + for (int i = 0; i < l1.length; i++) { + if (l1[i] != l2[i]) { + equal = false; + break; + } + } + return equal; + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java new file mode 100644 index 000000000..e9b1b7b54 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AChunkManager.java @@ -0,0 +1,39 @@ +package com.intellectualcrafters.plot.util; + +import java.util.HashMap; +import java.util.List; + +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.RegionWrapper; + +public abstract class AChunkManager { + public static AChunkManager manager = null; + public static RegionWrapper CURRENT_PLOT_CLEAR = null; + public static HashMap> GENERATE_BLOCKS = new HashMap<>(); + public static HashMap> GENERATE_DATA = new HashMap<>(); + + public static ChunkLoc getChunkChunk(final Location loc) { + final int x = loc.getX() >> 9; + final int z = loc.getZ() >> 9; + return new ChunkLoc(x, z); + } + + public abstract boolean loadChunk(String world, ChunkLoc loc); + + public abstract List getChunkChunks(String world); + + public abstract void deleteRegionFile(final String world, final ChunkLoc loc); + + public abstract Plot hasPlot(String world, ChunkLoc chunk); + + public abstract boolean copyRegion(final Location pos1, final Location pos2, final Location newPos, final Runnable whenDone); + + public abstract boolean regenerateRegion(final Location pos1, final Location pos2, final Runnable whenDone); + + public abstract void clearAllEntities(final Plot plot); + + public abstract void swap(String world, PlotId id, PlotId plotid); +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AbstractSetBlock.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AbstractSetBlock.java index 9ce8d8eed..0f7eb9f1f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AbstractSetBlock.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/AbstractSetBlock.java @@ -2,12 +2,12 @@ package com.intellectualcrafters.plot.util; import java.util.List; -import org.bukkit.Chunk; +import com.intellectualcrafters.plot.object.ChunkLoc; public abstract class AbstractSetBlock { public static AbstractSetBlock setBlockManager = null; public abstract boolean set(final org.bukkit.World world, final int x, final int y, final int z, final int blockId, final byte data); - public abstract void update(List list); + public abstract void update(String world, List chunks); } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/BlockManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/BlockManager.java new file mode 100644 index 000000000..500cc2a88 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/BlockManager.java @@ -0,0 +1,90 @@ +package com.intellectualcrafters.plot.util; + +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; + +public abstract class BlockManager { + public static BlockManager manager; + private static long state = 1; + + public static long nextLong() { + final long a = state; + state = xorShift64(a); + return a; + } + + public static long xorShift64(long a) { + a ^= (a << 21); + a ^= (a >>> 35); + a ^= (a << 4); + return a; + } + + public static int random(final int n) { + if (n == 1) { + return 0; + } + final long r = ((nextLong() >>> 32) * n) >> 32; + return (int) r; + } + + public abstract String[] getBiomeList(); + + public abstract int getBiomeFromString(String biome); + + public abstract int getBlockIdFromString(String block); + + public abstract int getHeighestBlock(Location loc); + + public abstract String getBiome(Location loc); + + public abstract Location getSpawn(String world); + + public abstract String[] getSign(Location loc); + + public abstract boolean isWorld(String world); + + public abstract void functionSetBlocks(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data); + + public abstract void functionSetSign(String worldname, int x, int y, int z, String[] lines); + + public abstract void functionSetBlock(String worldname, int x, int y, int z, int id, byte data); + + public abstract void functionSetBiomes(final String worldname, final int[] x, final int z[], final int[] biome); + + public static void setBiomes(final String worldname, final int[] x, final int z[], final int[] biome) { + manager.functionSetBiomes(worldname, x, z, biome); + } + + public static void setBlocks(final String worldname, final int[] x, final int y[], final int z[], final PlotBlock[][] blocks) { + final int[] id = new int[blocks.length]; + final byte[] data = new byte[blocks.length]; + for (int i = 0; i < blocks.length; i++) { + final PlotBlock[] current = blocks[i]; + final int n = random(current.length); + id[i] = current[n].id; + data[i] = current[n].data; + } + setBlocks(worldname, x, y, z, id, data); + } + + public static void setBlocks(final String worldname, final int[] x, final int y[], final int z[], final PlotBlock[] blocks) { + final int[] id = new int[blocks.length]; + final byte[] data = new byte[blocks.length]; + for (int i = 0; i < blocks.length; i++) { + final PlotBlock current = blocks[i]; + id[i] = current.id; + data[i] = current.data; + } + setBlocks(worldname, x, y, z, id, data); + } + + public static void setSign(final String worldname, final int x, final int y, final int z, final String[] lines) { + manager.functionSetSign(worldname, x, y, z, lines); + } + + public static void setBlocks(final String worldname, final int[] x, final int[] y, final int[] z, final int[] id, final byte[] data) { + manager.functionSetBlocks(worldname, x, y, z, id, data); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java deleted file mode 100644 index 12ae3cdc9..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ChunkManager.java +++ /dev/null @@ -1,748 +0,0 @@ -package com.intellectualcrafters.plot.util; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; - -import org.apache.commons.lang.mutable.MutableInt; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.DyeColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Note; -import org.bukkit.SkullType; -import org.bukkit.World; -import org.bukkit.block.Banner; -import org.bukkit.block.Beacon; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.BrewingStand; -import org.bukkit.block.Chest; -import org.bukkit.block.CommandBlock; -import org.bukkit.block.CreatureSpawner; -import org.bukkit.block.Dispenser; -import org.bukkit.block.Dropper; -import org.bukkit.block.Furnace; -import org.bukkit.block.Hopper; -import org.bukkit.block.Jukebox; -import org.bukkit.block.NoteBlock; -import org.bukkit.block.Sign; -import org.bukkit.block.Skull; -import org.bukkit.block.banner.Pattern; -import org.bukkit.block.banner.PatternType; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.Plugin; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.object.BlockLoc; -import com.intellectualcrafters.plot.object.ChunkLoc; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.RegionWrapper; -import com.intellectualcrafters.plot.object.entity.EntityWrapper; - -public class ChunkManager { - - public static RegionWrapper CURRENT_PLOT_CLEAR = null; - public static HashMap> GENERATE_BLOCKS = new HashMap<>(); - public static HashMap> GENERATE_DATA = new HashMap<>(); - public static MutableInt index = new MutableInt(0); - public static HashMap tasks = new HashMap<>(); - - public static ChunkLoc getChunkChunk(Location loc) { - int x = loc.getBlockX() >> 9; - int z = loc.getBlockZ() >> 9; - return new ChunkLoc(x, z); - } - - public static ArrayList getChunkChunks(World world) { - String directory = new File(".").getAbsolutePath() + File.separator + world.getName() + File.separator + "region"; - - File folder = new File(directory); - File[] regionFiles = folder.listFiles(); - - ArrayList chunks = new ArrayList<>(); - - for (File file : regionFiles) { - String name = file.getName(); - if (name.endsWith("mca")) { - String[] split = name.split("\\."); - try { - int x = Integer.parseInt(split[1]); - int z = Integer.parseInt(split[2]); - ChunkLoc loc = new ChunkLoc(x, z); - chunks.add(loc); - } - catch (Exception e) { } - } - } - - for (Chunk chunk : world.getLoadedChunks()) { - ChunkLoc loc = new ChunkLoc(chunk.getX() >> 5, chunk.getZ() >> 5); - if (!chunks.contains(loc)) { - chunks.add(loc); - } - } - - return chunks; - } - - public static void deleteRegionFile(final String world, final ChunkLoc loc) { - TaskManager.runTaskAsync(new Runnable() { - @Override - public void run() { - String directory = world + File.separator + "region" + File.separator + "r." + loc.x + "." + loc.z + ".mca"; - File file = new File(directory); - PlotMain.sendConsoleSenderMessage("&6 - Deleting file: " + file.getName() + " (max 1024 chunks)"); - if (file.exists()) { - file.delete(); - } - } - }); - } - - public static Plot hasPlot(World world, Chunk chunk) { - int x1 = chunk.getX() << 4; - int z1 = chunk.getZ() << 4; - int x2 = x1 + 15; - int z2 = z1 + 15; - - Location bot = new Location(world, x1, 0, z1); - Plot plot; - plot = PlotHelper.getCurrentPlot(bot); - if (plot != null && plot.owner != null) { - return plot; - } - Location top = new Location(world, x2, 0, z2); - plot = PlotHelper.getCurrentPlot(top); - if (plot != null && plot.owner != null) { - return plot; - } - return null; - } - - private static HashMap chestContents; - private static HashMap furnaceContents; - private static HashMap dispenserContents; - private static HashMap dropperContents; - private static HashMap brewingStandContents; - private static HashMap beaconContents; - private static HashMap hopperContents; - private static HashMap furnaceTime; - private static HashMap skullData; - private static HashMap jukeDisc; - private static HashMap brewTime; - private static HashMap spawnerData; - private static HashMap cmdData; - private static HashMap signContents; - private static HashMap noteBlockContents; - private static HashMap> bannerColors; - private static HashMap bannerBase; - - private static HashSet entities; - - /** - * Copy a region to a new location (in the same world) - */ - public static boolean copyRegion(final Location pos1, final Location pos2, final Location newPos, final Runnable whenDone) { - index.increment(); - final int relX = newPos.getBlockX() - pos1.getBlockX(); - final int relZ = newPos.getBlockZ() - pos1.getBlockZ(); - final RegionWrapper region = new RegionWrapper(pos1.getBlockX(), pos2.getBlockX(), pos1.getBlockZ(), pos2.getBlockZ()); - - final World world = pos1.getWorld(); - Chunk c1 = world.getChunkAt(pos1); - Chunk c2 = world.getChunkAt(pos2); - - Chunk c3 = world.getChunkAt((pos1.getBlockX() + relX) >> 4, (pos1.getBlockZ() + relZ) >> 4); - Chunk c4 = world.getChunkAt((pos2.getBlockX() + relX) >> 4, (pos2.getBlockZ() + relZ) >> 4); - - final int sx = pos1.getBlockX(); - final int sz = pos1.getBlockZ(); - final int ex = pos2.getBlockX(); - final int ez = pos2.getBlockZ(); - - final int c1x = c1.getX(); - final int c1z = c1.getZ(); - final int c2x = c2.getX(); - final int c2z = c2.getZ(); - - final int c3x = c3.getX(); - final int c3z = c3.getZ(); - final int c4x = c4.getX(); - final int c4z = c4.getZ(); - - final ArrayList chunks = new ArrayList<>(); - final ArrayList toGenerate = new ArrayList<>(); - // Load chunks - for (int x = c1x; x <= c2x; x ++) { - for (int z = c1z; z <= c2z; z ++) { - Chunk chunk = world.getChunkAt(x, z); - toGenerate.add(chunk); - } - } - - final Plugin plugin = (Plugin) PlotMain.getMain(); - final Integer currentIndex = index.toInteger(); - final int loadTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { - @Override - public void run() { - long start = System.currentTimeMillis(); - while (System.currentTimeMillis() - start < 25) { - if (toGenerate.size() == 0) { - Bukkit.getScheduler().cancelTask(tasks.get(currentIndex)); - tasks.remove(currentIndex); - TaskManager.runTask(new Runnable() { - @Override - public void run() { - index.increment(); - // Copy entities - initMaps(); - for (int x = c3x; x <= c4x; x ++) { - for (int z = c3z; z <= c4z; z ++) { - Chunk chunk = world.getChunkAt(x, z); - chunks.add(chunk); - chunk.load(false); - saveEntitiesIn(chunk, region); - restoreEntities(world, relX, relZ); - } - } - // Copy blocks - final MutableInt mx = new MutableInt(sx); - final Integer currentIndex = index.toInteger(); - final int maxY = world.getMaxHeight(); - final Integer task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { - @Override - public void run() { - long start = System.currentTimeMillis(); - while (System.currentTimeMillis() - start < 25) { - int x = mx.intValue(); - for (int z = sz; z <= ez; z++) { - saveBlocks(world, maxY, x, z); - for (int y = 1; y <= maxY; y++) { - Block block = world.getBlockAt(x, y, z); - int id = block.getTypeId(); - byte data = block.getData(); - AbstractSetBlock.setBlockManager.set(world, x + relX, y, z + relZ, id, data); - } - } - mx.increment(); - if (x == ex) { // done! - restoreBlocks(world, relX, relZ); - AbstractSetBlock.setBlockManager.update(chunks); - for (Chunk chunk : chunks) { - chunk.unload(true, true); - } - TaskManager.runTaskLater(whenDone, 1); - Bukkit.getScheduler().cancelTask(tasks.get(currentIndex)); - tasks.remove(currentIndex); - return; - } - } - }; - }, 1, 1); - - tasks.put(currentIndex, task); - } - }); - return; - } - Chunk chunk = toGenerate.get(0); - toGenerate.remove(0); - chunk.load(true); - chunks.add(chunk); - } - } - }, 1l, 1l); - tasks.put(currentIndex, loadTask); - return true; - } - - public static boolean regenerateRegion(final Location pos1, final Location pos2, final Runnable whenDone) { - index.increment(); - final Plugin plugin = (Plugin) PlotMain.getMain(); - - final World world = pos1.getWorld(); - Chunk c1 = world.getChunkAt(pos1); - Chunk c2 = world.getChunkAt(pos2); - - final int sx = pos1.getBlockX(); - final int sz = pos1.getBlockZ(); - final int ex = pos2.getBlockX(); - final int ez = pos2.getBlockZ(); - - final int c1x = c1.getX(); - final int c1z = c1.getZ(); - final int c2x = c2.getX(); - final int c2z = c2.getZ(); - - final ArrayList chunks = new ArrayList(); - for (int x = c1x; x <= c2x; x ++) { - for (int z = c1z; z <= c2z; z ++) { - Chunk chunk = world.getChunkAt(x, z); - chunk.load(false); - chunks.add(chunk); - } - } - final int maxY = world.getMaxHeight(); - final Integer currentIndex = index.toInteger(); - final Integer task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { - @Override - public void run() { - if (chunks.size() == 0) { - TaskManager.runTaskLater(whenDone, 1); - Bukkit.getScheduler().cancelTask(tasks.get(currentIndex)); - tasks.remove(currentIndex); - return; - } - CURRENT_PLOT_CLEAR = new RegionWrapper(pos1.getBlockX(), pos2.getBlockX(), pos1.getBlockZ(), pos2.getBlockZ()); - Chunk chunk = chunks.get(0); - chunks.remove(0); - int x = chunk.getX(); - int z = chunk.getZ(); - - boolean loaded = true; - if (!chunk.isLoaded()) { - boolean result = chunk.load(false); - if (!result) { - loaded = false;; - } - if (!chunk.isLoaded()) { - loaded = false; - } - } - if (loaded) { - initMaps(); - int absX = x << 4; - int absZ = z << 4; - boolean save = false; - if (x == c1x || z == c1z) { - save = true; - for (int X = 0; X < 16; X++) { - for (int Z = 0; Z < 16; Z++) { - if ((X + absX < sx || Z + absZ < sz) || (X + absX > ex || Z + absZ > ez)) { - saveBlocks(world, maxY, X + absX, Z + absZ); - } - } - } - } - else if (x == c2x || z == c2z) { - for (int X = 0; X < 16; X++) { - save = true; - for (int Z = 0; Z < 16; Z++) { - if ((X + absX > ex || Z + absZ > ez) || (X + absX < sx || Z + absZ < sz)) { - saveBlocks(world, maxY, X + absX, Z + absZ); - } - } - } - } - if (save) { - saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR); - } - world.regenerateChunk(x, z); - if (save) { - restoreBlocks(world, 0, 0); - restoreEntities(world, 0, 0); - } - chunk.unload(true, true); - AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk})); - } - CURRENT_PLOT_CLEAR = null; - } - }, 1, 1); - tasks.put(currentIndex, task); - return true; - } - - public static void initMaps() { - GENERATE_BLOCKS = new HashMap<>(); - GENERATE_DATA = new HashMap<>(); - - chestContents = new HashMap<>(); - furnaceContents = new HashMap<>(); - dispenserContents = new HashMap<>(); - dropperContents = new HashMap<>(); - brewingStandContents = new HashMap<>(); - beaconContents = new HashMap<>(); - hopperContents = new HashMap<>(); - furnaceTime = new HashMap<>(); - skullData = new HashMap<>(); - brewTime = new HashMap<>(); - jukeDisc = new HashMap<>(); - spawnerData= new HashMap<>(); - noteBlockContents = new HashMap<>(); - signContents = new HashMap<>(); - cmdData = new HashMap<>(); - bannerBase= new HashMap<>(); - bannerColors = new HashMap<>(); - - entities = new HashSet<>(); - } - - public static boolean isIn(RegionWrapper region, int x, int z) { - return (x >= region.minX && x <= region.maxX && z >= region.minZ && z <= region.maxZ); - } - - public static void saveEntitiesOut(Chunk chunk, RegionWrapper region) { - for (Entity entity : chunk.getEntities()) { - Location loc = entity.getLocation(); - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - if (isIn(region, x, z)) { - continue; - } - if (entity.getVehicle() != null) { - continue; - } - EntityWrapper wrap = new EntityWrapper(entity, (short) 2); - entities.add(wrap); - } - } - - public static void saveEntitiesIn(Chunk chunk, RegionWrapper region) { - for (Entity entity : chunk.getEntities()) { - Location loc = entity.getLocation(); - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - if (!isIn(region, x, z)) { - continue; - } - if (entity.getVehicle() != null) { - continue; - } - EntityWrapper wrap = new EntityWrapper(entity, (short) 2); - entities.add(wrap); - } - } - - public static void restoreEntities(World world, int x_offset, int z_offset) { - for (EntityWrapper entity : entities) { - try { - entity.spawn(world, x_offset, z_offset); - } - catch (Exception e) { - System.out.print("Failed to restore entity " + entity.x + "," + entity.y + "," + entity.z + " : " + entity.id +" : " + EntityType.fromId(entity.id)); - e.printStackTrace(); - } - } - } - - public static void restoreBlocks(World world, int x_offset, int z_offset) { - for (BlockLoc loc: chestContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Chest) { - Chest chest = (Chest) state; - chest.getInventory().setContents(chestContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate chest: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - - for (BlockLoc loc: signContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Sign) { - Sign sign = (Sign) state; - int i = 0; - for (String line : signContents.get(loc)) { - sign.setLine(i, line); - i++; - } - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate sign: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - - for (BlockLoc loc: dispenserContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Dispenser) { - ((Dispenser) (state)).getInventory().setContents(dispenserContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate dispenser: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: dropperContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Dropper) { - ((Dropper) (state)).getInventory().setContents(dropperContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate dispenser: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: beaconContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Beacon) { - ((Beacon) (state)).getInventory().setContents(beaconContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate beacon: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: jukeDisc.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Jukebox) { - ((Jukebox) (state)).setPlaying(Material.getMaterial(jukeDisc.get(loc))); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to restore jukebox: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: skullData.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Skull) { - Object[] data = skullData.get(loc); - if (data[0] != null) { - ((Skull) (state)).setOwner((String) data[0]); - } - if (((Integer) data[1]) != 0) { - ((Skull) (state)).setRotation(BlockFace.values()[(int) data[1]]); - } - if (((Integer) data[2]) != 0) { - ((Skull) (state)).setSkullType(SkullType.values()[(int) data[2]]); - } - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to restore jukebox: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: hopperContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Hopper) { - ((Hopper) (state)).getInventory().setContents(hopperContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate hopper: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - - for (BlockLoc loc: noteBlockContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof NoteBlock) { - ((NoteBlock) (state)).setNote(noteBlockContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate note block: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: brewTime.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof BrewingStand) { - ((BrewingStand) (state)).setBrewingTime(brewTime.get(loc)); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to restore brewing stand cooking: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - - for (BlockLoc loc: spawnerData.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof CreatureSpawner) { - ((CreatureSpawner) (state)).setCreatureTypeId(spawnerData.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to restore spawner type: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: cmdData.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof CommandBlock) { - ((CommandBlock) (state)).setCommand(cmdData.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to restore command block: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: brewingStandContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof BrewingStand) { - ((BrewingStand) (state)).getInventory().setContents(brewingStandContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate brewing stand: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: furnaceTime.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Furnace) { - Short[] time = furnaceTime.get(loc); - ((Furnace) (state)).setBurnTime(time[0]); - ((Furnace) (state)).setCookTime(time[1]); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to restore furnace cooking: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - for (BlockLoc loc: furnaceContents.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Furnace) { - ((Furnace) (state)).getInventory().setContents(furnaceContents.get(loc)); - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate furnace: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - - for (BlockLoc loc: bannerBase.keySet()) { - Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); - BlockState state = block.getState(); - if (state instanceof Banner) { - Banner banner = (Banner) state; - byte base = bannerBase.get(loc); - ArrayList colors = bannerColors.get(loc); - banner.setBaseColor(DyeColor.values()[base]); - for (Byte[] color : colors) { - banner.addPattern(new Pattern(DyeColor.getByDyeData(color[1]), PatternType.values()[color[0]])); - } - state.update(true); - } - else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate banner: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } - } - } - - public static void saveBlocks(World world, int maxY, int x, int z) { - HashMap ids = new HashMap<>(); - HashMap datas = new HashMap<>(); - for (short y = 1; y < maxY; y++) { - Block block = world.getBlockAt(x, y, z); - short id = (short) block.getTypeId(); - if (id != 0) { - ids.put(y, id); - byte data = block.getData(); - if (data != 0) { - datas.put(y, data); - } - BlockLoc bl; - switch (id) { - case 54: - bl = new BlockLoc(x, y, z); - InventoryHolder chest = (InventoryHolder) block.getState(); - ItemStack[] inventory = chest.getInventory().getContents().clone(); - chestContents.put(bl, inventory); - break; - case 52: - bl = new BlockLoc(x, y, z); - CreatureSpawner spawner = (CreatureSpawner) block.getState(); - String type = spawner.getCreatureTypeId(); - if (type != null && type.length() != 0) { - spawnerData.put(bl, type); - } - break; - case 137: - bl = new BlockLoc(x, y, z); - CommandBlock cmd = (CommandBlock) block.getState(); - String string = cmd.getCommand(); - if (string != null && string.length() > 0) { - cmdData.put(bl, string); - } - break; - case 63: case 68: case 323: - bl = new BlockLoc(x, y, z); - Sign sign = (Sign) block.getState(); - sign.getLines(); - signContents.put(bl, sign.getLines().clone()); - break; - case 61: case 62: - bl = new BlockLoc(x, y, z); - Furnace furnace = (Furnace) block.getState(); - short burn = furnace.getBurnTime(); - short cook = furnace.getCookTime(); - ItemStack[] invFur = furnace.getInventory().getContents().clone(); - furnaceContents.put(bl, invFur); - if (cook != 0) { - furnaceTime.put(bl, new Short[] {burn, cook}); - } - break; - case 23: - bl = new BlockLoc(x, y, z); - Dispenser dispenser = (Dispenser) block.getState(); - ItemStack[] invDis = dispenser.getInventory().getContents().clone(); - dispenserContents.put(bl, invDis); - break; - case 158: - bl = new BlockLoc(x, y, z); - Dropper dropper = (Dropper) block.getState(); - ItemStack[] invDro = dropper.getInventory().getContents().clone(); - dropperContents.put(bl, invDro); - break; - case 117: - bl = new BlockLoc(x, y, z); - BrewingStand brewingStand = (BrewingStand) block.getState(); - short time = (short) brewingStand.getBrewingTime(); - if (time > 0) { - brewTime.put(bl, time); - } - ItemStack[] invBre = brewingStand.getInventory().getContents().clone(); - brewingStandContents.put(bl, invBre); - break; - case 25: - bl = new BlockLoc(x, y, z); - NoteBlock noteBlock = (NoteBlock) block.getState(); - Note note = noteBlock.getNote(); - noteBlockContents.put(bl, note); - break; - case 138: - bl = new BlockLoc(x, y, z); - Beacon beacon = (Beacon) block.getState(); - ItemStack[] invBea = beacon.getInventory().getContents().clone(); - beaconContents.put(bl, invBea); - break; - case 84: - bl = new BlockLoc(x, y, z); - Jukebox jukebox = (Jukebox) block.getState(); - Material playing = jukebox.getPlaying(); - if (playing != null) { - jukeDisc.put(bl, (short) playing.getId()); - } - break; - case 154: - bl = new BlockLoc(x, y, z); - Hopper hopper = (Hopper) block.getState(); - ItemStack[] invHop = hopper.getInventory().getContents().clone(); - hopperContents.put(bl, invHop); - break; - case 397: - bl = new BlockLoc(x, y, z); - Skull skull = (Skull) block.getState(); - String o = skull.getOwner(); - byte skulltype = getOrdinal(SkullType.values(),skull.getSkullType()); - BlockFace te = skull.getRotation(); - short rot = (short) getOrdinal(BlockFace.values(), skull.getRotation()); - skullData.put(bl, new Object[] {o, rot, skulltype}); - break; - case 176: - case 177: - bl = new BlockLoc(x, y, z); - Banner banner = (Banner) block.getState(); - byte base = getOrdinal(DyeColor.values(), banner.getBaseColor()); - ArrayList types = new ArrayList<>(); - - for (Pattern pattern : banner.getPatterns()) { - types.add(new Byte[] {getOrdinal(PatternType.values(), pattern.getPattern()), pattern.getColor().getDyeData() }); - } - bannerBase.put(bl, base); - bannerColors.put(bl, types); - break; - } - } - } - ChunkLoc loc = new ChunkLoc(x, z); - GENERATE_BLOCKS.put(loc, ids); - GENERATE_DATA.put(loc, datas); - } - - private static byte getOrdinal(Object[] list, Object value) { - for (byte i = 0; i < list.length; i++) { - if (list[i].equals(value)) { - return i; - } - } - return 0; - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java index 374ea83ea..42634a86c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ClusterManager.java @@ -4,299 +4,287 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.Chunk; -import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.entity.Player; import org.bukkit.generator.BlockPopulator; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.generator.AugmentedPopulator; import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotCluster; import com.intellectualcrafters.plot.object.PlotClusterId; import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.SetBlockManager; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class ClusterManager { - public static HashMap> clusters; - private static HashSet regenerating = new HashSet<>(); - public static PlotCluster last; - - public static boolean contains(PlotCluster cluster, PlotId id) { - if (cluster.getP1().x <= id.x && cluster.getP1().y <= id.y && cluster.getP2().x >= id.x && cluster.getP2().y >= id.y) { - return true; - } - return false; - } - - public static HashSet getClusters(World world) { - return getClusters(world.getName()); - } - - public static HashSet getClusters(String world) { - if (clusters.containsKey(world)) { - return clusters.get(world); - } - return new HashSet<>(); - } - - public static Location getHome(PlotCluster cluster) { - World world = Bukkit.getWorld(cluster.world); - BlockLoc home = cluster.settings.getPosition(); - Location toReturn; - if (home.y == 0) { - // default pos - PlotId center = getCenterPlot(cluster); - toReturn = PlotHelper.getPlotHome(world, center); - if (toReturn.getBlockY() == 0) { - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final Location loc = manager.getSignLoc(world, plotworld, PlotHelper.getPlot(world, center)); - toReturn.setY(loc.getY()); - } - } - else { - toReturn = getClusterBottom(cluster).add(home.x, home.y, home.z); - } - int max = world.getHighestBlockAt(toReturn).getY(); - if (max > toReturn.getBlockY()) { - toReturn.setY(max); - } - return toReturn; - } - - public static PlotId getCenterPlot(PlotCluster cluster) { - PlotId bot = cluster.getP1(); - PlotId top = cluster.getP2(); - return new PlotId((bot.x + top.x) / 2, (bot.y + top.y) / 2); - } - - public static Location getClusterBottom(PlotCluster cluster) { - String world = cluster.world; - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final PlotManager manager = PlotMain.getPlotManager(world); - return manager.getPlotBottomLocAbs(plotworld, cluster.getP1()); - } - - public static Location getClusterTop(PlotCluster cluster) { - String world = cluster.world; - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final PlotManager manager = PlotMain.getPlotManager(world); - return manager.getPlotTopLocAbs(plotworld, cluster.getP2()); - } - - public static PlotCluster getCluster(String world, String name) { - if (!clusters.containsKey(world)) { - return null; - } - for (PlotCluster cluster : clusters.get(world)) { - if (cluster.getName().equals(name)) { - return cluster; - } - } - return null; - } - - public static boolean contains(PlotCluster cluster, Location loc) { - String world = loc.getWorld().getName(); - PlotManager manager = PlotMain.getPlotManager(world); - PlotWorld plotworld = PlotMain.getWorldSettings(world); - Location bot = manager.getPlotBottomLocAbs(plotworld, cluster.getP1()); - Location top = manager.getPlotTopLocAbs(plotworld, cluster.getP2()).add(1,0,1); - if (bot.getBlockX() < loc.getBlockX() && bot.getBlockZ() < loc.getBlockZ() && top.getBlockX() > loc.getBlockX() && top.getBlockZ() > loc.getBlockZ()) { + public static HashMap> clusters; + private static HashSet regenerating = new HashSet<>(); + public static PlotCluster last; + + public static boolean contains(final PlotCluster cluster, final PlotId id) { + if ((cluster.getP1().x <= id.x) && (cluster.getP1().y <= id.y) && (cluster.getP2().x >= id.x) && (cluster.getP2().y >= id.y)) { return true; } return false; } - - public static HashSet getIntersects(String world, PlotClusterId id) { - if (!clusters.containsKey(world)) { - return new HashSet<>(); - } - HashSet list = new HashSet(); - for (PlotCluster cluster : clusters.get(world)) { - if (intersects(cluster, id)) { - list.add(cluster); - } - } - return list; - } - - public static boolean intersects(PlotCluster cluster, PlotClusterId id) { - PlotId pos1 = cluster.getP1(); - PlotId pos2 = cluster.getP2(); - if (pos1.x <= id.pos2.x && pos2.x >= id.pos1.x && pos1.y <= id.pos2.y && pos2.y >= id.pos1.y) { - return true; - } - return false; + + public static HashSet getClusters(final World world) { + return getClusters(world.getName()); } - - public static PlotCluster getCluster(Plot plot) { - return getCluster(plot.world, plot.id); - } - - public static PlotCluster getCluster(Location loc) { - String world = loc.getWorld().getName(); - if (last != null && last.world.equals(world)) { - if (contains(last, loc)) { - return last; - } - } - if (clusters == null) { - return null; - } - HashSet local = clusters.get(world); - if (local == null) { - return null; - } - for (PlotCluster cluster : local) { - if (contains(cluster, loc)) { - last = cluster; - return cluster; - } - } - return null; - } - - public static PlotCluster getCluster(String world, PlotId id) { - if (last != null && last.world.equals(world)) { - if (contains(last, id)) { - return last; - } - } - if (clusters == null) { - return null; - } - HashSet local = clusters.get(world); - if (local == null) { - return null; - } - for (PlotCluster cluster : local) { - if (contains(cluster, id)) { - last = cluster; - return cluster; - } - } - return null; - } - - public static boolean removeCluster(PlotCluster cluster) { - if (clusters != null) { - if (clusters.containsKey(cluster.world)) { - clusters.get(cluster.world).remove(cluster); - return true; - } - } - return false; - } - - public static PlotClusterId getClusterId(PlotCluster cluster) { - return new PlotClusterId(cluster.getP1(), cluster.getP2()); - } - - public static AugmentedPopulator getPopulator(PlotCluster cluster) { - World world = Bukkit.getWorld(cluster.world); - for (Iterator iterator = world.getPopulators().iterator(); iterator.hasNext();) { - BlockPopulator populator = iterator.next(); + + public static HashSet getClusters(final String world) { + if (clusters.containsKey(world)) { + return clusters.get(world); + } + return new HashSet<>(); + } + + public static Location getHome(final PlotCluster cluster) { + final BlockLoc home = cluster.settings.getPosition(); + Location toReturn; + if (home.y == 0) { + // default pos + final PlotId center = getCenterPlot(cluster); + toReturn = MainUtil.getPlotHome(cluster.world, center); + if (toReturn.getY() == 0) { + final PlotManager manager = PlotSquared.getPlotManager(cluster.world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(cluster.world); + final Location loc = manager.getSignLoc(plotworld, MainUtil.getPlot(cluster.world, center)); + toReturn.setY(loc.getY()); + } + } else { + toReturn = getClusterBottom(cluster).add(home.x, home.y, home.z); + } + final int max = BukkitUtil.getHeighestBlock(cluster.world, toReturn.getX(), toReturn.getZ()); + if (max > toReturn.getY()) { + toReturn.setY(max); + } + return toReturn; + } + + public static PlotId getCenterPlot(final PlotCluster cluster) { + final PlotId bot = cluster.getP1(); + final PlotId top = cluster.getP2(); + return new PlotId((bot.x + top.x) / 2, (bot.y + top.y) / 2); + } + + public static Location getClusterBottom(final PlotCluster cluster) { + final String world = cluster.world; + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + return manager.getPlotBottomLocAbs(plotworld, cluster.getP1()); + } + + public static Location getClusterTop(final PlotCluster cluster) { + final String world = cluster.world; + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + return manager.getPlotTopLocAbs(plotworld, cluster.getP2()); + } + + public static PlotCluster getCluster(final String world, final String name) { + if (!clusters.containsKey(world)) { + return null; + } + for (final PlotCluster cluster : clusters.get(world)) { + if (cluster.getName().equals(name)) { + return cluster; + } + } + return null; + } + + public static boolean contains(final PlotCluster cluster, final Location loc) { + final String world = loc.getWorld(); + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final Location bot = manager.getPlotBottomLocAbs(plotworld, cluster.getP1()); + final Location top = manager.getPlotTopLocAbs(plotworld, cluster.getP2()).add(1, 0, 1); + if ((bot.getX() < loc.getX()) && (bot.getZ() < loc.getZ()) && (top.getX() > loc.getX()) && (top.getZ() > loc.getZ())) { + return true; + } + return false; + } + + public static HashSet getIntersects(final String world, final PlotClusterId id) { + if (!clusters.containsKey(world)) { + return new HashSet<>(); + } + final HashSet list = new HashSet(); + for (final PlotCluster cluster : clusters.get(world)) { + if (intersects(cluster, id)) { + list.add(cluster); + } + } + return list; + } + + public static boolean intersects(final PlotCluster cluster, final PlotClusterId id) { + final PlotId pos1 = cluster.getP1(); + final PlotId pos2 = cluster.getP2(); + if ((pos1.x <= id.pos2.x) && (pos2.x >= id.pos1.x) && (pos1.y <= id.pos2.y) && (pos2.y >= id.pos1.y)) { + return true; + } + return false; + } + + public static PlotCluster getCluster(final Plot plot) { + return getCluster(plot.world, plot.id); + } + + public static PlotCluster getCluster(final Location loc) { + final String world = loc.getWorld(); + if ((last != null) && last.world.equals(world)) { + if (contains(last, loc)) { + return last; + } + } + if (clusters == null) { + return null; + } + final HashSet local = clusters.get(world); + if (local == null) { + return null; + } + for (final PlotCluster cluster : local) { + if (contains(cluster, loc)) { + last = cluster; + return cluster; + } + } + return null; + } + + public static PlotCluster getCluster(final String world, final PlotId id) { + if ((last != null) && last.world.equals(world)) { + if (contains(last, id)) { + return last; + } + } + if (clusters == null) { + return null; + } + final HashSet local = clusters.get(world); + if (local == null) { + return null; + } + for (final PlotCluster cluster : local) { + if (contains(cluster, id)) { + last = cluster; + return cluster; + } + } + return null; + } + + public static boolean removeCluster(final PlotCluster cluster) { + if (clusters != null) { + if (clusters.containsKey(cluster.world)) { + clusters.get(cluster.world).remove(cluster); + return true; + } + } + return false; + } + + public static PlotClusterId getClusterId(final PlotCluster cluster) { + return new PlotClusterId(cluster.getP1(), cluster.getP2()); + } + + public static AugmentedPopulator getPopulator(final PlotCluster cluster) { + final World world = Bukkit.getWorld(cluster.world); + for (final BlockPopulator populator : world.getPopulators()) { if (populator instanceof AugmentedPopulator) { if (((AugmentedPopulator) populator).cluster.equals(cluster)) { return (AugmentedPopulator) populator; } } } - return null; - } - - public static PlotId estimatePlotId(Location loc) { - PlotId a = new PlotId(0, 0); - PlotId b = new PlotId(1, 1); - int xw; - int zw; - - String world = loc.getWorld().getName(); - PlotWorld plotworld = PlotMain.getWorldSettings(world); - if (plotworld == null) { - xw = 39; - zw = 39; - } - else { - PlotManager manager = PlotMain.getPlotManager(world); - Location al = manager.getPlotBottomLocAbs(plotworld, a); - Location bl = manager.getPlotBottomLocAbs(plotworld, b); - - xw = bl.getBlockX() - al.getBlockX(); - zw = bl.getBlockZ() - al.getBlockZ(); - } - - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - - return new PlotId((x/xw) + 1,(z/zw) + 1); - } - - public static void regenCluster(final PlotCluster cluster) { - if (regenerating.contains(cluster.world + ":" + cluster.getName())) { - return; - } - regenerating.add(cluster.world + ":" + cluster.getName()); - int interval = 1; - int i = 0; - final Random rand = new Random(); + return null; + } + + public static PlotId estimatePlotId(final Location loc) { + final PlotId a = new PlotId(0, 0); + final PlotId b = new PlotId(1, 1); + int xw; + int zw; + final String world = loc.getWorld(); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if (plotworld == null) { + xw = 39; + zw = 39; + } else { + final PlotManager manager = PlotSquared.getPlotManager(world); + final Location al = manager.getPlotBottomLocAbs(plotworld, a); + final Location bl = manager.getPlotBottomLocAbs(plotworld, b); + xw = bl.getX() - al.getX(); + zw = bl.getZ() - al.getZ(); + } + final int x = loc.getX(); + final int z = loc.getZ(); + return new PlotId((x / xw) + 1, (z / zw) + 1); + } + + public static void regenCluster(final PlotCluster cluster) { + if (regenerating.contains(cluster.world + ":" + cluster.getName())) { + return; + } + regenerating.add(cluster.world + ":" + cluster.getName()); + final int interval = 1; + int i = 0; + final Random rand = new Random(); final World world = Bukkit.getWorld(cluster.world); - final PlotWorld plotworld = PlotMain.getWorldSettings(cluster.world); - - Location bot = getClusterBottom(cluster); - Location top = getClusterTop(cluster); - - int minChunkX = bot.getBlockX() >> 4; - int maxChunkX = (top.getBlockX() >> 4) + 1; - int minChunkZ = bot.getBlockZ() >> 4; - int maxChunkZ = (top.getBlockZ() >> 4) + 1; - - final AugmentedPopulator populator = getPopulator(cluster); - final ArrayList chunks = new ArrayList<>(); - - TaskManager.runTaskLater(new Runnable() { + final PlotWorld plotworld = PlotSquared.getPlotWorld(cluster.world); + final Location bot = getClusterBottom(cluster); + final Location top = getClusterTop(cluster); + final int minChunkX = bot.getX() >> 4; + final int maxChunkX = (top.getX() >> 4) + 1; + final int minChunkZ = bot.getZ() >> 4; + final int maxChunkZ = (top.getZ() >> 4) + 1; + final AugmentedPopulator populator = getPopulator(cluster); + final ArrayList chunks = new ArrayList<>(); + TaskManager.runTaskLater(new Runnable() { @Override public void run() { ClusterManager.regenerating.remove(cluster.world + ":" + cluster.getName()); - Player owner = UUIDHandler.uuidWrapper.getPlayer(cluster.owner); + final PlotPlayer owner = UUIDHandler.getPlayer(cluster.owner); if (owner != null) { - PlayerFunctions.sendMessage(owner, C.CLEARING_DONE); + MainUtil.sendMessage(owner, C.CLEARING_DONE); } } - }, interval * chunks.size() + 20); - - // chunks - for (int x = minChunkX; x <= maxChunkX; x++) { + }, (interval * chunks.size()) + 20); + // chunks + for (int x = minChunkX; x <= maxChunkX; x++) { for (int z = minChunkZ; z <= maxChunkZ; z++) { final Chunk chunk = world.getChunkAt(x, z); chunks.add(chunk); } } - for (final Chunk chunk : chunks) { - i+=interval; - TaskManager.runTaskLater(new Runnable() { + for (final Chunk chunk : chunks) { + i += interval; + TaskManager.runTaskLater(new Runnable() { @Override public void run() { - if (populator == null || plotworld.TYPE == 0) { - AbstractSetBlock.setBlockManager.update(Arrays.asList( new Chunk[] {chunk})); + if ((populator == null) || (plotworld.TYPE == 0)) { + SetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); world.regenerateChunk(chunk.getX(), chunk.getZ()); chunk.unload(true, true); - } - else { + } else { populator.populate(world, rand, chunk); } } }, i); - } - } -} \ No newline at end of file + } + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ConsoleColors.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ConsoleColors.java index a1dedbd40..5e1641f09 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ConsoleColors.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ConsoleColors.java @@ -18,18 +18,17 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; import org.bukkit.ChatColor; public class ConsoleColors { - public static String fromString(String input) { - input = input.replaceAll("&0", fromChatColor(ChatColor.BLACK)).replaceAll("&1", fromChatColor(ChatColor.DARK_BLUE)).replaceAll("&2", fromChatColor(ChatColor.DARK_GREEN)).replaceAll("&3", fromChatColor(ChatColor.DARK_AQUA)).replaceAll("&4", fromChatColor(ChatColor.DARK_RED)).replaceAll("&5", fromChatColor(ChatColor.DARK_PURPLE)).replaceAll("&6", fromChatColor(ChatColor.GOLD)).replaceAll("&7", fromChatColor(ChatColor.GRAY)).replaceAll("&8", fromChatColor(ChatColor.DARK_GRAY)).replaceAll("&9", fromChatColor(ChatColor.BLUE)).replaceAll("&a", fromChatColor(ChatColor.GREEN)).replaceAll("&b", fromChatColor(ChatColor.AQUA)).replaceAll("&c", fromChatColor(ChatColor.RED)).replaceAll("&d", fromChatColor(ChatColor.LIGHT_PURPLE)).replaceAll("&e", fromChatColor(ChatColor.YELLOW)).replaceAll("&f", fromChatColor(ChatColor.WHITE)).replaceAll("&k", fromChatColor(ChatColor.MAGIC)).replaceAll("&l", fromChatColor(ChatColor.BOLD)).replaceAll("&m", fromChatColor(ChatColor.STRIKETHROUGH)).replaceAll("&n", fromChatColor(ChatColor.UNDERLINE)).replaceAll("&o", fromChatColor(ChatColor.ITALIC)).replaceAll("&r", fromChatColor(ChatColor.RESET)); + input = input.replaceAll("&0", fromChatColor(ChatColor.BLACK)).replaceAll("&1", fromChatColor(ChatColor.DARK_BLUE)).replaceAll("&2", fromChatColor(ChatColor.DARK_GREEN)).replaceAll("&3", fromChatColor(ChatColor.DARK_AQUA)).replaceAll("&4", fromChatColor(ChatColor.DARK_RED)).replaceAll("&5", fromChatColor(ChatColor.DARK_PURPLE)).replaceAll("&6", fromChatColor(ChatColor.GOLD)).replaceAll("&7", fromChatColor(ChatColor.GRAY)).replaceAll("&8", fromChatColor(ChatColor.DARK_GRAY)).replaceAll("&9", fromChatColor(ChatColor.BLUE)).replaceAll("&a", fromChatColor(ChatColor.GREEN)).replaceAll("&b", fromChatColor(ChatColor.AQUA)).replaceAll("&c", fromChatColor(ChatColor.RED)).replaceAll("&d", fromChatColor(ChatColor.LIGHT_PURPLE)).replaceAll("&e", fromChatColor(ChatColor.YELLOW)).replaceAll("&f", fromChatColor(ChatColor.WHITE)).replaceAll("&k", fromChatColor(ChatColor.MAGIC)).replaceAll("&l", fromChatColor(ChatColor.BOLD)).replaceAll("&m", fromChatColor(ChatColor.STRIKETHROUGH)) + .replaceAll("&n", fromChatColor(ChatColor.UNDERLINE)).replaceAll("&o", fromChatColor(ChatColor.ITALIC)).replaceAll("&r", fromChatColor(ChatColor.RESET)); return input + "\u001B[0m"; } - + /* * public static final String ANSI_RESET = "\u001B[0m"; public static final * String ANSI_BLACK = "\u001B[30m"; public static final String ANSI_RED = @@ -42,11 +41,10 @@ public class ConsoleColors { * String ANSI_UNDERLINE = "\033[0m"; public static final String ANSI_ITALIC * = "\033[3m]"; */ - public static String fromChatColor(final ChatColor color) { return chatColor(color).getLin(); } - + public static ConsoleColor chatColor(final ChatColor color) { switch (color) { case RESET: @@ -84,7 +82,7 @@ public class ConsoleColors { return ConsoleColor.RESET; } } - + static enum ConsoleColor { RESET("\u001B[0m"), BLACK("\u001B[30m"), @@ -98,20 +96,19 @@ public class ConsoleColors { BOLD("\033[1m"), UNDERLINE("\033[0m"), ITALIC("\033[3m"); - private final String win; private final String lin; - + ConsoleColor(final String lin) { this.lin = lin; this.win = lin; } - + @SuppressWarnings("unused") public String getWin() { return this.win; } - + public String getLin() { return this.lin; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/EconHandler.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/EconHandler.java index 6650b123b..38e581168 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/EconHandler.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/EconHandler.java @@ -1,5 +1,24 @@ package com.intellectualcrafters.plot.util; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.OfflinePlotPlayer; +import com.intellectualcrafters.plot.object.PlotPlayer; + public class EconHandler { + // TODO economy shit + public static double getBalance(PlotPlayer player) { + return PlotSquared.economy.getBalance(player.getName()); + } + public static void withdrawPlayer(PlotPlayer player, double amount) { + PlotSquared.economy.withdrawPlayer(player.getName(), amount); + } + + public static void depositPlayer(PlotPlayer player, double amount) { + PlotSquared.economy.depositPlayer(player.getName(), amount); + } + + public static void depositPlayer(OfflinePlotPlayer player, double amount) { + PlotSquared.economy.depositPlayer(player.getName(), amount); + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java index 1ddccba7a..0efd9348f 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ExpireManager.java @@ -10,21 +10,22 @@ import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.entity.Player; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.BukkitMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.commands.Unlink; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.events.PlotDeleteEvent; +import com.intellectualcrafters.plot.object.BukkitOfflinePlayer; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class ExpireManager { - public static ConcurrentHashMap> expiredPlots = new ConcurrentHashMap<>(); public static ConcurrentHashMap updatingPlots = new ConcurrentHashMap<>(); public static ConcurrentHashMap timestamp = new ConcurrentHashMap<>(); @@ -33,8 +34,7 @@ public class ExpireManager { public static long getTimeStamp(final String world) { if (timestamp.containsKey(world)) { return timestamp.get(world); - } - else { + } else { timestamp.put(world, 0l); return 0; } @@ -42,35 +42,34 @@ public class ExpireManager { public static boolean updateExpired(final String world) { updatingPlots.put(world, true); - long now = System.currentTimeMillis(); + final long now = System.currentTimeMillis(); if (now > getTimeStamp(world)) { timestamp.put(world, now + 86400000l); TaskManager.runTaskAsync(new Runnable() { @Override public void run() { - HashMap plots = getOldPlots(world); - PlotMain.sendConsoleSenderMessage("&cFound " + plots.size() + " expired plots for " + world + "!"); + final HashMap plots = getOldPlots(world); + PlotSquared.log("&cFound " + plots.size() + " expired plots for " + world + "!"); expiredPlots.put(world, plots); updatingPlots.put(world, false); } }); return true; - } - else { + } else { updatingPlots.put(world, false); return false; } } public static void runTask() { - ExpireManager.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(PlotMain.getMain(), new Runnable() { + ExpireManager.task = Bukkit.getScheduler().scheduleSyncRepeatingTask(BukkitMain.THIS, new Runnable() { @Override public void run() { - for (String world : PlotMain.getPlotWorldsString()) { + for (final String world : PlotSquared.getPlotWorldsString()) { if (!ExpireManager.updatingPlots.containsKey(world)) { ExpireManager.updatingPlots.put(world, false); } - Boolean updating = ExpireManager.updatingPlots.get(world); + final Boolean updating = ExpireManager.updatingPlots.get(world); if (updating) { return; } @@ -78,16 +77,16 @@ public class ExpireManager { updateExpired(world); return; } - Set plots = expiredPlots.get(world).keySet(); - if (plots == null || plots.size() == 0) { + final Set plots = expiredPlots.get(world).keySet(); + if ((plots == null) || (plots.size() == 0)) { if (updateExpired(world)) { return; } continue; } - Plot plot = plots.iterator().next(); + final Plot plot = plots.iterator().next(); if (plot.owner != null) { - if (UUIDHandler.uuidWrapper.getPlayer(plot.owner) != null) { + if (UUIDHandler.getPlayer(plot.owner) != null) { expiredPlots.get(world).remove(plot); return; } @@ -102,30 +101,28 @@ public class ExpireManager { event.setCancelled(true); return; } - for (UUID helper : plot.helpers) { - Player player = UUIDHandler.uuidWrapper.getPlayer(helper); + for (final UUID helper : plot.helpers) { + final PlotPlayer player = UUIDHandler.getPlayer(helper); if (player != null) { - PlayerFunctions.sendMessage(player, C.PLOT_REMOVED_HELPER, plot.id.toString()); + MainUtil.sendMessage(player, C.PLOT_REMOVED_HELPER, plot.id.toString()); } } - final World worldobj = Bukkit.getWorld(world); - final PlotManager manager = PlotMain.getPlotManager(world); + final PlotManager manager = PlotSquared.getPlotManager(world); if (plot.settings.isMerged()) { - Unlink.unlinkPlot(Bukkit.getWorld(world), plot); + Unlink.unlinkPlot(plot); } - PlotWorld plotworld = PlotMain.getWorldSettings(world); - manager.clearPlot(worldobj, plotworld, plot, false, null); - PlotHelper.removeSign(worldobj, plot); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + manager.clearPlot(plotworld, plot, false, null); + MainUtil.removeSign(plot); DBFunc.delete(world, plot); - PlotMain.removePlot(world, plot.id, true); + PlotSquared.removePlot(world, plot.id, true); expiredPlots.get(world).remove(plot); - PlotMain.sendConsoleSenderMessage("&cDeleted expired plot: " + plot.id); - PlotMain.sendConsoleSenderMessage("&3 - World: "+plot.world); + PlotSquared.log("&cDeleted expired plot: " + plot.id); + PlotSquared.log("&3 - World: " + plot.world); if (plot.hasOwner()) { - PlotMain.sendConsoleSenderMessage("&3 - Owner: "+UUIDHandler.getName(plot.owner)); - } - else { - PlotMain.sendConsoleSenderMessage("&3 - Owner: Unowned"); + PlotSquared.log("&3 - Owner: " + UUIDHandler.getName(plot.owner)); + } else { + PlotSquared.log("&3 - Owner: Unowned"); } return; } @@ -133,34 +130,33 @@ public class ExpireManager { }, 2400, 2400); } - public static boolean isExpired(UUID uuid) { - String name = UUIDHandler.getName(uuid); - if (name != null) { - OfflinePlayer op = Bukkit.getOfflinePlayer(name); - if (op.hasPlayedBefore()) { - long last = op.getLastPlayed(); - long compared = System.currentTimeMillis() - last; - if (compared >= 86400000l * Settings.AUTO_CLEAR_DAYS) { - return true; - } - } - } + public static boolean isExpired(final UUID uuid) { + final String name = UUIDHandler.getName(uuid); + if (name != null) { + final OfflinePlayer op = Bukkit.getOfflinePlayer(name); + if (op.hasPlayedBefore()) { + final long last = op.getLastPlayed(); + final long compared = System.currentTimeMillis() - last; + if (compared >= (86400000l * Settings.AUTO_CLEAR_DAYS)) { + return true; + } + } + } return false; } - public static HashMap getOldPlots(String world) { - final Collection plots = PlotMain.getPlots(world).values(); + public static HashMap getOldPlots(final String world) { + final Collection plots = PlotSquared.getPlots(world).values(); final HashMap toRemove = new HashMap<>(); - HashMap remove = new HashMap<>(); - Set keep = new HashSet<>(); - for (Plot plot : plots) { - UUID uuid = plot.owner; - if (uuid == null || remove.containsKey(uuid)) { + final HashMap remove = new HashMap<>(); + final Set keep = new HashSet<>(); + for (final Plot plot : plots) { + final UUID uuid = plot.owner; + if ((uuid == null) || remove.containsKey(uuid)) { Long stamp; if (uuid == null) { stamp = 0l; - } - else { + } else { stamp = remove.get(uuid); } toRemove.put(plot, stamp); @@ -169,54 +165,50 @@ public class ExpireManager { if (keep.contains(uuid)) { continue; } - Player player = UUIDHandler.uuidWrapper.getPlayer(uuid); + final PlotPlayer player = UUIDHandler.getPlayer(uuid); if (player != null) { keep.add(uuid); continue; } - OfflinePlayer op = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); - if (op==null || !op.hasPlayedBefore()) { + final BukkitOfflinePlayer op = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); + if ((op == null) || op.getLastPlayed() == 0) { continue; } long last = op.getLastPlayed(); long compared = System.currentTimeMillis() - last; - if (compared >= 86400000l * Settings.AUTO_CLEAR_DAYS) { + if (compared >= (86400000l * Settings.AUTO_CLEAR_DAYS)) { if (Settings.AUTO_CLEAR_CHECK_DISK) { - String worldname = Bukkit.getWorlds().get(0).getName(); + final String worldname = Bukkit.getWorlds().get(0).getName(); String foldername; String filename = null; - if (PlotMain.checkVersion(1, 7, 5)) { + if (BukkitMain.checkVersion(1, 7, 5)) { foldername = "playerdata"; try { - filename = op.getUniqueId() +".dat"; - } - catch (Throwable e) { + filename = op.getUUID() + ".dat"; + } catch (final Throwable e) { filename = uuid.toString() + ".dat"; } - } - else { + } else { foldername = "players"; - String playername = UUIDHandler.getName(uuid); + final String playername = UUIDHandler.getName(uuid); if (playername != null) { filename = playername + ".dat"; } } if (filename != null) { - File playerFile = new File(worldname + File.separator + foldername + File.separator + filename); + final File playerFile = new File(worldname + File.separator + foldername + File.separator + filename); if (!playerFile.exists()) { - PlotMain.sendConsoleSenderMessage("Could not find file: " + filename); - } - else { + PlotSquared.log("Could not find file: " + filename); + } else { try { last = playerFile.lastModified(); compared = System.currentTimeMillis() - last; - if (compared < 86400000l * Settings.AUTO_CLEAR_DAYS) { + if (compared < (86400000l * Settings.AUTO_CLEAR_DAYS)) { keep.add(uuid); continue; } - } - catch (Exception e) { - PlotMain.sendConsoleSenderMessage("Please disable disk checking in old plot auto clearing; Could not read file: " + filename); + } catch (final Exception e) { + PlotSquared.log("Please disable disk checking in old plot auto clearing; Could not read file: " + filename); } } } @@ -229,5 +221,4 @@ public class ExpireManager { } return toRemove; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/LSetCube.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/LSetCube.java index 0d1a2e3d0..438c2b6f2 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/LSetCube.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/LSetCube.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; import org.bukkit.Location; @@ -28,13 +27,13 @@ import org.bukkit.Location; * * @author Citymonstret */ -@SuppressWarnings({"javadoc", "unused"}) public class LSetCube { - +@SuppressWarnings({ "javadoc", "unused" }) +public class LSetCube { /** * Base locations */ private Location l1, l2; - + /** * Constructor * @@ -45,7 +44,7 @@ import org.bukkit.Location; this.l1 = l1; this.l1 = l2; } - + /** * Secondary constructor * @@ -56,7 +55,7 @@ import org.bukkit.Location; this.l1 = l1; this.l2 = l1.clone().add(size, size, size); } - + /** * Returns the absolute min. of the cube * @@ -68,7 +67,7 @@ import org.bukkit.Location; final int z = Math.min(this.l1.getBlockZ(), this.l2.getBlockZ()); return new Location(this.l1.getWorld(), x, y, z); } - + /** * Returns the absolute max. of the cube * @@ -80,7 +79,7 @@ import org.bukkit.Location; final int z = Math.max(this.l1.getBlockZ(), this.l2.getBlockZ()); return new Location(this.l1.getWorld(), x, y, z); } - + /** * Creates a LCycler for the cube. * @@ -89,7 +88,7 @@ import org.bukkit.Location; public LCycler getCycler() { return new LCycler(this); } - + /** * @author Citymonstret */ @@ -106,7 +105,7 @@ import org.bukkit.Location; * */ private Location current; - + /** * @param cube */ @@ -115,14 +114,14 @@ import org.bukkit.Location; this.max = cube.maxLoc(); this.current = this.min; } - + /** * @return */ public boolean hasNext() { return ((this.current.getBlockX() + 1) <= this.max.getBlockX()) && ((this.current.getBlockY() + 1) <= this.max.getBlockY()) && ((this.current.getBlockZ() + 1) <= this.max.getBlockZ()); } - + /** * @return */ diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Lag.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Lag.java index aab5b37cc..10acaff29 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Lag.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Lag.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; /** @@ -27,7 +26,6 @@ package com.intellectualcrafters.plot.util; * @author Citymonstret */ public class Lag implements Runnable { - /** * Ticks */ @@ -41,7 +39,7 @@ public class Lag implements Runnable { */ @SuppressWarnings("unused") public static long LT = 0L; - + /** * Get the server TPS * @@ -50,7 +48,7 @@ public class Lag implements Runnable { public static double getTPS() { return Math.round(getTPS(100)) > 20.0D ? 20.0D : Math.round(getTPS(100)); } - + /** * Return the tick per second (measured in $ticks) * @@ -66,7 +64,7 @@ public class Lag implements Runnable { final long e = System.currentTimeMillis() - T[t]; return ticks / (e / 1000.0D); } - + /** * Get number of ticks since * @@ -74,12 +72,11 @@ public class Lag implements Runnable { * * @return number of ticks since $tI */ - @SuppressWarnings("unused") public static long getElapsed(final int tI) { final long t = T[tI % T.length]; return System.currentTimeMillis() - t; } - + /** * Get lag percentage * @@ -88,7 +85,7 @@ public class Lag implements Runnable { public static double getPercentage() { return Math.round((1.0D - (Lag.getTPS() / 20.0D)) * 100.0D); } - + /** * Get TPS percentage (of 20) * @@ -97,7 +94,7 @@ public class Lag implements Runnable { public static double getFullPercentage() { return getTPS() * 5.0D; } - + @Override public void run() { T[TC % T.length] = System.currentTimeMillis(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Logger.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Logger.java index 29ae1f4ca..2ac6ede4b 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Logger.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Logger.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; import java.io.BufferedReader; @@ -29,7 +28,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Date; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; /** @@ -38,10 +37,9 @@ import com.intellectualcrafters.plot.config.C; * @author Citymonstret */ public class Logger { - private static ArrayList entries; private static File log; - + public static void setup(final File file) { log = file; entries = new ArrayList<>(); @@ -53,10 +51,10 @@ public class Logger { } reader.close(); } catch (final IOException e) { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "File setup error Logger#setup"); + PlotSquared.log(C.PREFIX.s() + "File setup error Logger#setup"); } } - + public static void write() throws IOException { final FileWriter writer = new FileWriter(log); for (final String string : entries) { @@ -64,25 +62,25 @@ public class Logger { } writer.close(); } - + public static void add(final LogLevel level, final String string) { append("[" + level.toString() + "] " + string); } - + private static void append(final String string) { entries.add("[" + new Date().toString() + "]" + string); } - + public enum LogLevel { GENERAL("General"), WARNING("Warning"), DANGER("Danger"); private final String name; - + LogLevel(final String name) { this.name = name; } - + @Override public String toString() { return this.name; diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java new file mode 100644 index 000000000..249803912 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -0,0 +1,1078 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// PlotSquared - A plot manager and world generator for the Bukkit API / +// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / +// / +// This program is free software; you can redistribute it and/or modify / +// it under the terms of the GNU General Public License as published by / +// the Free Software Foundation; either version 3 of the License, or / +// (at your option) any later version. / +// / +// This program is distributed in the hope that it will be useful, / +// but WITHOUT ANY WARRANTY; without even the implied warranty of / +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / +// GNU General Public License for more details. / +// / +// You should have received a copy of the GNU General Public License / +// along with this program; if not, write to the Free Software Foundation, / +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / +// / +// You can contact us via: support@intellectualsites.com / +//////////////////////////////////////////////////////////////////////////////////////////////////// +package com.intellectualcrafters.plot.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.UUID; + +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.config.Settings; +import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotManager; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.object.PlotSettings; +import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; +import com.intellectualcrafters.plot.util.bukkit.SendChunk; + +/** + * plot functions + * + * @author Citymonstret + */ +public class MainUtil { + public final static HashMap runners = new HashMap<>(); + public static boolean canSendChunk = false; + public static ArrayList runners_p = new ArrayList<>(); + static long state = 1; + public static HashMap lastPlot = new HashMap<>(); + public static HashMap worldBorder = new HashMap<>(); + + public static ArrayList getMaxPlotSelectionIds(final String world, PlotId pos1, PlotId pos2) { + + final Plot plot1 = PlotSquared.getPlots(world).get(pos1); + final Plot plot2 = PlotSquared.getPlots(world).get(pos2); + + if (plot1 != null) { + pos1 = getBottomPlot(plot1).id; + } + + if (plot2 != null) { + pos2 = getTopPlot(plot2).id; + } + + final ArrayList myplots = new ArrayList<>(); + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + myplots.add(new PlotId(x, y)); + } + } + return myplots; + } + + /** + * Get the number of plots for a player + * + * @param plr + * + * @return + */ + public static int getPlayerPlotCount(final String world, final PlotPlayer plr) { + final UUID uuid = plr.getUUID(); + int count = 0; + for (final Plot plot : PlotSquared.getPlots(world).values()) { + if (plot.hasOwner() && plot.owner.equals(uuid) && plot.countsTowardsMax) { + count++; + } + } + return count; + } + + public static boolean teleportPlayer(final PlotPlayer player, final Location from, final Plot plot) { + final Plot bot = MainUtil.getBottomPlot(plot); + + // TODO + // boolean result = PlotSquared.IMP.callPlayerTeleportToPlotEvent(player, from, plot); + final boolean result = true; + // TOOD ^ remove that + + if (!result) { + final Location location = MainUtil.getPlotHome(bot.world, bot); + if ((Settings.TELEPORT_DELAY == 0) || Permissions.hasPermission(player, "plots.teleport.delay.bypass")) { + sendMessage(player, C.TELEPORTED_TO_PLOT); + player.teleport(location); + return true; + } + sendMessage(player, C.TELEPORT_IN_SECONDS, Settings.TELEPORT_DELAY + ""); + final String name = player.getName(); + TaskManager.TELEPORT_QUEUE.add(name); + TaskManager.runTaskLater(new Runnable() { + @Override + public void run() { + if (!TaskManager.TELEPORT_QUEUE.contains(name)) { + sendMessage(player, C.TELEPORT_FAILED); + return; + } + TaskManager.TELEPORT_QUEUE.remove(name); + if (!player.isOnline()) { + return; + } + sendMessage(player, C.TELEPORTED_TO_PLOT); + player.teleport(location); + } + }, Settings.TELEPORT_DELAY * 20); + return true; + } + return !result; + } + + public static int getBorder(final String worldname) { + if (worldBorder.containsKey(worldname)) { + PlotSquared.getPlotWorld(worldname); + return worldBorder.get(worldname) + 16; + } + return Integer.MAX_VALUE; + } + + public static void setupBorder(final String world) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if (!plotworld.WORLD_BORDER) { + return; + } + if (!worldBorder.containsKey(world)) { + worldBorder.put(world, 0); + } + for (final Plot plot : PlotSquared.getPlots(world).values()) { + updateWorldBorder(plot); + } + } + + public static void update(final Location loc) { + final String world = loc.getWorld(); + final ArrayList chunks = new ArrayList<>(); + final int distance = BukkitUtil.getViewDistance(); + for (int cx = -distance; cx < distance; cx++) { + for (int cz = -distance; cz < distance; cz++) { + final ChunkLoc chunk = new ChunkLoc(cx, cz); + chunks.add(chunk); + } + } + AbstractSetBlock.setBlockManager.update(world, chunks); + } + + public static void createWorld(final String world, final String generator) { + } + + public static PlotId parseId(final String arg) { + try { + final String[] split = arg.split(";"); + return new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + } catch (final Exception e) { + return null; + } + } + + /** + * direction 0 = north, 1 = south, etc: + * + * @param id + * @param direction + * + * @return + */ + public static PlotId getPlotIdRelative(final PlotId id, final int direction) { + switch (direction) { + case 0: + return new PlotId(id.x, id.y - 1); + case 1: + return new PlotId(id.x + 1, id.y); + case 2: + return new PlotId(id.x, id.y + 1); + case 3: + return new PlotId(id.x - 1, id.y); + } + return id; + } + + public static ArrayList getPlotSelectionIds(final PlotId pos1, final PlotId pos2) { + final ArrayList myplots = new ArrayList<>(); + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + myplots.add(new PlotId(x, y)); + } + } + return myplots; + } + + /** + * Completely merges a set of plots
(There are no checks to make sure you supply the correct + * arguments)
- Misuse of this method can result in unusable plots
- the set of plots must belong to one + * owner and be rectangular
- the plot array must be sorted in ascending order
- Road will be removed where + * required
- changes will be saved to DB
+ * + * @param world + * @param plotIds + * + * @return boolean (success) + */ + public static boolean mergePlots(final String world, final ArrayList plotIds, final boolean removeRoads) { + if (plotIds.size() < 2) { + return false; + } + final PlotId pos1 = plotIds.get(0); + final PlotId pos2 = plotIds.get(plotIds.size() - 1); + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + + // FIXME call event + + manager.startPlotMerge(plotworld, plotIds); + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + final boolean lx = x < pos2.x; + final boolean ly = y < pos2.y; + final PlotId id = new PlotId(x, y); + final Plot plot = PlotSquared.getPlots(world).get(id); + Plot plot2 = null; + if (removeRoads) { + removeSign(plot); + } + if (lx) { + if (ly) { + if (!plot.settings.getMerged(1) || !plot.settings.getMerged(2)) { + if (removeRoads) { + manager.removeRoadSouthEast(plotworld, plot); + } + } + } + if (!plot.settings.getMerged(1)) { + plot2 = PlotSquared.getPlots(world).get(new PlotId(x + 1, y)); + mergePlot(world, plot, plot2, removeRoads); + plot.settings.setMerged(1, true); + plot2.settings.setMerged(3, true); + } + } + if (ly) { + if (!plot.settings.getMerged(2)) { + plot2 = PlotSquared.getPlots(world).get(new PlotId(x, y + 1)); + mergePlot(world, plot, plot2, removeRoads); + plot.settings.setMerged(2, true); + plot2.settings.setMerged(0, true); + } + } + } + } + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + final PlotId id = new PlotId(x, y); + final Plot plot = PlotSquared.getPlots(world).get(id); + DBFunc.setMerged(world, plot, plot.settings.getMerged()); + } + } + manager.finishPlotMerge(plotworld, plotIds); + return true; + } + + /** + * Merges 2 plots Removes the road inbetween
- Assumes the first plot parameter is lower
- Assumes neither + * are a Mega-plot
- Assumes plots are directly next to each other
- Saves to DB + * + * @param world + * @param lesserPlot + * @param greaterPlot + */ + public static void mergePlot(final String world, final Plot lesserPlot, final Plot greaterPlot, final boolean removeRoads) { + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if (lesserPlot.id.x.equals(greaterPlot.id.x)) { + if (!lesserPlot.settings.getMerged(2)) { + lesserPlot.settings.setMerged(2, true); + greaterPlot.settings.setMerged(0, true); + if (removeRoads) { + manager.removeRoadSouth(plotworld, lesserPlot); + } + } + } else { + if (!lesserPlot.settings.getMerged(1)) { + lesserPlot.settings.setMerged(1, true); + greaterPlot.settings.setMerged(3, true); + if (removeRoads) { + manager.removeRoadEast(plotworld, lesserPlot); + } + } + } + } + + public static void removeSign(final Plot p) { + final String world = p.world; + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final Location loc = manager.getSignLoc(plotworld, p); + BlockManager.setBlocks(world, new int[] { loc.getX() }, new int[] { loc.getY() }, new int[] { loc.getZ() }, new int[] { 0 }, new byte[] { 0 }); + } + + public static void setSign(String name, final Plot p) { + if (name == null) { + name = "unknown"; + } + final PlotManager manager = PlotSquared.getPlotManager(p.world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(p.world); + final Location loc = manager.getSignLoc(plotworld, p); + final String id = p.id.x + ";" + p.id.y; + final String[] lines = new String[] { C.OWNER_SIGN_LINE_1.translated().replaceAll("%id%", id), C.OWNER_SIGN_LINE_2.translated().replaceAll("%id%", id).replaceAll("%plr%", name), C.OWNER_SIGN_LINE_3.translated().replaceAll("%id%", id).replaceAll("%plr%", name), C.OWNER_SIGN_LINE_4.translated().replaceAll("%id%", id).replaceAll("%plr%", name) }; + BlockManager.setSign(p.world, loc.getX(), loc.getY(), loc.getZ(), lines); + } + + public static String getStringSized(final int max, final String string) { + if (string.length() > max) { + return string.substring(0, max); + } + return string; + } + + public static void autoMerge(final String world, final Plot plot, final UUID uuid) { + if (plot == null) { + return; + } + if (plot.owner == null) { + return; + } + if (!plot.owner.equals(uuid)) { + return; + } + ArrayList plots; + boolean merge = true; + int count = 0; + while (merge) { + if (count > 16) { + break; + } + count++; + final PlotId bot = getBottomPlot(plot).id; + final PlotId top = getTopPlot(plot).id; + plots = getPlotSelectionIds(new PlotId(bot.x, bot.y - 1), new PlotId(top.x, top.y)); + if (ownsPlots(world, plots, uuid, 0)) { + final boolean result = mergePlots(world, plots, true); + if (result) { + merge = true; + continue; + } + } + plots = getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x + 1, top.y)); + if (ownsPlots(world, plots, uuid, 1)) { + final boolean result = mergePlots(world, plots, true); + if (result) { + merge = true; + continue; + } + } + plots = getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x, top.y + 1)); + if (ownsPlots(world, plots, uuid, 2)) { + final boolean result = mergePlots(world, plots, true); + if (result) { + merge = true; + continue; + } + } + plots = getPlotSelectionIds(new PlotId(bot.x - 1, bot.y), new PlotId(top.x, top.y)); + if (ownsPlots(world, plots, uuid, 3)) { + final boolean result = mergePlots(world, plots, true); + if (result) { + merge = true; + continue; + } + } + merge = false; + } + update(getPlotHome(world, plot)); + } + + private static boolean ownsPlots(final String world, final ArrayList plots, final UUID uuid, final int dir) { + final PlotId id_min = plots.get(0); + final PlotId id_max = plots.get(plots.size() - 1); + for (final PlotId myid : plots) { + final Plot myplot = PlotSquared.getPlots(world).get(myid); + if ((myplot == null) || !myplot.hasOwner() || !(myplot.getOwner().equals(uuid))) { + return false; + } + final PlotId top = getTopPlot(myplot).id; + if (((top.x > id_max.x) && (dir != 1)) || ((top.y > id_max.y) && (dir != 2))) { + return false; + } + final PlotId bot = getBottomPlot(myplot).id; + if (((bot.x < id_min.x) && (dir != 3)) || ((bot.y < id_min.y) && (dir != 0))) { + return false; + } + } + return true; + } + + public static void updateWorldBorder(final Plot plot) { + if (!worldBorder.containsKey(plot.world)) { + return; + } + final String world = plot.world; + final PlotManager manager = PlotSquared.getPlotManager(world); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final Location bot = manager.getPlotBottomLocAbs(plotworld, plot.id); + final Location top = manager.getPlotTopLocAbs(plotworld, plot.id); + final int border = worldBorder.get(plot.world); + final int botmax = Math.max(Math.abs(bot.getX()), Math.abs(bot.getZ())); + final int topmax = Math.max(Math.abs(top.getX()), Math.abs(top.getZ())); + final int max = Math.max(botmax, topmax); + if (max > border) { + worldBorder.put(plot.world, max); + } + } + + /** + * Create a plot and notify the world border and plot merger + */ + public static boolean createPlot(final UUID uuid, final Plot plot) { + if (MainUtil.worldBorder.containsKey(plot.world)) { + updateWorldBorder(plot); + } + final Plot p = createPlotAbs(uuid, plot); + final PlotWorld plotworld = PlotSquared.getPlotWorld(plot.world); + if (plotworld.AUTO_MERGE) { + autoMerge(plot.world, p, uuid); + } + return true; + } + + /** + * Create a plot without notifying the merge function or world border manager + */ + public static Plot createPlotAbs(final UUID uuid, final Plot plot) { + final String w = plot.world; + final Plot p = new Plot(plot.id, uuid, new ArrayList(), new ArrayList(), w); + PlotSquared.updatePlot(p); + DBFunc.createPlotAndSettings(p); + return p; + } + + public static String createId(final int x, final int z) { + return x + ";" + z; + } + + public static int square(final int x) { + return x * x; + } + + public static short[] getBlock(final String block) { + if (block.contains(":")) { + final String[] split = block.split(":"); + return new short[] { Short.parseShort(split[0]), Short.parseShort(split[1]) }; + } + return new short[] { Short.parseShort(block), 0 }; + } + + /** + * Clear a plot and associated sections: [sign, entities, border] + * + * @param requester + * @param plot + */ + public static boolean clearAsPlayer(final Plot plot, final boolean isDelete, final Runnable whenDone) { + if (runners.containsKey(plot)) { + return false; + } + AChunkManager.manager.clearAllEntities(plot); + clear(plot.world, plot, isDelete, whenDone); + removeSign(plot); + return true; + } + + public static void clear(final String world, final Plot plot, final boolean isDelete, final Runnable whenDone) { + final PlotManager manager = PlotSquared.getPlotManager(world); + final Location pos1 = MainUtil.getPlotBottomLoc(world, plot.id).add(1, 0, 1); + final int prime = 31; + int h = 1; + h = (prime * h) + pos1.getX(); + h = (prime * h) + pos1.getZ(); + state = h; + System.currentTimeMillis(); + final Location location = MainUtil.getPlotHomeDefault(plot); + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + runners.put(plot, 1); + if (plotworld.TERRAIN != 0) { + final Location pos2 = MainUtil.getPlotTopLoc(world, plot.id); + AChunkManager.manager.regenerateRegion(pos1, pos2, new Runnable() { + @Override + public void run() { + runners.remove(plot); + TaskManager.runTask(whenDone); + } + }); + return; + } + final Runnable run = new Runnable() { + @Override + public void run() { + MainUtil.setBiome(world, plot, "FOREST"); + runners.remove(plot); + TaskManager.runTask(whenDone); + update(location); + } + }; + manager.clearPlot(plotworld, plot, isDelete, run); + } + + public static void setCuboid(final String world, final Location pos1, final Location pos2, final PlotBlock[] blocks) { + if (blocks.length == 1) { + setSimpleCuboid(world, pos1, pos2, blocks[0]); + return; + } + final int length = (pos2.getX() - pos1.getX()) * (pos2.getY() - pos1.getY()) * (pos2.getZ() - pos1.getZ()); + final int[] xl = new int[length]; + final int[] yl = new int[length]; + final int[] zl = new int[length]; + final int[] ids = new int[length]; + final byte[] data = new byte[length]; + int index = 0; + for (int y = pos1.getY(); y < pos2.getY(); y++) { + for (int x = pos1.getX(); x < pos2.getX(); x++) { + for (int z = pos1.getZ(); z < pos2.getZ(); z++) { + final int i = BlockManager.random(blocks.length); + xl[index] = x; + yl[index] = y; + zl[index] = z; + final PlotBlock block = blocks[i]; + ids[index] = block.id; + data[index] = block.data; + index++; + } + } + } + BlockManager.setBlocks(world, xl, yl, zl, ids, data); + } + + public static void setSimpleCuboid(final String world, final Location pos1, final Location pos2, final PlotBlock newblock) { + final int length = (pos2.getX() - pos1.getX()) * (pos2.getY() - pos1.getY()) * (pos2.getZ() - pos1.getZ()); + final int[] xl = new int[length]; + final int[] yl = new int[length]; + final int[] zl = new int[length]; + final int[] ids = new int[length]; + final byte[] data = new byte[length]; + int index = 0; + for (int y = pos1.getY(); y < pos2.getY(); y++) { + for (int x = pos1.getX(); x < pos2.getX(); x++) { + for (int z = pos1.getZ(); z < pos2.getZ(); z++) { + xl[index] = x; + yl[index] = y; + zl[index] = z; + ids[index] = newblock.id; + data[index] = newblock.data; + index++; + } + } + } + BlockManager.setBlocks(world, xl, yl, zl, ids, data); + } + + public static void setBiome(final String world, final Plot plot, final String biome) { + final int bottomX = getPlotBottomLoc(world, plot.id).getX() + 1; + final int topX = getPlotTopLoc(world, plot.id).getX(); + final int bottomZ = getPlotBottomLoc(world, plot.id).getZ() + 1; + final int topZ = getPlotTopLoc(world, plot.id).getZ(); + BukkitUtil.setBiome(world, bottomX, bottomZ, topX, topZ, biome); + } + + public static int getHeighestBlock(final String world, final int x, final int z) { + final int result = BukkitUtil.getHeighestBlock(world, x, z); + if (result == 0) { + return 64; + } + return result; + // for (int i = 1; i < world.getMaxHeight(); i++) { + // id = world.getBlockAt(x, i, z).getTypeId(); + // if (id == 0) { + // if (safe) { + // return i; + // } + // safe = true; + // } + // } + // return 64; + } + + /** + * Get plot home + * + * @param w World in which the plot is located + * @param plotid Plot ID + * + * @return Home Location + */ + public static Location getPlotHome(final String w, final PlotId plotid) { + final Plot plot = getPlot(w, plotid); + final BlockLoc home = plot.settings.getPosition(); + final Location bot = getPlotBottomLoc(w, plotid); + final PlotManager manager = PlotSquared.getPlotManager(w); + if ((home == null) || ((home.x == 0) && (home.z == 0))) { + final Location top = getPlotTopLoc(w, plotid); + final int x = ((top.getX() - bot.getX()) / 2) + bot.getX(); + final int z = ((top.getZ() - bot.getZ()) / 2) + bot.getZ(); + final int y = Math.max(getHeighestBlock(w, x, z), manager.getSignLoc(PlotSquared.getPlotWorld(w), plot).getY()); + return new Location(w, x, y, z); + } else { + final int y = Math.max(getHeighestBlock(w, home.x, home.z), home.y); + return bot.add(home.x, y, home.z); + } + } + + /** + * Retrieve the location of the default plot home position + * + * @param plot Plot + * + * @return the location + */ + public static Location getPlotHomeDefault(final Plot plot) { + final Location l = getPlotBottomLoc(plot.world, plot.getId()).subtract(0, 0, 0); + l.setY(getHeighestBlock(plot.world, l.getX(), l.getZ())); + return l; + } + + /** + * Get the plot home + * + * @param w World + * @param plot Plot Object + * + * @return Plot Home Location + * + * @see #getPlotHome(org.bukkit.World, com.intellectualcrafters.plot.object.PlotId) + */ + public static Location getPlotHome(final String w, final Plot plot) { + return getPlotHome(w, plot.id); + } + + /** + * Refresh the plot chunks + * + * @param world World in which the plot is located + * @param plot Plot Object + */ + public static void refreshPlotChunks(final String world, final Plot plot) { + final int bottomX = getPlotBottomLoc(world, plot.id).getX(); + final int topX = getPlotTopLoc(world, plot.id).getX(); + final int bottomZ = getPlotBottomLoc(world, plot.id).getZ(); + final int topZ = getPlotTopLoc(world, plot.id).getZ(); + final int minChunkX = (int) Math.floor((double) bottomX / 16); + final int maxChunkX = (int) Math.floor((double) topX / 16); + final int minChunkZ = (int) Math.floor((double) bottomZ / 16); + final int maxChunkZ = (int) Math.floor((double) topZ / 16); + final ArrayList chunks = new ArrayList<>(); + for (int x = minChunkX; x <= maxChunkX; x++) { + for (int z = minChunkZ; z <= maxChunkZ; z++) { + if (canSendChunk) { + final ChunkLoc chunk = new ChunkLoc(x, z); + chunks.add(chunk); + } else { + BukkitUtil.refreshChunk(world, x, z); + } + } + } + try { + SendChunk.sendChunk(world, chunks); + } catch (final Throwable e) { + canSendChunk = false; + for (int x = minChunkX; x <= maxChunkX; x++) { + for (int z = minChunkZ; z <= maxChunkZ; z++) { + BukkitUtil.refreshChunk(world, x, z); + } + } + } + } + + /** + * Gets the top plot location of a plot (all plots are treated as small plots) - To get the top loc of a mega plot + * use getPlotTopLoc(...) + * + * @param world + * @param id + * + * @return + */ + public static Location getPlotTopLocAbs(final String world, final PlotId id) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + return manager.getPlotTopLocAbs(plotworld, id); + } + + /** + * Gets the bottom plot location of a plot (all plots are treated as small plots) - To get the top loc of a mega + * plot use getPlotBottomLoc(...) + * + * @param world + * @param id + * + * @return + */ + public static Location getPlotBottomLocAbs(final String world, final PlotId id) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + return manager.getPlotBottomLocAbs(plotworld, id); + } + + /** + * Obtains the width of a plot (x width) + * + * @param world + * @param id + * + * @return + */ + public static int getPlotWidth(final String world, final PlotId id) { + return getPlotTopLoc(world, id).getX() - getPlotBottomLoc(world, id).getX(); + } + + /** + * Gets the top loc of a plot (if mega, returns top loc of that mega plot) - If you would like each plot treated as + * a small plot use getPlotTopLocAbs(...) + * + * @param world + * @param id + * + * @return + */ + public static Location getPlotTopLoc(final String world, PlotId id) { + final Plot plot = PlotSquared.getPlots(world).get(id); + if (plot != null) { + id = getTopPlot(plot).id; + } + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + return manager.getPlotTopLocAbs(plotworld, id); + } + + /** + * Gets the bottom loc of a plot (if mega, returns bottom loc of that mega plot) - If you would like each plot + * treated as a small plot use getPlotBottomLocAbs(...) + * + * @param world + * @param id + * + * @return + */ + public static Location getPlotBottomLoc(final String world, PlotId id) { + final Plot plot = PlotSquared.getPlots(world).get(id); + if (plot != null) { + id = getBottomPlot(plot).id; + } + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotManager manager = PlotSquared.getPlotManager(world); + return manager.getPlotBottomLocAbs(plotworld, id); + } + + public static boolean isUnowned(final String world, final PlotId pos1, final PlotId pos2) { + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + final PlotId id = new PlotId(x, y); + if (PlotSquared.getPlots(world).get(id) != null) { + if (PlotSquared.getPlots(world).get(id).owner != null) { + return false; + } + } + } + } + return true; + } + + public static boolean move(final String world, final PlotId current, final PlotId newPlot, final Runnable whenDone) { + final com.intellectualcrafters.plot.object.Location bot1 = MainUtil.getPlotBottomLoc(world, current); + final com.intellectualcrafters.plot.object.Location bot2 = MainUtil.getPlotBottomLoc(world, newPlot); + final Location top = MainUtil.getPlotTopLoc(world, current); + final Plot currentPlot = MainUtil.getPlot(world, current); + if (currentPlot.owner == null) { + return false; + } + final Plot pos1 = getBottomPlot(currentPlot); + final Plot pos2 = getTopPlot(currentPlot); + final PlotId size = MainUtil.getSize(world, currentPlot); + if (!MainUtil.isUnowned(world, newPlot, new PlotId((newPlot.x + size.x) - 1, (newPlot.y + size.y) - 1))) { + return false; + } + final int offset_x = newPlot.x - pos1.id.x; + final int offset_y = newPlot.y - pos1.id.y; + final ArrayList selection = getPlotSelectionIds(pos1.id, pos2.id); + for (final PlotId id : selection) { + DBFunc.movePlot(world, new PlotId(id.x, id.y), new PlotId(id.x + offset_x, id.y + offset_y)); + final Plot plot = PlotSquared.getPlots(world).get(id); + PlotSquared.getPlots(world).remove(id); + plot.id.x += offset_x; + plot.id.y += offset_y; + PlotSquared.getPlots(world).put(plot.id, plot); + } + AChunkManager.manager.copyRegion(bot1, top, bot2, new Runnable() { + @Override + public void run() { + final Location bot = bot1.clone().add(1, 0, 1); + AChunkManager.manager.regenerateRegion(bot, top, null); + TaskManager.runTaskLater(whenDone, 1); + } + }); + return true; + } + + /** + * Send a message to the player + * + * @param plr Player to recieve message + * @param msg Message to send + * + * @return true Can be used in things such as commands (return PlayerFunctions.sendMessage(...)) + */ + public static boolean sendMessage(final PlotPlayer plr, final String msg) { + return sendMessage(plr, msg, true); + } + + public static String colorise(final char alt, final String message) { + final char[] b = message.toCharArray(); + for (int i = 0; i < (b.length - 1); i++) { + if ((b[i] == alt) && ("0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(b[(i + 1)]) > -1)) { + b[i] = '§'; + b[(i + 1)] = Character.toLowerCase(b[(i + 1)]); + } + } + return new String(b); + } + + public static boolean sendMessage(final PlotPlayer plr, final String msg, final boolean prefix) { + if ((msg.length() > 0) && !msg.equals("")) { + if (plr == null) { + PlotSquared.log(C.PREFIX.s() + msg); + } else { + sendMessageWrapped(plr, colorise('&', C.PREFIX.s() + msg)); + } + } + return true; + } + + public static String[] wordWrap(final String rawString, final int lineLength) { + if (rawString == null) { + return new String[] { "" }; + } + if ((rawString.length() <= lineLength) && (!rawString.contains("\n"))) { + return new String[] { rawString }; + } + final char[] rawChars = (rawString + ' ').toCharArray(); + StringBuilder word = new StringBuilder(); + StringBuilder line = new StringBuilder(); + final ArrayList lines = new ArrayList(); + int lineColorChars = 0; + for (int i = 0; i < rawChars.length; i++) { + final char c = rawChars[i]; + if (c == '§') { + word.append('§' + (rawChars[(i + 1)])); + lineColorChars += 2; + i++; + } else if ((c == ' ') || (c == '\n')) { + if ((line.length() == 0) && (word.length() > lineLength)) { + for (final String partialWord : word.toString().split("(?<=\\G.{" + lineLength + "})")) { + lines.add(partialWord); + } + } else if (((line.length() + word.length()) - lineColorChars) == lineLength) { + line.append(word); + lines.add(line.toString()); + line = new StringBuilder(); + lineColorChars = 0; + } else if (((line.length() + 1 + word.length()) - lineColorChars) > lineLength) { + for (final String partialWord : word.toString().split("(?<=\\G.{" + lineLength + "})")) { + lines.add(line.toString()); + line = new StringBuilder(partialWord); + } + lineColorChars = 0; + } else { + if (line.length() > 0) { + line.append(' '); + } + line.append(word); + } + word = new StringBuilder(); + if (c == '\n') { + lines.add(line.toString()); + line = new StringBuilder(); + } + } else { + word.append(c); + } + } + if (line.length() > 0) { + lines.add(line.toString()); + } + if ((lines.get(0).length() == 0) || (lines.get(0).charAt(0) != '§')) { + lines.set(0, "§f" + lines.get(0)); + } + for (int i = 1; i < lines.size(); i++) { + final String pLine = lines.get(i - 1); + final String subLine = lines.get(i); + + final char color = pLine.charAt(pLine.lastIndexOf('§') + 1); + if ((subLine.length() == 0) || (subLine.charAt(0) != '§')) { + lines.set(i, '§' + (color) + subLine); + } + } + return lines.toArray(new String[lines.size()]); + } + + /** + * \\previous\\ + * + * @param plr + * @param msg Was used to wrap the chat client length (Packets out--) + */ + public static void sendMessageWrapped(final PlotPlayer plr, String msg) { + if (msg.length() > 65) { + final String[] ss = wordWrap(msg, 65); + final StringBuilder b = new StringBuilder(); + for (final String p : ss) { + b.append(p).append(p.equals(ss[ss.length - 1]) ? "" : "\n "); + } + msg = b.toString(); + } + if (msg.endsWith("\n")) { + msg = msg.substring(0, msg.length() - 2); + } + plr.sendMessage(msg); + } + + /** + * Send a message to the player + * + * @param plr Player to recieve message + * @param c Caption to send + * + * @return + */ + public static boolean sendMessage(final PlotPlayer plr, final C c, final String... args) { + if (c.s().length() > 1) { + String msg = c.s(); + if ((args != null) && (args.length > 0)) { + for (final String str : args) { + if (msg.contains("%s")) { + msg = msg.replaceFirst("%s", str); + } + } + } + if (plr == null) { + PlotSquared.log(msg); + } else { + sendMessage(plr, msg, c.usePrefix()); + } + } + return true; + } + + public static Plot getBottomPlot(final Plot plot) { + if (plot.settings.getMerged(0)) { + final Plot p = PlotSquared.getPlots(plot.world).get(new PlotId(plot.id.x, plot.id.y - 1)); + if (p == null) { + return plot; + } + return getBottomPlot(p); + } + if (plot.settings.getMerged(3)) { + final Plot p = PlotSquared.getPlots(plot.world).get(new PlotId(plot.id.x - 1, plot.id.y)); + if (p == null) { + return plot; + } + return getBottomPlot(p); + } + return plot; + } + + public static Plot getTopPlot(final Plot plot) { + if (plot.settings.getMerged(2)) { + return getTopPlot(PlotSquared.getPlots(plot.world).get(new PlotId(plot.id.x, plot.id.y + 1))); + } + if (plot.settings.getMerged(1)) { + return getTopPlot(PlotSquared.getPlots(plot.world).get(new PlotId(plot.id.x + 1, plot.id.y))); + } + return plot; + } + + public static PlotId getSize(final String world, final Plot plot) { + final PlotSettings settings = plot.settings; + if (!settings.isMerged()) { + return new PlotId(1, 1); + } + final Plot top = getTopPlot(plot); + final Plot bot = getBottomPlot(plot); + return new PlotId((top.id.x - bot.id.x) + 1, (top.id.y - bot.id.y) + 1); + } + + /** + * Fetches the plot from the main class + */ + public static Plot getPlot(final String world, final PlotId id) { + if (id == null) { + return null; + } + if (PlotSquared.getPlots(world).containsKey(id)) { + return PlotSquared.getPlots(world).get(id); + } + return new Plot(id, null, new ArrayList(), new ArrayList(), world); + } + + /** + * Returns the plot at a location (mega plots are not considered, all plots are treated as small plots) + * @param loc + * @return + */ + public static PlotId getPlotAbs(final Location loc) { + final String world = loc.getWorld(); + final PlotManager manager = PlotSquared.getPlotManager(world); + if (manager == null) { + return null; + } + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + return manager.getPlotIdAbs(plotworld, loc.getX(), loc.getY(), loc.getZ()); + } + + /** + * Returns the plot id at a location (mega plots are considered) + * @param loc + * @return + */ + public static PlotId getPlotId(final Location loc) { + final String world = loc.getWorld(); + final PlotManager manager = PlotSquared.getPlotManager(world); + if (manager == null) { + return null; + } + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + final PlotId id = manager.getPlotId(plotworld, loc.getX(), loc.getY(), loc.getZ()); + if ((id != null) && (plotworld.TYPE == 2)) { + if (ClusterManager.getCluster(world, id) == null) { + return null; + } + } + return id; + } + + /** + * Get the maximum number of plots a player is allowed + * + * @param p + * @return + */ + public static int getAllowedPlots(final PlotPlayer p, int current) { + return Permissions.hasPermissionRange(p, "plots.plot", Settings.MAX_PLOTS, current); + } + + public static Plot getPlot(final Location loc) { + final PlotId id = getPlotId(loc); + if (id == null) { + return null; + } + return getPlot(loc.getWorld(), id); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Permissions.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Permissions.java new file mode 100644 index 000000000..9b3514a29 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Permissions.java @@ -0,0 +1,53 @@ +package com.intellectualcrafters.plot.util; + +import com.intellectualcrafters.plot.object.PlotPlayer; + +public class Permissions { + // ADMIN + public static String ADMIN = "plots.admin"; + // BUILD + public static String BUILD_OTHER = "plots.admin.build.other"; + public static String BUILD_ROAD = "plots.admin.build.road"; + public static String BUILD_UNOWNED = "plots.admin.build.unowned"; + // INTERACT + public static String INTERACT_OTHER = "plots.admin.interact.other"; + public static String INTERACT_ROAD = "plots.admin.interact.road"; + public static String INTERACT_UNOWNED = "plots.admin.interact.unowned"; + // BREAK + public static String BREAK_OTHER = "plots.admin.break.other"; + public static String BREAK_ROAD = "plots.admin.break.road"; + public static String BREAK_UNOWNED = "plots.admin.break.unowned"; + + public static boolean hasPermission(final PlotPlayer player, final String perm) { + if ((player == null) || player.isOp() || player.hasPermission(ADMIN)) { + return true; + } + if (player.hasPermission(perm)) { + return true; + } + final String[] nodes = perm.split("\\."); + final StringBuilder n = new StringBuilder(); + for (int i = 0; i < (nodes.length - 1); i++) { + n.append(nodes[i] + (".")); + if (player.hasPermission(n + "*")) { + return true; + } + } + return false; + } + + public static int hasPermissionRange(final PlotPlayer player, final String stub, final int range, final int min) { + if ((player == null) || player.isOp() || player.hasPermission(ADMIN)) { + return Byte.MAX_VALUE; + } + if (player.hasPermission(stub + ".*")) { + return Byte.MAX_VALUE; + } + for (int i = min; i < range; i++) { + if (player.hasPermission(stub + "." + i)) { + return i; + } + } + return 0; + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java deleted file mode 100644 index 8fdce0acb..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java +++ /dev/null @@ -1,318 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.util; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.config.Settings; -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 org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.util.ChatPaginator; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -/** - * Functions involving players, plots and locations. - * - * @author Citymonstret - */ -@SuppressWarnings("javadoc") public class PlayerFunctions { - - /** - * @param player player - * - * @return - */ - public static boolean isInPlot(final Player player) { - return getCurrentPlot(player) != null; - } - - public static ArrayList getPlotSelectionIds(PlotId pos1, final PlotId pos2) { - final ArrayList myplots = new ArrayList<>(); - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - myplots.add(new PlotId(x, y)); - } - } - return myplots; - } - - public static ArrayList getMaxPlotSelectionIds(final World world, PlotId pos1, PlotId pos2) { - - final Plot plot1 = PlotMain.getPlots(world).get(pos1); - final Plot plot2 = PlotMain.getPlots(world).get(pos2); - - if (plot1 != null) { - pos1 = getBottomPlot(world, plot1).id; - } - - if (plot2 != null) { - pos2 = getTopPlot(world, plot2).id; - } - - final ArrayList myplots = new ArrayList<>(); - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - myplots.add(new PlotId(x, y)); - } - } - return myplots; - } - - public static Plot getBottomPlot(final World world, final Plot plot) { - if (plot.settings.getMerged(0)) { - final Plot p = PlotMain.getPlots(world).get(new PlotId(plot.id.x, plot.id.y - 1)); - if (p == null) { - return plot; - } - return getBottomPlot(world, p); - } - if (plot.settings.getMerged(3)) { - final Plot p = PlotMain.getPlots(world).get(new PlotId(plot.id.x - 1, plot.id.y)); - if (p == null) { - return plot; - } - return getBottomPlot(world, p); - } - return plot; - } - - public static Plot getTopPlot(final World world, final Plot plot) { - if (plot.settings.getMerged(2)) { - return getTopPlot(world, PlotMain.getPlots(world).get(new PlotId(plot.id.x, plot.id.y + 1))); - } - if (plot.settings.getMerged(1)) { - return getTopPlot(world, PlotMain.getPlots(world).get(new PlotId(plot.id.x + 1, plot.id.y))); - } - return plot; - } - - /** - * Returns the plot at a location (mega plots are not considered, all plots are treated as small plots) - * - * @param loc - * - * @return - */ - public static PlotId getPlotAbs(final Location loc) { - final String world = loc.getWorld().getName(); - final PlotManager manager = PlotMain.getPlotManager(world); - if (manager == null) { - return null; - } - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - return manager.getPlotIdAbs(plotworld, loc); - } - - /** - * Returns the plot id at a location (mega plots are considered) - * - * @param loc - * - * @return - */ - public static PlotId getPlot(final Location loc) { - final String world = loc.getWorld().getName(); - final PlotManager manager = PlotMain.getPlotManager(world); - if (manager == null) { - return null; - } - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - PlotId id = manager.getPlotId(plotworld, loc); - if (id!=null && plotworld.TYPE == 2) { - if (ClusterManager.getCluster(world, id) == null) { - return null; - } - } - return id; - } - - /** - * Returns the plot a player is currently in. - * - * @param player - * - * @return - */ - public static Plot getCurrentPlot(final Player player) { - if (!PlotMain.isPlotWorld(player.getWorld())) { - return null; - } - final PlotId id = getPlot(player.getLocation()); - final World world = player.getWorld(); - if (id == null) { - return null; - } - if (PlotMain.getPlots(world).containsKey(id)) { - return PlotMain.getPlots(world).get(id); - } - return new Plot(id, null, new ArrayList(), new ArrayList(), world.getName()); - - } - - /** - * Updates a given plot with another instance - * - * @param plot - * - * @deprecated - */ - @Deprecated - public static void set(final Plot plot) { - PlotMain.updatePlot(plot); - } - - /** - * Get the plots for a player - * - * @param plr - * - * @return - */ - public static Set getPlayerPlots(final World world, final Player plr) { - final Set p = PlotMain.getPlots(world, plr); - if (p == null) { - return new HashSet<>(); - } - return p; - } - - /** - * Get the number of plots for a player - * - * @param plr - * - * @return - */ - public static int getPlayerPlotCount(final World world, final Player plr) { - final UUID uuid = UUIDHandler.getUUID(plr); - int count = 0; - for (final Plot plot : PlotMain.getPlots(world).values()) { - if (plot.hasOwner() && plot.owner.equals(uuid) && plot.countsTowardsMax) { - count++; - } - } - return count; - } - - /** - * Get the maximum number of plots a player is allowed - * - * @param p - * - * @return - */ - public static int getAllowedPlots(final Player p) { - return PlotMain.hasPermissionRange(p, "plots.plot", Settings.MAX_PLOTS); - } - - /** - * @return PlotMain.getPlots(); - * - * @deprecated - */ - @Deprecated - public static Set getPlots() { - return PlotMain.getPlots(); - } - - /** - * \\previous\\ - * - * @param plr - * @param msg Was used to wrap the chat client length (Packets out--) - */ - public static void sendMessageWrapped(final Player plr, String msg) { - if (msg.length() > ChatPaginator.AVERAGE_CHAT_PAGE_WIDTH) { - final String[] ss = ChatPaginator.wordWrap(msg, ChatPaginator.AVERAGE_CHAT_PAGE_WIDTH); - final StringBuilder b = new StringBuilder(); - for (final String p : ss) { - b.append(p).append(p.equals(ss[ss.length - 1]) ? "" : "\n "); - } - msg = b.toString(); - } - if (msg.endsWith("\n")) { - msg = msg.substring(0, msg.length() - 2); - } - plr.sendMessage(msg); - } - - /** - * Send a message to the player - * - * @param plr Player to recieve message - * @param msg Message to send - * - * @return true Can be used in things such as commands (return PlayerFunctions.sendMessage(...)) - */ - public static boolean sendMessage(final Player plr, final String msg) { - return sendMessage(plr, msg, true); - } - - public static boolean sendMessage(final Player plr, final String msg, final boolean prefix) { - if ((msg.length() > 0) && !msg.equals("")) { - if (plr == null) { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + msg); - } else { - sendMessageWrapped(plr, ChatColor.translateAlternateColorCodes('&', C.PREFIX.s() + msg)); - } - } - return true; - } - - /** - * Send a message to the player - * - * @param plr Player to recieve message - * @param c Caption to send - * - * @return - */ - public static boolean sendMessage(final Player plr, final C c, final String... args) { - if (c.s().length() > 1) { - String msg = c.s(); - if ((args != null) && (args.length > 0)) { - for (final String str : args) { - if (msg.contains("%s")) { - msg = msg.replaceFirst("%s", str); - } - } - } - if (plr == null) { - PlotMain.sendConsoleSenderMessage(msg); - } - else { - sendMessage(plr, msg, c.usePrefix()); - } - } - return true; - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java deleted file mode 100644 index 7d354657c..000000000 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java +++ /dev/null @@ -1,1003 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// PlotSquared - A plot manager and world generator for the Bukkit API / -// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / -// / -// This program is free software; you can redistribute it and/or modify / -// it under the terms of the GNU General Public License as published by / -// the Free Software Foundation; either version 3 of the License, or / -// (at your option) any later version. / -// / -// This program is distributed in the hope that it will be useful, / -// but WITHOUT ANY WARRANTY; without even the implied warranty of / -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / -// GNU General Public License for more details. / -// / -// You should have received a copy of the GNU General Public License / -// along with this program; if not, write to the Free Software Foundation, / -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / -// / -// You can contact us via: support@intellectualsites.com / -//////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.util; - -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import net.milkbowl.vault.economy.Economy; - -import org.bukkit.Bukkit; -import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.block.Biome; -import org.bukkit.block.Block; -import org.bukkit.block.Sign; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -import com.intellectualcrafters.plot.PlotMain; -import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.database.DBFunc; -import com.intellectualcrafters.plot.listeners.PlotListener; -import com.intellectualcrafters.plot.object.BlockLoc; -import com.intellectualcrafters.plot.object.Plot; -import com.intellectualcrafters.plot.object.PlotBlock; -import com.intellectualcrafters.plot.object.PlotId; -import com.intellectualcrafters.plot.object.PlotManager; -import com.intellectualcrafters.plot.object.PlotSettings; -import com.intellectualcrafters.plot.object.PlotWorld; - -/** - * plot functions - * - * @author Citymonstret - */ -@SuppressWarnings({"unused", "javadoc", "deprecation"}) public class PlotHelper { - public final static HashMap runners = new HashMap<>(); - public static boolean canSendChunk = false; - public static ArrayList runners_p = new ArrayList<>(); - static long state = 1; - public static HashMap lastPlot = new HashMap<>(); - public static HashMap worldBorder = new HashMap<>(); - - public static int getBorder(String worldname) { - if (worldBorder.containsKey(worldname)) { - PlotWorld plotworld = PlotMain.getWorldSettings(worldname); - return worldBorder.get(worldname) + 16; - } - return Integer.MAX_VALUE; - } - - public static void setupBorder(String world) { - PlotWorld plotworld = PlotMain.getWorldSettings(world); - if (!plotworld.WORLD_BORDER) { - return; - } - if (!worldBorder.containsKey(world)) { - worldBorder.put(world,0); - } - for (Plot plot : PlotMain.getPlots(world).values()) { - updateWorldBorder(plot); - } - } - - public static void createWorld(String world, String generator) { - - } - - public static PlotId parseId(String arg) { - try { - String[] split = arg.split(";"); - return new PlotId(Integer.parseInt(split[0]), Integer.parseInt(split[1])) ; - } - catch (Exception e) { - return null; - } - } - - /** - * direction 0 = north, 1 = south, etc: - * - * @param id - * @param direction - * - * @return - */ - public static PlotId getPlotIdRelative(final PlotId id, final int direction) { - switch (direction) { - case 0: - return new PlotId(id.x, id.y - 1); - case 1: - return new PlotId(id.x + 1, id.y); - case 2: - return new PlotId(id.x, id.y + 1); - case 3: - return new PlotId(id.x - 1, id.y); - } - return id; - } - - /** - * Merges all plots in the arraylist (with cost) - * - * @param plr - * @param world - * @param plotIds - * - * @return - */ - public static boolean mergePlots(final Player plr, final World world, final ArrayList plotIds) { - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - if (PlotMain.useEconomy && plotworld.USE_ECONOMY) { - final double cost = plotIds.size() * plotworld.MERGE_PRICE; - if (cost > 0d) { - final Economy economy = PlotMain.economy; - if (economy.getBalance(plr) < cost) { - PlayerFunctions.sendMessage(plr, C.CANNOT_AFFORD_MERGE, "" + cost); - return false; - } - economy.withdrawPlayer(plr, cost); - PlayerFunctions.sendMessage(plr, C.REMOVED_BALANCE, cost + ""); - } - } - return mergePlots(world, plotIds, true); - } - - /** - * Completely merges a set of plots
(There are no checks to make sure you supply the correct - * arguments)
- Misuse of this method can result in unusable plots
- the set of plots must belong to one - * owner and be rectangular
- the plot array must be sorted in ascending order
- Road will be removed where - * required
- changes will be saved to DB
- * - * @param world - * @param plotIds - * - * @return boolean (success) - */ - public static boolean mergePlots(final World world, final ArrayList plotIds, boolean removeRoads) { - if (plotIds.size() < 2) { - return false; - } - final PlotId pos1 = plotIds.get(0); - final PlotId pos2 = plotIds.get(plotIds.size() - 1); - - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - - manager.startPlotMerge(world, plotworld, plotIds); - - boolean result = false; - - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - - boolean changed = false; - - final boolean lx = x < pos2.x; - final boolean ly = y < pos2.y; - - final PlotId id = new PlotId(x, y); - - final Plot plot = PlotMain.getPlots(world).get(id); - - Plot plot2 = null; - - if (removeRoads) { - removeSign(world, plot); - } - if (lx) { - if (ly) { - if (!plot.settings.getMerged(1) || !plot.settings.getMerged(2)) { - changed = true; - if (removeRoads) { - manager.removeRoadSouthEast(plotworld, plot); - } - } - } - if (!plot.settings.getMerged(1)) { - changed = true; - plot2 = PlotMain.getPlots(world).get(new PlotId(x + 1, y)); - mergePlot(world, plot, plot2, removeRoads); - plot.settings.setMerged(1, true); - plot2.settings.setMerged(3, true); - } - } - if (ly) { - if (!plot.settings.getMerged(2)) { - changed = true; - plot2 = PlotMain.getPlots(world).get(new PlotId(x, y + 1)); - mergePlot(world, plot, plot2, removeRoads); - plot.settings.setMerged(2, true); - plot2.settings.setMerged(0, true); - } - } - } - } - - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - final PlotId id = new PlotId(x, y); - final Plot plot = PlotMain.getPlots(world).get(id); - DBFunc.setMerged(world.getName(), plot, plot.settings.getMerged()); - } - } - - - manager.finishPlotMerge(world, plotworld, plotIds); - - return result; - } - - /** - * Merges 2 plots Removes the road inbetween
- Assumes the first plot parameter is lower
- Assumes neither - * are a Mega-plot
- Assumes plots are directly next to each other
- Saves to DB - * - * @param world - * @param lesserPlot - * @param greaterPlot - */ - public static void mergePlot(final World world, final Plot lesserPlot, final Plot greaterPlot, boolean removeRoads) { - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - - if (lesserPlot.id.x.equals(greaterPlot.id.x)) { - if (!lesserPlot.settings.getMerged(2)) { - lesserPlot.settings.setMerged(2, true); - greaterPlot.settings.setMerged(0, true); - if (removeRoads) { - manager.removeRoadSouth(plotworld, lesserPlot); - } - } - } else { - if (!lesserPlot.settings.getMerged(1)) { - lesserPlot.settings.setMerged(1, true); - greaterPlot.settings.setMerged(3, true); - if (removeRoads) { - manager.removeRoadEast(plotworld, lesserPlot); - } - } - } - } - - /* - * Random number gen section - */ - public static long nextLong() { - final long a = state; - state = xorShift64(a); - return a; - } - - /* - * End of random number gen section - */ - - public static long xorShift64(long a) { - a ^= (a << 21); - a ^= (a >>> 35); - a ^= (a << 4); - return a; - } - - public static int random(final int n) { - if (n == 1) { - return 0; - } - final long r = ((nextLong() >>> 32) * n) >> 32; - return (int) r; - } - - public static void removeSign(final World world, final Plot p) { - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final Location loc = manager.getSignLoc(world, plotworld, p); - final Block bs = loc.getBlock(); - if (bs.getType() == Material.WALL_SIGN) { - bs.setType(Material.AIR); - } - } - - public static void setSign(final Player player, final Plot p) { - setSign(Bukkit.getWorld(p.world), player.getName(), p); - } - - @SuppressWarnings("deprecation") - public static void setSign(final World world, String name, final Plot p) { - if (name == null) { - name = "unknown"; - } - final PlotManager manager = PlotMain.getPlotManager(world); - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final Location loc = manager.getSignLoc(world, plotworld, p); - final Block bs = loc.getBlock(); - bs.setType(Material.AIR); - bs.setTypeIdAndData(Material.WALL_SIGN.getId(), (byte) 2, false); - final String id = p.id.x + ";" + p.id.y; - final Sign sign = (Sign) bs.getState(); - sign.setLine(0, C.OWNER_SIGN_LINE_1.translated().replaceAll("%id%", id)); - sign.setLine(1, C.OWNER_SIGN_LINE_2.translated().replaceAll("%id%", id).replaceAll("%plr%", name)); - sign.setLine(2, C.OWNER_SIGN_LINE_3.translated().replaceAll("%id%", id).replaceAll("%plr%", name)); - sign.setLine(3, C.OWNER_SIGN_LINE_4.translated().replaceAll("%id%", id).replaceAll("%plr%", name)); - sign.update(true); - } - - public static String getPlayerName(final UUID uuid) { - if (uuid == null) { - return "unknown"; - } - final OfflinePlayer plr = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); - if (!plr.hasPlayedBefore()) { - return "unknown"; - } - return plr.getName(); - } - - public static String getStringSized(final int max, final String string) { - if (string.length() > max) { - return string.substring(0, max); - } - return string; - } - - public static boolean setBlock(World world, int x, int y, int z, int id, byte data) { - try { - return AbstractSetBlock.setBlockManager.set(world, x, y, z, id, data); - } - catch (Throwable e) { - AbstractSetBlock.setBlockManager = new SetBlockSlow(); - return AbstractSetBlock.setBlockManager.set(world, x, y, z, id, data); - } - } - - public static boolean setBlock(World world, int x, int y, int z, PlotBlock[] blocks) { - final int i = random(blocks.length); - final PlotBlock newblock = blocks[i]; - try { - return AbstractSetBlock.setBlockManager.set(world, x, y, z, newblock.id, newblock.data); - } - catch (Throwable e) { - AbstractSetBlock.setBlockManager = new SetBlockSlow(); - return AbstractSetBlock.setBlockManager.set(world, x, y, z, newblock.id, newblock.data); - } - } - - public static void update(Location loc) { - ArrayList chunks = new ArrayList<>(); - final int distance = Bukkit.getViewDistance(); - for (int cx = -distance; cx < distance; cx++) { - for (int cz = -distance; cz < distance; cz++) { - final Chunk chunk = loc.getWorld().getChunkAt(loc.getChunk().getX() + cx, loc.getChunk().getZ() + cz); - chunks.add(chunk); - } - } - AbstractSetBlock.setBlockManager.update(chunks); - } - - public static void autoMerge(final World world, final Plot plot, final Player player) { - if (plot == null) { - return; - } - if (plot.owner == null) { - return; - } - if (!plot.owner.equals(UUIDHandler.getUUID(player))) { - return; - } - - ArrayList plots; - boolean merge = true; - int count = 0; - while (merge) { - if (count > 16) { - break; - } - count++; - final PlotId bot = PlayerFunctions.getBottomPlot(world, plot).id; - final PlotId top = PlayerFunctions.getTopPlot(world, plot).id; - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x, bot.y - 1), new PlotId(top.x, top.y)); - if (ownsPlots(world, plots, player, 0)) { - final boolean result = mergePlots(world, plots, true); - if (result) { - merge = true; - continue; - } - } - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x + 1, top.y)); - if (ownsPlots(world, plots, player, 1)) { - final boolean result = mergePlots(world, plots, true); - if (result) { - merge = true; - continue; - } - } - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x, bot.y), new PlotId(top.x, top.y + 1)); - if (ownsPlots(world, plots, player, 2)) { - final boolean result = mergePlots(world, plots, true); - if (result) { - merge = true; - continue; - } - } - plots = PlayerFunctions.getPlotSelectionIds(new PlotId(bot.x - 1, bot.y), new PlotId(top.x, top.y)); - if (ownsPlots(world, plots, player, 3)) { - final boolean result = mergePlots(world, plots, true); - if (result) { - merge = true; - continue; - } - } - merge = false; - } - update(player.getLocation()); - } - - private static boolean ownsPlots(final World world, final ArrayList plots, final Player player, final int dir) { - final PlotId id_min = plots.get(0); - final PlotId id_max = plots.get(plots.size() - 1); - for (final PlotId myid : plots) { - final Plot myplot = PlotMain.getPlots(world).get(myid); - if ((myplot == null) || !myplot.hasOwner() || !(myplot.getOwner().equals(UUIDHandler.getUUID(player)))) { - return false; - } - final PlotId top = PlayerFunctions.getTopPlot(world, myplot).id; - if (((top.x > id_max.x) && (dir != 1)) || ((top.y > id_max.y) && (dir != 2))) { - return false; - } - final PlotId bot = PlayerFunctions.getBottomPlot(world, myplot).id; - if (((bot.x < id_min.x) && (dir != 3)) || ((bot.y < id_min.y) && (dir != 0))) { - return false; - } - } - return true; - } - - public static void updateWorldBorder(Plot plot) { - if (!worldBorder.containsKey(plot.world)) { - return; - } - String world = plot.world; - PlotManager manager = PlotMain.getPlotManager(world); - PlotWorld plotworld = PlotMain.getWorldSettings(world); - Location bot = manager.getPlotBottomLocAbs(plotworld, plot.id); - Location top = manager.getPlotTopLocAbs(plotworld, plot.id); - int border = worldBorder.get(plot.world); - int botmax = Math.max(Math.abs(bot.getBlockX()), Math.abs(bot.getBlockZ())); - int topmax = Math.max(Math.abs(top.getBlockX()), Math.abs(top.getBlockZ())); - int max = Math.max(botmax, topmax); - if (max > border ) { - worldBorder.put(plot.world, max); - } - } - - /** - * Create a plot and notify the world border and plot merger - */ - public static boolean createPlot(final Player player, final Plot plot) { - if (PlotHelper.worldBorder.containsKey(plot.world)) { - updateWorldBorder(plot); - } - World w = player.getWorld(); - UUID uuid = UUIDHandler.getUUID(player); - Plot p = createPlotAbs(uuid, plot); - final PlotWorld plotworld = PlotMain.getWorldSettings(w); - if (plotworld.AUTO_MERGE) { - autoMerge(w, p, player); - } - return true; - } - - /** - * Create a plot without notifying the merge function or world border manager - */ - public static Plot createPlotAbs(final UUID uuid, final Plot plot) { - final World w = plot.getWorld(); - final Plot p = new Plot(plot.id, uuid, plot.settings.getBiome(), new ArrayList(), new ArrayList(), w.getName()); - PlotMain.updatePlot(p); - DBFunc.createPlotAndSettings(p); - return p; - } - - public static int getLoadedChunks(final World world) { - return world.getLoadedChunks().length; - } - - public static int getEntities(final World world) { - return world.getEntities().size(); - } - - - public static int getTileEntities(final World world) { - PlotMain.getWorldSettings(world); - int x = 0; - for (final Chunk chunk : world.getLoadedChunks()) { - x += chunk.getTileEntities().length; - } - return x; - } - - public static double getWorldFolderSize(final World world) { - // long size = FileUtil.sizeOfDirectory(world.getWorldFolder()); - final File folder = world.getWorldFolder(); - final long size = folder.length(); - return (((size) / 1024) / 1024); - } - - public static String createId(final int x, final int z) { - return x + ";" + z; - } - - public static int square(final int x) { - return x * x; - } - - public static short[] getBlock(final String block) { - if (block.contains(":")) { - final String[] split = block.split(":"); - return new short[]{Short.parseShort(split[0]), Short.parseShort(split[1])}; - } - return new short[]{Short.parseShort(block), 0}; - } - - public static void clearAllEntities(final World world, final Plot plot, final boolean tile) { - - final List entities = world.getEntities(); - for (final Entity entity : entities) { - final PlotId id = PlayerFunctions.getPlot(entity.getLocation()); - if (plot.id.equals(id)) { - if (entity instanceof Player) { - final Player player = (Player) entity; - PlotMain.teleportPlayer(player, entity.getLocation(), plot); - PlotListener.plotExit(player, plot); - } else { - entity.remove(); - } - } - } - } - - /** - * Clear a plot. Use null player if no player is present - * @param player - * @param world - * @param plot - * @param isDelete - */ - public static void clear(final Player player, final World world, final Plot plot, final boolean isDelete) { - if (runners.containsKey(plot)) { - PlayerFunctions.sendMessage(null, C.WAIT_FOR_TIMER); - return; - } - final PlotManager manager = PlotMain.getPlotManager(world); - - final Location pos1 = PlotHelper.getPlotBottomLoc(world, plot.id).add(1, 0, 1); - - final int prime = 31; - int h = 1; - h = (prime * h) + pos1.getBlockX(); - h = (prime * h) + pos1.getBlockZ(); - state = h; - - final long start = System.currentTimeMillis(); - final Location location = PlotHelper.getPlotHomeDefault(plot); - PlotWorld plotworld = PlotMain.getWorldSettings(world); - runners.put(plot, 1); - if (plotworld.TERRAIN != 0) { - final Location pos2 = PlotHelper.getPlotTopLoc(world, plot.id); - ChunkManager.regenerateRegion(pos1, pos2, new Runnable() { - @Override - public void run() { - if (player != null && player.isOnline()) { - PlayerFunctions.sendMessage(player, C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.currentTimeMillis() - start)))); - } - runners.remove(plot); - } - }); - return; - } - Runnable run = new Runnable() { - @Override - public void run() { - PlotHelper.setBiome(world, plot, Biome.FOREST); - runners.remove(plot); - if (player != null && player.isOnline()) { - PlayerFunctions.sendMessage(player, C.CLEARING_DONE.s().replaceAll("%time%", "" + ((System.currentTimeMillis() - start)))); - } - update(location); - } - }; - manager.clearPlot(world, plotworld, plot, isDelete, run); - } - - /** - * Clear a plot and associated sections: [sign, entities, border] - * - * @param requester - * @param plot - */ - public static void clear(final Player requester, final Plot plot, final boolean isDelete) { - if (requester == null) { - clearAllEntities(plot.getWorld(), plot, false); - clear(requester, plot.getWorld(), plot, isDelete); - removeSign(plot.getWorld(), plot); - return; - } - if (runners.containsKey(plot)) { - PlayerFunctions.sendMessage(requester, C.WAIT_FOR_TIMER); - return; - } - - PlayerFunctions.sendMessage(requester, C.CLEARING_PLOT); - - final World world; - world = requester.getWorld(); - - clearAllEntities(world, plot, false); - clear(requester, world, plot, isDelete); - removeSign(world, plot); - } - - public static void setCuboid(final World world, final Location pos1, final Location pos2, final PlotBlock newblock) { - for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) { - for (int x = pos1.getBlockX(); x < pos2.getBlockX(); x++) { - for (int z = pos1.getBlockZ(); z < pos2.getBlockZ(); z++) { - final Block block = world.getBlockAt(x, y, z); - if (!((block.getTypeId() == newblock.id) && (block.getData() == newblock.data))) { - setBlock(world, x, y, z, newblock.id, newblock.data); - } - } - } - } - } - - public static void setCuboid(final World world, final Location pos1, final Location pos2, final PlotBlock[] blocks) { - if (blocks.length == 1) { - setCuboid(world, pos1, pos2, blocks[0]); - return; - } - for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) { - for (int x = pos1.getBlockX(); x < pos2.getBlockX(); x++) { - for (int z = pos1.getBlockZ(); z < pos2.getBlockZ(); z++) { - final int i = random(blocks.length); - final PlotBlock newblock = blocks[i]; - final Block block = world.getBlockAt(x, y, z); - if (!((block.getTypeId() == newblock.id) && (block.getData() == newblock.data))) { - setBlock(world, x, y, z, newblock.id, newblock.data); - } - } - } - } - } - - public static void setSimpleCuboid(final World world, final Location pos1, final Location pos2, final PlotBlock newblock) { - for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) { - for (int x = pos1.getBlockX(); x < pos2.getBlockX(); x++) { - for (int z = pos1.getBlockZ(); z < pos2.getBlockZ(); z++) { - final Block block = world.getBlockAt(x, y, z); - if (!((block.getTypeId() == newblock.id))) { - setBlock(world, x, y, z, newblock.id, (byte) 0); - } - } - } - } - } - - public static void setBiome(final World world, final Plot plot, final Biome b) { - final int bottomX = getPlotBottomLoc(world, plot.id).getBlockX(); - final int topX = getPlotTopLoc(world, plot.id).getBlockX() + 1; - final int bottomZ = getPlotBottomLoc(world, plot.id).getBlockZ(); - final int topZ = getPlotTopLoc(world, plot.id).getBlockZ() + 1; - - final Block block = world.getBlockAt(getPlotBottomLoc(world, plot.id).add(1, 1, 1)); - final Biome biome = block.getBiome(); - - if (biome.equals(b)) { - return; - } - - for (int x = bottomX; x <= topX; x++) { - for (int z = bottomZ; z <= topZ; z++) { - final Block blk = world.getBlockAt(x, 0, z); - final Biome c = blk.getBiome(); - if (c.equals(b)) { - x += 15; - continue; - } - blk.setBiome(b); - } - } - } - - public static int getHeighestBlock(final World world, final int x, final int z) { - boolean safe = false; - int id; - for (int i = 1; i < world.getMaxHeight(); i++) { - id = world.getBlockAt(x, i, z).getTypeId(); - if (id == 0) { - if (safe) { - return i; - } - safe = true; - } - } - return 64; - } - - /** - * Get plot home - * - * @param w World in which the plot is located - * @param plotid Plot ID - * - * @return Home Location - */ - public static Location getPlotHome(final World w, final PlotId plotid) { - Plot plot = getPlot(w, plotid); - BlockLoc home = plot.settings.getPosition(); - final Location bot = getPlotBottomLoc(w, plotid); - PlotManager manager = PlotMain.getPlotManager(w); - if (home == null || (home.x == 0 && home.z == 0)) { - final Location top = getPlotTopLoc(w, plotid); - final int x = ((top.getBlockX() - bot.getBlockX())/2) + bot.getBlockX(); - final int z = ((top.getBlockZ() - bot.getBlockZ())/2) + bot.getBlockZ(); - final int y = Math.max(getHeighestBlock(w, x, z), manager.getSignLoc(w, PlotMain.getWorldSettings(w), plot).getBlockY()); - return new Location(w, x, y, z); - } - else { - final int y = Math.max(getHeighestBlock(w, home.x, home.z), home.y); - return bot.add(home.x, y, home.z); - } - } - - /** - * Retrieve the location of the default plot home position - * - * @param plot Plot - * - * @return the location - */ - public static Location getPlotHomeDefault(final Plot plot) { - final Location l = getPlotBottomLoc(plot.getWorld(), plot.getId()).subtract(0, 0, 0); - l.setY(getHeighestBlock(plot.getWorld(), l.getBlockX(), l.getBlockZ())); - return l; - } - - /** - * Get the plot home - * - * @param w World - * @param plot Plot Object - * - * @return Plot Home Location - * - * @see #getPlotHome(org.bukkit.World, com.intellectualcrafters.plot.object.PlotId) - */ - public static Location getPlotHome(final World w, final Plot plot) { - return getPlotHome(w, plot.id); - } - - /** - * Refresh the plot chunks - * - * @param world World in which the plot is located - * @param plot Plot Object - */ - public static void refreshPlotChunks(final World world, final Plot plot) { - final int bottomX = getPlotBottomLoc(world, plot.id).getBlockX(); - final int topX = getPlotTopLoc(world, plot.id).getBlockX(); - final int bottomZ = getPlotBottomLoc(world, plot.id).getBlockZ(); - final int topZ = getPlotTopLoc(world, plot.id).getBlockZ(); - - final int minChunkX = (int) Math.floor((double) bottomX / 16); - final int maxChunkX = (int) Math.floor((double) topX / 16); - final int minChunkZ = (int) Math.floor((double) bottomZ / 16); - final int maxChunkZ = (int) Math.floor((double) topZ / 16); - - final ArrayList chunks = new ArrayList<>(); - - for (int x = minChunkX; x <= maxChunkX; x++) { - for (int z = minChunkZ; z <= maxChunkZ; z++) { - if (canSendChunk) { - final Chunk chunk = world.getChunkAt(x, z); - chunks.add(chunk); - } else { - world.refreshChunk(x, z); - } - } - } - try { - SendChunk.sendChunk(chunks); - } catch (final Throwable e) { - canSendChunk = false; - for (int x = minChunkX; x <= maxChunkX; x++) { - for (int z = minChunkZ; z <= maxChunkZ; z++) { - world.refreshChunk(x, z); - } - } - } - } - - /** - * Gets the top plot location of a plot (all plots are treated as small plots) - To get the top loc of a mega plot - * use getPlotTopLoc(...) - * - * @param world - * @param id - * - * @return - */ - public static Location getPlotTopLocAbs(final World world, final PlotId id) { - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final PlotManager manager = PlotMain.getPlotManager(world); - return manager.getPlotTopLocAbs(plotworld, id); - } - - /** - * Gets the bottom plot location of a plot (all plots are treated as small plots) - To get the top loc of a mega - * plot use getPlotBottomLoc(...) - * - * @param world - * @param id - * - * @return - */ - public static Location getPlotBottomLocAbs(final World world, final PlotId id) { - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final PlotManager manager = PlotMain.getPlotManager(world); - return manager.getPlotBottomLocAbs(plotworld, id); - } - - /** - * Obtains the width of a plot (x width) - * - * @param world - * @param id - * - * @return - */ - public static int getPlotWidth(final World world, final PlotId id) { - return getPlotTopLoc(world, id).getBlockX() - getPlotBottomLoc(world, id).getBlockX(); - } - - /** - * Gets the top loc of a plot (if mega, returns top loc of that mega plot) - If you would like each plot treated as - * a small plot use getPlotTopLocAbs(...) - * - * @param world - * @param id - * - * @return - */ - public static Location getPlotTopLoc(final World world, PlotId id) { - final Plot plot = PlotMain.getPlots(world).get(id); - if (plot != null) { - id = PlayerFunctions.getTopPlot(world, plot).id; - } - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final PlotManager manager = PlotMain.getPlotManager(world); - return manager.getPlotTopLocAbs(plotworld, id); - } - - /** - * Gets the bottom loc of a plot (if mega, returns bottom loc of that mega plot) - If you would like each plot - * treated as a small plot use getPlotBottomLocAbs(...) - * - * @param world - * @param id - * - * @return - */ - public static Location getPlotBottomLoc(final World world, PlotId id) { - final Plot plot = PlotMain.getPlots(world).get(id); - if (plot != null) { - id = PlayerFunctions.getBottomPlot(world, plot).id; - } - final PlotWorld plotworld = PlotMain.getWorldSettings(world); - final PlotManager manager = PlotMain.getPlotManager(world); - return manager.getPlotBottomLocAbs(plotworld, id); - } - - public static boolean isUnowned(final World world, final PlotId pos1, final PlotId pos2) { - for (int x = pos1.x; x <= pos2.x; x++) { - for (int y = pos1.y; y <= pos2.y; y++) { - final PlotId id = new PlotId(x, y); - if (PlotMain.getPlots(world).get(id) != null) { - if (PlotMain.getPlots(world).get(id).owner != null) { - return false; - } - } - } - } - return true; - } - - public static boolean move(final World world, final PlotId current, PlotId newPlot, final Runnable whenDone) { - final Location bot1 = PlotHelper.getPlotBottomLoc(world, current); - Location bot2 = PlotHelper.getPlotBottomLoc(world, newPlot); - final Location top = PlotHelper.getPlotTopLoc(world, current); - final Plot currentPlot = PlotHelper.getPlot(world, current); - if (currentPlot.owner == null) { - return false; - } - Plot pos1 = PlayerFunctions.getBottomPlot(world, currentPlot); - Plot pos2 = PlayerFunctions.getTopPlot(world, currentPlot); - PlotId size = PlotHelper.getSize(world, currentPlot); - if (!PlotHelper.isUnowned(world, newPlot, new PlotId(newPlot.x + size.x - 1, newPlot.y + size.y - 1))) { - return false; - } - - int offset_x = newPlot.x - pos1.id.x; - int offset_y = newPlot.y - pos1.id.y; - final ArrayList selection = PlayerFunctions.getPlotSelectionIds(pos1.id, pos2.id); - String worldname = world.getName(); - for (PlotId id : selection) { - DBFunc.movePlot(world.getName(), new PlotId(id.x, id.y), new PlotId(id.x + offset_x, id.y + offset_y)); - Plot plot = PlotMain.getPlots(worldname).get(id); - PlotMain.getPlots(worldname).remove(id); - plot.id.x += offset_x; - plot.id.y += offset_y; - PlotMain.getPlots(worldname).put(plot.id, plot); - } - ChunkManager.copyRegion(bot1, top, bot2, new Runnable() { - @Override - public void run() { - Location bot = bot1.clone().add(1, 0, 1); - ChunkManager.regenerateRegion(bot, top, null); - TaskManager.runTaskLater(whenDone, 1); - } - }); - return true; - } - - public static PlotId getSize(World world, Plot plot) { - PlotSettings settings = plot.settings; - if (!settings.isMerged()) { - return new PlotId(1,1); - } - Plot top = PlayerFunctions.getTopPlot(world, plot); - Plot bot = PlayerFunctions.getBottomPlot(world, plot); - return new PlotId(top.id.x - bot.id.x + 1, top.id.y - bot.id.y + 1); - } - - /** - * Fetches the plot from the main class - * - * @param world - * @param id - * - * @return - */ - public static Plot getPlot(final World world, final PlotId id) { - if (id == null) { - return null; - } - if (PlotMain.getPlots(world).containsKey(id)) { - return PlotMain.getPlots(world).get(id); - } - return new Plot(id, null, Biome.FOREST, new ArrayList(), new ArrayList(), world.getName()); - } - - /** - * Returns the plot at a given location - * - * @param loc - * - * @return - */ - public static Plot getCurrentPlot(final Location loc) { - final PlotId id = PlayerFunctions.getPlot(loc); - if (id == null) { - return null; - } - if (PlotMain.getPlots(loc.getWorld()).containsKey(id)) { - return PlotMain.getPlots(loc.getWorld()).get(id); - } - return new Plot(id, null, Biome.FOREST, new ArrayList(), new ArrayList(), loc.getWorld().getName()); - } -} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotSquaredException.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotSquaredException.java index 3c14270de..e9090b103 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotSquaredException.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotSquaredException.java @@ -18,10 +18,9 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; /** * Created 2014-09-29 for PlotSquared @@ -29,25 +28,24 @@ import com.intellectualcrafters.plot.PlotMain; * @author Citymonstret */ public class PlotSquaredException extends RuntimeException { - public PlotSquaredException(final PlotError error, final String details) { super("PlotError >> " + error.getHeader() + ": " + details); - PlotMain.sendConsoleSenderMessage("&cPlotError &6>> &c" + error.getHeader() + ": &6" + details); + PlotSquared.log("&cPlotError &6>> &c" + error.getHeader() + ": &6" + details); } - + public static enum PlotError { - PLOTMAIN_NULL("The PlotMain instance was null"), + PLOTMAIN_NULL("The PlotSquared instance was null"), MISSING_DEPENDENCY("Missing Dependency"); private final String errorHeader; - + PlotError(final String errorHeader) { this.errorHeader = errorHeader; } - + public String getHeader() { return this.errorHeader; } - + @Override public String toString() { return this.getHeader(); diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/RUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/RUtils.java index 008b152d7..3c2803a98 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/RUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/RUtils.java @@ -18,22 +18,17 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; -import org.bukkit.Location; -import org.bukkit.entity.Player; - import com.intellectualcrafters.plot.config.C; -import com.intellectualcrafters.plot.config.Settings; /** * Random utilities * * @author Citymonstret */ -@SuppressWarnings("unused") public class RUtils { - +@SuppressWarnings("unused") +public class RUtils { /** * Get the total allocated ram * @@ -42,7 +37,7 @@ import com.intellectualcrafters.plot.config.Settings; public static long getTotalRam() { return (Runtime.getRuntime().totalMemory() / 1024) / 1024; } - + /** * Get the total free ram * @@ -51,7 +46,7 @@ import com.intellectualcrafters.plot.config.Settings; public static long getFreeRam() { return (Runtime.getRuntime().freeMemory() / 1024) / 1024; } - + /** * Percentage of used ram * @@ -60,7 +55,7 @@ import com.intellectualcrafters.plot.config.Settings; public static long getRamPercentage() { return (getFreeRam() / getTotalRam()) * 100; } - + /** * Get formatted time * @@ -73,58 +68,25 @@ import com.intellectualcrafters.plot.config.Settings; final double m = (sec % 3600) / 60; final double s = sec % 60; final String string = C.TIME_FORMAT.s(); - final String s_h = (int) h + " " + ((int) h != 1 ? "hours" : "hour"); final String s_m = (int) m + " " + ((int) m != 1 ? "minutes" : "minute"); final String s_s = (int) s + " " + ((int) s != 1 ? "seconds" : "second"); return string.replaceAll("%sec%", s_s).replaceAll("%min%", s_m).replaceAll("%hours%", s_h); } - - /** - * Force textures on the client - * - * @param p texture to force - */ - public void forceTexture(final Player p) { - p.setResourcePack(Settings.PLOT_SPECIFIC_RESOURCE_PACK); - } - - public Direction getDirection(final Location l) { - final double d = ((l.getYaw() * 4.0F) / 360.0F) + 0.5D; - final int i = (int) d; - final int x = d < i ? i - 1 : i; - switch (x) { - case 0: - return Direction.SOUTH; - case 1: - return Direction.EAST; - case 2: - return Direction.NORTH; - case 3: - return Direction.WEST; - default: - return null; - } - } - - public boolean compareDirections(final Location l1, final Location l2) { - return getDirection(l1) == getDirection(l2); - } - + enum Direction { SOUTH(0), EAST(1), NORTH(2), WEST(3); private final int i; - + Direction(final int i) { this.i = i; } - + public int getInt() { return this.i; } } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java index a35e7a67c..f590a1cb7 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; import java.lang.reflect.Constructor; @@ -36,8 +35,8 @@ import org.bukkit.Server; * @author DPOH-VAR * @version 1.0 */ -@SuppressWarnings({"UnusedDeclaration", "rawtypes"}) public class ReflectionUtils { - +@SuppressWarnings({ "UnusedDeclaration", "rawtypes" }) +public class ReflectionUtils { /** * prefix of bukkit classes */ @@ -50,7 +49,6 @@ import org.bukkit.Server; * boolean value, TRUE if server uses forge or MCPC+ */ private static boolean forge = false; - /** check server version and class names */ static { if (Bukkit.getServer() != null) { @@ -77,14 +75,14 @@ import org.bukkit.Server; } } } - + /** * @return true if server has forge classes */ public static boolean isForge() { return forge; } - + /** * Get class for name. Replace {nms} to net.minecraft.server.V*. Replace {cb} to org.bukkit.craftbukkit.V*. Replace * {nm} to net.minecraft @@ -105,7 +103,7 @@ import org.bukkit.Server; } throw new RuntimeException("no class found"); } - + /** * get RefClass object by real class * @@ -116,17 +114,17 @@ import org.bukkit.Server; public static RefClass getRefClass(final Class clazz) { return new RefClass(clazz); } - + /** * RefClass - utility to simplify work with reflections. */ public static class RefClass { private final Class clazz; - + private RefClass(final Class clazz) { this.clazz = clazz; } - + /** * get passed class * @@ -135,7 +133,7 @@ import org.bukkit.Server; public Class getRealClass() { return this.clazz; } - + /** * see {@link Class#isInstance(Object)} * @@ -146,7 +144,7 @@ import org.bukkit.Server; public boolean isInstance(final Object object) { return this.clazz.isInstance(object); } - + /** * get existing method by name and types * @@ -179,7 +177,7 @@ import org.bukkit.Server; throw new RuntimeException(e); } } - + /** * get existing constructor by types * @@ -211,7 +209,7 @@ import org.bukkit.Server; throw new RuntimeException(e); } } - + /** * find method by type parameters * @@ -236,22 +234,21 @@ import org.bukkit.Server; final List methods = new ArrayList<>(); Collections.addAll(methods, this.clazz.getMethods()); Collections.addAll(methods, this.clazz.getDeclaredMethods()); - findMethod: - for (final Method m : methods) { - final Class[] methodTypes = m.getParameterTypes(); - if (methodTypes.length != classes.length) { - continue; - } - for (final Class aClass : classes) { - if (!Arrays.equals(classes, methodTypes)) { - continue findMethod; + findMethod: for (final Method m : methods) { + final Class[] methodTypes = m.getParameterTypes(); + if (methodTypes.length != classes.length) { + continue; + } + for (final Class aClass : classes) { + if (!Arrays.equals(classes, methodTypes)) { + continue findMethod; + } + return new RefMethod(m); } - return new RefMethod(m); } - } throw new RuntimeException("no such method"); } - + /** * find method by name * @@ -274,7 +271,7 @@ import org.bukkit.Server; } throw new RuntimeException("no such method"); } - + /** * find method by return value * @@ -287,7 +284,7 @@ import org.bukkit.Server; public RefMethod findMethodByReturnType(final RefClass type) { return findMethodByReturnType(type.clazz); } - + /** * find method by return value * @@ -311,7 +308,7 @@ import org.bukkit.Server; } throw new RuntimeException("no such method"); } - + /** * find constructor by number of arguments * @@ -332,7 +329,7 @@ import org.bukkit.Server; } throw new RuntimeException("no such constructor"); } - + /** * get field by name * @@ -353,7 +350,7 @@ import org.bukkit.Server; throw new RuntimeException(e); } } - + /** * find field by type * @@ -366,7 +363,7 @@ import org.bukkit.Server; public RefField findField(final RefClass type) { return findField(type.clazz); } - + /** * find field by type * @@ -391,39 +388,39 @@ import org.bukkit.Server; throw new RuntimeException("no such field"); } } - + /** * Method wrapper */ public static class RefMethod { private final Method method; - + private RefMethod(final Method method) { this.method = method; method.setAccessible(true); } - + /** * @return passed method */ public Method getRealMethod() { return this.method; } - + /** * @return owner class of method */ public RefClass getRefClass() { return new RefClass(this.method.getDeclaringClass()); } - + /** * @return class of method return type */ public RefClass getReturnRefClass() { return new RefClass(this.method.getReturnType()); } - + /** * apply method to object * @@ -434,7 +431,7 @@ import org.bukkit.Server; public RefExecutor of(final Object e) { return new RefExecutor(e); } - + /** * call static method * @@ -449,14 +446,14 @@ import org.bukkit.Server; throw new RuntimeException(e); } } - + public class RefExecutor { final Object e; - + public RefExecutor(final Object e) { this.e = e; } - + /** * apply method for selected object * @@ -475,32 +472,32 @@ import org.bukkit.Server; } } } - + /** * Constructor wrapper */ public static class RefConstructor { private final Constructor constructor; - + private RefConstructor(final Constructor constructor) { this.constructor = constructor; constructor.setAccessible(true); } - + /** * @return passed constructor */ public Constructor getRealConstructor() { return this.constructor; } - + /** * @return owner class of method */ public RefClass getRefClass() { return new RefClass(this.constructor.getDeclaringClass()); } - + /** * create new instance with constructor * @@ -518,36 +515,36 @@ import org.bukkit.Server; } } } - + public static class RefField { private final Field field; - + private RefField(final Field field) { this.field = field; field.setAccessible(true); } - + /** * @return passed field */ public Field getRealField() { return this.field; } - + /** * @return owner class of field */ public RefClass getRefClass() { return new RefClass(this.field.getDeclaringClass()); } - + /** * @return type of field */ public RefClass getFieldRefClass() { return new RefClass(this.field.getType()); } - + /** * apply fiend for object * @@ -558,14 +555,14 @@ import org.bukkit.Server; public RefExecutor of(final Object e) { return new RefExecutor(e); } - + public class RefExecutor { final Object e; - + public RefExecutor(final Object e) { this.e = e; } - + /** * set field value for applied object * @@ -578,7 +575,7 @@ import org.bukkit.Server; throw new RuntimeException(e); } } - + /** * get field value for applied object * @@ -593,5 +590,4 @@ import org.bukkit.Server; } } } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java index b0b28b22f..bbe7ead4e 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SchematicHandler.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; import java.io.File; @@ -34,9 +33,6 @@ import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import org.bukkit.Chunk; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Block; import com.intellectualcrafters.jnbt.ByteArrayTag; import com.intellectualcrafters.jnbt.CompoundTag; @@ -47,9 +43,12 @@ import com.intellectualcrafters.jnbt.NBTOutputStream; import com.intellectualcrafters.jnbt.ShortTag; import com.intellectualcrafters.jnbt.StringTag; import com.intellectualcrafters.jnbt.Tag; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; /** * Schematic Handler @@ -69,63 +68,49 @@ public class SchematicHandler { */ public static boolean paste(final Location location, final Schematic schematic, final Plot plot, final int x_offset, final int z_offset) { if (schematic == null) { - PlotMain.sendConsoleSenderMessage("Schematic == null :|"); + PlotSquared.log("Schematic == null :|"); return false; } try { final Dimension demensions = schematic.getSchematicDimension(); - final int WIDTH = demensions.getX(); final int LENGTH = demensions.getZ(); final int HEIGHT = demensions.getY(); - final DataCollection[] blocks = schematic.getBlockCollection(); - - Location l1 = PlotHelper.getPlotBottomLoc(plot.getWorld(), plot.getId()); - - final int sy = location.getWorld().getHighestBlockYAt(l1.getBlockX() + 1, l1.getBlockZ() + 1); - + Location l1 = MainUtil.getPlotBottomLoc(plot.world, plot.getId()); + final int sy = BukkitUtil.getHeighestBlock(location.getWorld(), l1.getX() + 1, l1.getZ() + 1); l1 = l1.add(1, sy - 1, 1); - - final World world = location.getWorld(); - - int y_offset; - if (HEIGHT == location.getWorld().getMaxHeight()) { - y_offset = 0; + if (HEIGHT == BukkitUtil.getMaxHeight(location.getWorld())) { } else { - y_offset = l1.getBlockY(); + l1.getY(); } - + final int[] xl = new int[blocks.length]; + final int[] yl = new int[blocks.length]; + final int[] zl = new int[blocks.length]; + final int[] ids = new int[blocks.length]; + final byte[] data = new byte[blocks.length]; for (int x = 0; x < WIDTH; x++) { for (int z = 0; z < LENGTH; z++) { for (int y = 0; y < HEIGHT; y++) { final int index = (y * WIDTH * LENGTH) + (z * WIDTH) + x; - final DataCollection block = blocks[index]; - - final short id = block.getBlock(); - final byte data = block.getData(); - - // if (block.tag != null) { - // WorldEditUtils.setNBT(world, id, data, l1.getBlockX() - // + x + x_offset, y + y_offset, l1.getBlockZ() + z + - // z_offset, block.tag); - // } - // else { - PlotHelper.setBlock(world, l1.getBlockX() + x + x_offset, y + y_offset, l1.getBlockZ() + z + z_offset, id, data); - // } + xl[index] = x; + yl[index] = y; + zl[index] = z; + ids[index] = block.block; + data[index] = block.data; } } } + BlockManager.setBlocks(plot.world, xl, yl, zl, ids, data); } catch (final Exception e) { return false; } return true; } - - public static Schematic getSchematic(final CompoundTag tag, File file) { + + public static Schematic getSchematic(final CompoundTag tag, final File file) { final Map tagMap = tag.getValue(); - byte[] addId = new byte[0]; if (tagMap.containsKey("AddBlocks")) { addId = ByteArrayTag.class.cast(tagMap.get("AddBlocks")).getValue(); @@ -133,13 +118,10 @@ public class SchematicHandler { final short width = ShortTag.class.cast(tagMap.get("Width")).getValue(); final short length = ShortTag.class.cast(tagMap.get("Length")).getValue(); final short height = ShortTag.class.cast(tagMap.get("Height")).getValue(); - final byte[] b = ByteArrayTag.class.cast(tagMap.get("Blocks")).getValue(); final byte[] d = ByteArrayTag.class.cast(tagMap.get("Data")).getValue(); final short[] blocks = new short[b.length]; - final Dimension dimension = new Dimension(width, height, length); - for (int index = 0; index < b.length; index++) { if ((index >> 1) >= addId.length) { // No corresponding // AddBlocks index @@ -152,9 +134,7 @@ public class SchematicHandler { } } } - final DataCollection[] collection = new DataCollection[b.length]; - for (int x = 0; x < b.length; x++) { collection[x] = new DataCollection(blocks[x], d[x]); } @@ -170,32 +150,30 @@ public class SchematicHandler { */ public static Schematic getSchematic(final String name) { { - final File parent = new File(PlotMain.getMain().getDataFolder() + File.separator + "schematics"); + final File parent = new File(PlotSquared.IMP.getDirectory() + File.separator + "schematics"); if (!parent.exists()) { if (!parent.mkdir()) { throw new RuntimeException("Could not create schematic parent directory"); } } } - final File file = new File(PlotMain.getMain().getDataFolder() + File.separator + "schematics" + File.separator + name + ".schematic"); + final File file = new File(PlotSquared.IMP.getDirectory() + File.separator + "schematics" + File.separator + name + ".schematic"); if (!file.exists()) { - PlotMain.sendConsoleSenderMessage(file.toString() + " doesn't exist"); + PlotSquared.log(file.toString() + " doesn't exist"); return null; } - try { final InputStream iStream = new FileInputStream(file); final NBTInputStream stream = new NBTInputStream(new GZIPInputStream(iStream)); final CompoundTag tag = (CompoundTag) stream.readTag(); stream.close(); return getSchematic(tag, file); - } catch (final Exception e) { - PlotMain.sendConsoleSenderMessage(file.toString() + " is not in GZIP format"); + PlotSquared.log(file.toString() + " is not in GZIP format"); return null; } } - + /** * Saves a schematic to a file path * @@ -206,11 +184,11 @@ public class SchematicHandler { */ public static boolean save(final CompoundTag tag, final String path) { if (tag == null) { - PlotMain.sendConsoleSenderMessage("&cCannot save empty tag"); + PlotSquared.log("&cCannot save empty tag"); return false; } try { - File tmp = new File(path); + final File tmp = new File(path); tmp.getParentFile().mkdirs(); final OutputStream stream = new FileOutputStream(path); final NBTOutputStream output = new NBTOutputStream(new GZIPOutputStream(stream)); @@ -223,7 +201,7 @@ public class SchematicHandler { } return true; } - + /** * Gets the schematic of a plot * @@ -232,46 +210,38 @@ public class SchematicHandler { * * @return tag */ - public static CompoundTag getCompoundTag(final World world, PlotId id) { - if (!PlotMain.getPlots(world).containsKey(id)) { + public static CompoundTag getCompoundTag(final String world, final PlotId id) { + if (!PlotSquared.getPlots(world).containsKey(id)) { return null; } - - final Location pos1 = PlotHelper.getPlotBottomLoc(world, id).add(1, 0, 1); - final Location pos2 = PlotHelper.getPlotTopLoc(world, id); - + final Location pos1 = MainUtil.getPlotBottomLoc(world, id).add(1, 0, 1); + final Location pos2 = MainUtil.getPlotTopLoc(world, id); return getCompoundTag(world, pos1, pos2); } @SuppressWarnings("deprecation") - public static CompoundTag getCompoundTag(final World world, Location pos1, Location pos2) { - - - + public static CompoundTag getCompoundTag(final String world, final Location pos1, final Location pos2) { // loading chunks int i = 0; int j = 0; try { - for (i = (pos1.getBlockX() / 16) * 16; i < (16 + ((pos2.getBlockX() / 16) * 16)); i += 16) { - for (j = (pos1.getBlockZ() / 16) * 16; j < (16 + ((pos2.getBlockZ() / 16) * 16)); j += 16) { - final Chunk chunk = world.getChunkAt(i, j); + for (i = (pos1.getX() / 16) * 16; i < (16 + ((pos2.getX() / 16) * 16)); i += 16) { + for (j = (pos1.getZ() / 16) * 16; j < (16 + ((pos2.getZ() / 16) * 16)); j += 16) { + final Chunk chunk = BukkitUtil.getChunkAt(world, i, j); final boolean result = chunk.load(false); if (!result) { - // Plot is not even generated - return null; } } } } catch (final Exception e) { - PlotMain.sendConsoleSenderMessage("&7 - Cannot save: corrupt chunk at " + (i / 16) + ", " + (j / 16)); + PlotSquared.log("&7 - Cannot save: corrupt chunk at " + (i / 16) + ", " + (j / 16)); return null; } - final int width = (pos2.getBlockX() - pos1.getBlockX()) + 1; - final int height = pos2.getBlockY() - pos1.getBlockY() + 1; - final int length = (pos2.getBlockZ() - pos1.getBlockZ()) + 1; - + final int width = (pos2.getX() - pos1.getX()) + 1; + final int height = (pos2.getY() - pos1.getY()) + 1; + final int length = (pos2.getZ() - pos1.getZ()) + 1; final HashMap schematic = new HashMap<>(); schematic.put("Width", new ShortTag("Width", (short) width)); schematic.put("Length", new ShortTag("Length", (short) length)); @@ -286,36 +256,25 @@ public class SchematicHandler { final byte[] blocks = new byte[width * height * length]; byte[] addBlocks = null; final byte[] blockData = new byte[width * height * length]; - - int sx = pos1.getBlockX(); - int ex = pos2.getBlockX(); - - int sz = pos1.getBlockZ(); - int ez = pos2.getBlockZ(); - - int sy = pos1.getBlockY(); - int ey = pos2.getBlockY(); - + final int sx = pos1.getX(); + pos2.getX(); + final int sz = pos1.getZ(); + pos2.getZ(); + final int sy = pos1.getY(); + pos2.getY(); for (int x = 0; x < width; x++) { for (int z = 0; z < length; z++) { for (int y = 0; y < height; y++) { final int index = (y * width * length) + (z * width) + x; - - final Block block = world.getBlockAt(new Location(world, sx + x, sy + y, sz + z)); - - @SuppressWarnings("deprecation") final int id2 = block.getTypeId(); - - if (id2 > 255) { + final PlotBlock block = BukkitUtil.getBlock(new Location(world, sx + x, sy + y, sz + z)); + if (block.id > 255) { if (addBlocks == null) { addBlocks = new byte[(blocks.length >> 1) + 1]; } - - addBlocks[index >> 1] = (byte) (((index & 1) == 0) ? (addBlocks[index >> 1] & 0xF0) | ((id2 >> 8) & 0xF) : (addBlocks[index >> 1] & 0xF) | (((id2 >> 8) & 0xF) << 4)); + addBlocks[index >> 1] = (byte) (((index & 1) == 0) ? (addBlocks[index >> 1] & 0xF0) | ((block.id >> 8) & 0xF) : (addBlocks[index >> 1] & 0xF) | (((block.id >> 8) & 0xF) << 4)); } - - blocks[index] = (byte) id2; - blockData[index] = block.getData(); - + blocks[index] = (byte) block.id; + blockData[index] = block.data; // We need worldedit to save tileentity data or entities // - it uses NMS and CB internal code, which changes every // update @@ -326,40 +285,50 @@ public class SchematicHandler { schematic.put("Data", new ByteArrayTag("Data", blockData)); schematic.put("Entities", new ListTag("Entities", CompoundTag.class, new ArrayList())); schematic.put("TileEntities", new ListTag("TileEntities", CompoundTag.class, new ArrayList())); - if (addBlocks != null) { schematic.put("AddBlocks", new ByteArrayTag("AddBlocks", addBlocks)); } - return new CompoundTag("Schematic", schematic); } - - public static boolean pastePart(final World world, final DataCollection[] blocks, final Location l1, final int x_offset, final int z_offset, final int i1, final int i2, final int WIDTH, final int LENGTH) { - boolean result = false; + + public static boolean pastePart(final String world, final DataCollection[] blocks, final Location l1, final int x_offset, final int z_offset, final int i1, final int i2, final int WIDTH, final int LENGTH) { + int length = 0; for (int i = i1; i <= i2; i++) { - final short id = blocks[i].getBlock(); - final byte data = blocks[i].getData(); + if (blocks[i].block == 0) { + length++; + } + } + length = i2 - length; + final int[] xl = new int[length]; + final int[] yl = new int[length]; + final int[] zl = new int[length]; + final int[] ids = new int[length]; + final byte[] data = new byte[length]; + int count = 0; + for (int i = i1; i <= i2; i++) { + final short id = blocks[i].block; if (id == 0) { continue; } - + count++; final int area = WIDTH * LENGTH; final int r = i % (area); final int x = r % WIDTH; final int y = i / area; final int z = r / WIDTH; - + xl[count] = x; + yl[count] = y; + zl[count] = z; + ids[count] = id; + data[count] = blocks[i].data; if (y > 256) { break; } - final boolean set = PlotHelper.setBlock(world, l1.getBlockX() + x + x_offset, l1.getBlockY() + y, l1.getBlockZ() + z + z_offset, id, data); - if (!result && set) { - result = true; - } } - return result; + BlockManager.setBlocks(world, xl, yl, zl, ids, data); + return true; } - + /** * Schematic Class * @@ -369,26 +338,26 @@ public class SchematicHandler { private final DataCollection[] blockCollection; private final Dimension schematicDimension; private final File file; - + public Schematic(final DataCollection[] blockCollection, final Dimension schematicDimension, final File file) { this.blockCollection = blockCollection; this.schematicDimension = schematicDimension; this.file = file; } - + public File getFile() { return this.file; } - + public Dimension getSchematicDimension() { return this.schematicDimension; } - + public DataCollection[] getBlockCollection() { return this.blockCollection; } } - + /** * Schematic Dimensions * @@ -398,26 +367,26 @@ public class SchematicHandler { private final int x; private final int y; private final int z; - + public Dimension(final int x, final int y, final int z) { this.x = x; this.y = y; this.z = z; } - + public int getX() { return this.x; } - + public int getY() { return this.y; } - + public int getZ() { return this.z; } } - + /** * Schematic Data Collection * @@ -426,18 +395,17 @@ public class SchematicHandler { public static class DataCollection { private final short block; private final byte data; - + // public CompoundTag tag; - public DataCollection(final short block, final byte data) { this.block = block; this.data = data; } - + public short getBlock() { return this.block; } - + public byte getData() { return this.data; } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetupUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetupUtils.java new file mode 100644 index 000000000..06456b903 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetupUtils.java @@ -0,0 +1,20 @@ +package com.intellectualcrafters.plot.util; + +import java.util.HashMap; +import java.util.Map; + +import com.intellectualcrafters.plot.object.PlotGenerator; +import com.intellectualcrafters.plot.object.SetupObject; +import com.intellectualcrafters.plot.util.bukkit.BukkitSetupUtils; + +public abstract class SetupUtils { + + public static SetupUtils manager; + + public final static Map setupMap = new HashMap<>(); + public static HashMap generators = new HashMap<>(); + + public abstract void updateGenerators(); + + public abstract String setupWorld(final SetupObject object); +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/StringComparison.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/StringComparison.java index abd77cec1..d017796fd 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/StringComparison.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/StringComparison.java @@ -18,7 +18,6 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - package com.intellectualcrafters.plot.util; import java.util.ArrayList; @@ -29,25 +28,23 @@ import java.util.Collections; * * @author Citymonstret */ -@SuppressWarnings("unused") public class StringComparison { - +@SuppressWarnings("unused") +public class StringComparison { /** * Best Match */ private String bestMatch; - /** * Match Value *

* Can be checked for low match (< .25 or something) */ private double match = 0; - /** * The actual object */ private Object bestMatchObject; - + /** * Constructor * @@ -66,7 +63,7 @@ import java.util.Collections; } } } - + /** * Compare two strings * @@ -90,7 +87,7 @@ import java.util.Collections; } return (2.0 * intersection) / union; } - + /** * Create an ArrayList containing pairs of letters * @@ -107,7 +104,7 @@ import java.util.Collections; } return aPairs; } - + /** * Get an array containing letter pairs * @@ -123,7 +120,7 @@ import java.util.Collections; } return p; } - + /** * Get the object * @@ -132,7 +129,7 @@ import java.util.Collections; public Object getMatchObject() { return this.bestMatchObject; } - + /** * Get the best match value * @@ -141,14 +138,13 @@ import java.util.Collections; public String getBestMatch() { return this.bestMatch; } - + /** * Will return both the match number, and the actual match string * * @return object[] containing: double, String */ public Object[] getBestMatchAdvanced() { - return new Object[]{this.match, this.bestMatch}; + return new Object[] { this.match, this.bestMatch }; } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/TaskManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/TaskManager.java index 60640aa27..27b62fdf3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/TaskManager.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/TaskManager.java @@ -2,24 +2,55 @@ package com.intellectualcrafters.plot.util; import java.util.HashSet; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; -public class TaskManager { - +public abstract class TaskManager { public static HashSet TELEPORT_QUEUE = new HashSet<>(); - public static void runTaskAsync(final Runnable r) { - PlotMain.getMain().getServer().getScheduler().runTaskAsynchronously(PlotMain.getMain(), r); - } + public abstract int taskRepeat(final Runnable r, int interval); - public static void runTask(final Runnable r) { - PlotMain.getMain().getServer().getScheduler().runTask(PlotMain.getMain(), r); - } + public abstract int taskAsync(final Runnable r); - public static void runTaskLater(final Runnable r, int delay) { - if (r == null) { - return; + public abstract int task(final Runnable r); + + public abstract int taskLater(final Runnable r, int delay); + + public abstract int taskLaterAsync(final Runnable r, int delay); + + public abstract void cancelTask(int task); + + public static int runTaskRepeat(final Runnable r, final int interval) { + if (r != null) { + return PlotSquared.TASK.taskRepeat(r, interval); } - PlotMain.getMain().getServer().getScheduler().runTaskLater(PlotMain.getMain(), r, delay); + return -1; + } + + public static int runTaskAsync(final Runnable r) { + if (r != null) { + return PlotSquared.TASK.taskAsync(r); + } + return -1; + } + + public static int runTask(final Runnable r) { + if (r != null) { + return PlotSquared.TASK.task(r); + } + return -1; + } + + public static int runTaskLater(final Runnable r, final int delay) { + if (r != null) { + return PlotSquared.TASK.taskLater(r, delay); + } + return -1; + } + + public static int runTaskLaterAsync(final Runnable r, final int delay) { + if (r != null) { + return PlotSquared.TASK.taskLaterAsync(r, delay); + } + return -1; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitPlayerFunctions.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitPlayerFunctions.java new file mode 100644 index 000000000..7e789a4bc --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitPlayerFunctions.java @@ -0,0 +1,172 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// PlotSquared - A plot manager and world generator for the Bukkit API / +// Copyright (c) 2014 IntellectualSites/IntellectualCrafters / +// / +// This program is free software; you can redistribute it and/or modify / +// it under the terms of the GNU General Public License as published by / +// the Free Software Foundation; either version 3 of the License, or / +// (at your option) any later version. / +// / +// This program is distributed in the hope that it will be useful, / +// but WITHOUT ANY WARRANTY; without even the implied warranty of / +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / +// GNU General Public License for more details. / +// / +// You should have received a copy of the GNU General Public License / +// along with this program; if not, write to the Free Software Foundation, / +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA / +// / +// You can contact us via: support@intellectualsites.com / +//////////////////////////////////////////////////////////////////////////////////////////////////// +package com.intellectualcrafters.plot.util.bukkit; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import net.milkbowl.vault.economy.Economy; + +import org.bukkit.entity.Player; + +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotWorld; +import com.intellectualcrafters.plot.util.EconHandler; +import com.intellectualcrafters.plot.util.MainUtil; + +/** + * Functions involving players, plots and locations. + */ +public class BukkitPlayerFunctions { + + /* + * =========== NOTICE ================ + * - We will try to move as many functions as we can out of this class and into the MainUtil class + */ + + /** + * Clear a plot. Use null player if no player is present + * @param player + * @param world + * @param plot + * @param isDelete + */ + public static void clear(final Player player, final String world, final Plot plot, final boolean isDelete) { + final long start = System.currentTimeMillis(); + Runnable whenDone = new Runnable() { + @Override + public void run() { + if ((player != null) && player.isOnline()) { + MainUtil.sendMessage(BukkitUtil.getPlayer(player), C.CLEARING_DONE, "" + (System.currentTimeMillis() - start)); + } + } + }; + if (!MainUtil.clearAsPlayer(plot, isDelete, whenDone)) { + MainUtil.sendMessage(null, C.WAIT_FOR_TIMER); + } + } + + /** + * Merges all plots in the arraylist (with cost) + * + * @param plr + * @param world + * @param plotIds + * + * @return + */ + public static boolean mergePlots(final Player plr, final String world, final ArrayList plotIds) { + final PlotWorld plotworld = PlotSquared.getPlotWorld(world); + if ((PlotSquared.economy != null) && plotworld.USE_ECONOMY) { + final double cost = plotIds.size() * plotworld.MERGE_PRICE; + if (cost > 0d) { + final Economy economy = PlotSquared.economy; + if (economy.getBalance(plr) < cost) { + MainUtil.sendMessage(BukkitUtil.getPlayer(plr), C.CANNOT_AFFORD_MERGE, "" + cost); + return false; + } + EconHandler.withdrawPlayer(BukkitUtil.getPlayer(plr), cost); + MainUtil.sendMessage(BukkitUtil.getPlayer(plr), C.REMOVED_BALANCE, cost + ""); + } + } + return MainUtil.mergePlots(world, plotIds, true); + } + + public static String getPlayerName(final UUID uuid) { + if (uuid == null) { + return "unknown"; + } + final String name = UUIDHandler.getName(uuid); + if (name == null) { + return "unknown"; + } + return name; + } + + /** + * @param player player + * + * @return + */ + public static boolean isInPlot(final Player player) { + return getCurrentPlot(player) != null; + } + + public static ArrayList getMaxPlotSelectionIds(final String world, PlotId pos1, PlotId pos2) { + final Plot plot1 = PlotSquared.getPlots(world).get(pos1); + final Plot plot2 = PlotSquared.getPlots(world).get(pos2); + if (plot1 != null) { + pos1 = MainUtil.getBottomPlot(plot1).id; + } + if (plot2 != null) { + pos2 = MainUtil.getTopPlot(plot2).id; + } + final ArrayList myplots = new ArrayList<>(); + for (int x = pos1.x; x <= pos2.x; x++) { + for (int y = pos1.y; y <= pos2.y; y++) { + myplots.add(new PlotId(x, y)); + } + } + return myplots; + } + + /** + * Returns the plot a player is currently in. + * + * @param player + * + * @return + */ + public static Plot getCurrentPlot(final Player player) { + if (!PlotSquared.isPlotWorld(player.getWorld().getName())) { + return null; + } + final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(player)); + final String world = player.getWorld().getName(); + if (id == null) { + return null; + } + if (PlotSquared.getPlots(world).containsKey(id)) { + return PlotSquared.getPlots(world).get(id); + } + return new Plot(id, null, new ArrayList(), new ArrayList(), world); + } + + /** + * Get the plots for a player + * + * @param plr + * + * @return + */ + public static Set getPlayerPlots(final String world, final Player plr) { + final Set p = PlotSquared.getPlots(world, plr.getName()); + if (p == null) { + return new HashSet<>(); + } + return p; + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java new file mode 100644 index 000000000..f4f1d7bf7 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitSetupUtils.java @@ -0,0 +1,88 @@ +package com.intellectualcrafters.plot.util.bukkit; + +import java.io.IOException; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.WorldCreator; +import org.bukkit.generator.ChunkGenerator; +import org.bukkit.plugin.Plugin; + +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.config.ConfigurationNode; +import com.intellectualcrafters.plot.generator.SquarePlotManager; +import com.intellectualcrafters.plot.object.PlotGenerator; +import com.intellectualcrafters.plot.object.SetupObject; +import com.intellectualcrafters.plot.util.SetupUtils; + +public class BukkitSetupUtils extends SetupUtils { + + @Override + public void updateGenerators() { + if (SetupUtils.generators.size() > 0) { + return; + } + final String testWorld = "CheckingPlotSquaredGenerator"; + for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) { + if (plugin.isEnabled()) { + final ChunkGenerator generator = plugin.getDefaultWorldGenerator(testWorld, ""); + if (generator != null) { + PlotSquared.removePlotWorld(testWorld); + final String name = plugin.getDescription().getName(); + if (generator instanceof PlotGenerator) { + final PlotGenerator pgen = (PlotGenerator) generator; + if (pgen.getPlotManager() instanceof SquarePlotManager) { + SetupUtils.generators.put(name, pgen); + } + } + } + } + } + } + + @Override + public String setupWorld(final SetupObject object) { + final ConfigurationNode[] steps = object.step; + final String world = object.world; + for (final ConfigurationNode step : steps) { + PlotSquared.config.set("worlds." + world + "." + step.getConstant(), step.getValue()); + } + if (object.type != 0) { + PlotSquared.config.set("worlds." + world + "." + "generator.type", object.type); + PlotSquared.config.set("worlds." + world + "." + "generator.terrain", object.terrain); + PlotSquared.config.set("worlds." + world + "." + "generator.plugin", object.generator); + } + try { + PlotSquared.config.save(PlotSquared.configFile); + } catch (final IOException e) { + e.printStackTrace(); + } + if (object.type == 0) { + 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.generator); + } else { + if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world + " plugin:" + object.generator); + } else { + final WorldCreator wc = new WorldCreator(object.world); + wc.generator(object.generator); + wc.environment(Environment.NORMAL); + Bukkit.createWorld(wc); + } + } + } else { + if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv create " + world + " normal"); + } else { + if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) { + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + world); + } else { + Bukkit.createWorld(new WorldCreator(object.world).environment(World.Environment.NORMAL)); + } + } + } + return object.world; + } + +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitTaskManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitTaskManager.java new file mode 100644 index 000000000..f4125b702 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitTaskManager.java @@ -0,0 +1,40 @@ +package com.intellectualcrafters.plot.util.bukkit; + +import org.bukkit.Bukkit; + +import com.intellectualcrafters.plot.BukkitMain; +import com.intellectualcrafters.plot.util.TaskManager; + +public class BukkitTaskManager extends TaskManager { + @Override + public int taskRepeat(final Runnable r, final int interval) { + return BukkitMain.THIS.getServer().getScheduler().scheduleSyncRepeatingTask(BukkitMain.THIS, r, interval, interval); + } + + @Override + public int taskAsync(final Runnable r) { + return BukkitMain.THIS.getServer().getScheduler().runTaskAsynchronously(BukkitMain.THIS, r).getTaskId(); + } + + @Override + public int task(final Runnable r) { + return BukkitMain.THIS.getServer().getScheduler().runTask(BukkitMain.THIS, r).getTaskId(); + } + + @Override + public int taskLater(final Runnable r, final int delay) { + return BukkitMain.THIS.getServer().getScheduler().runTaskLater(BukkitMain.THIS, r, delay).getTaskId(); + } + + @Override + public int taskLaterAsync(final Runnable r, final int delay) { + return BukkitMain.THIS.getServer().getScheduler().runTaskLaterAsynchronously(BukkitMain.THIS, r, delay).getTaskId(); + } + + @Override + public void cancelTask(int task) { + if (task != -1) { + Bukkit.getScheduler().cancelTask(task); + } + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java new file mode 100644 index 000000000..08e7c6fc1 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/BukkitUtil.java @@ -0,0 +1,254 @@ +package com.intellectualcrafters.plot.util.bukkit; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Biome; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.PlotBlock; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.BlockManager; + +public class BukkitUtil extends BlockManager { + private static HashMap worlds = new HashMap<>(); + private static String lastString = null; + private static World lastWorld = null; + + private static Player lastPlayer = null; + private static PlotPlayer lastPlotPlayer = null; + + public static void removePlayer(String plr) { + if (lastPlayer != null && lastPlayer.getName().equals(plr)) { + lastPlayer = null; + lastPlotPlayer = null; + } + UUIDHandler.players.remove(plr); + } + + @Override + public boolean isWorld(String world) { + return getWorld(world) != null; + } + + public static PlotPlayer getPlayer(Player player) { + if (player == lastPlayer) { + return lastPlotPlayer; + } + lastPlotPlayer = new BukkitPlayer(player); + UUIDHandler.players.put(lastPlotPlayer.getName(), lastPlotPlayer); + lastPlayer = player; + return lastPlotPlayer; + } + + @Override + public String getBiome(final Location loc) { + return getWorld(loc.getWorld()).getBiome(loc.getX(), loc.getZ()).name(); + } + + public static Location getLocation(org.bukkit.Location loc) { + return new Location(loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + } + + public static World getWorld(final String string) { + if (string == lastString) { + return lastWorld; + } + World world = worlds.get(string); + if (world == null) { + world = Bukkit.getWorld(string); + worlds.put(string, world); + } + return world; + } + + public static int getMaxHeight(final String world) { + return getWorld(world).getMaxHeight(); + } + + public static int getHeighestBlock(final String world, final int x, final int z) { + return getWorld(world).getHighestBlockYAt(x, z); + } + + public static Chunk getChunkAt(final String worldname, final int x, final int z) { + final World world = getWorld(worldname); + return world.getChunkAt(x, z); + } + + public static void update(final String world, final int x, final int z) { + final ArrayList chunks = new ArrayList<>(); + final int distance = Bukkit.getViewDistance(); + for (int cx = -distance; cx < distance; cx++) { + for (int cz = -distance; cz < distance; cz++) { + final Chunk chunk = getChunkAt(world, (x >> 4) + cx, (z >> 4) + cz); + chunks.add(chunk); + } + } + SetBlockManager.setBlockManager.update(chunks); + } + + public static String getWorld(final Entity entity) { + return entity.getWorld().getName(); + } + + public static void teleportPlayer(final Player player, final Location loc) { + final org.bukkit.Location bukkitLoc = new org.bukkit.Location(getWorld(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ()); + player.teleport(bukkitLoc); + } + + public static List getEntities(final String worldname) { + return getWorld(worldname).getEntities(); + } + + public static void setBlock(final World world, final int x, final int y, final int z, final int id, final byte data) { + try { + SetBlockManager.setBlockManager.set(world, x, y, z, id, data); + } catch (final Throwable e) { + SetBlockManager.setBlockManager = new SetBlockSlow(); + SetBlockManager.setBlockManager.set(world, x, y, z, id, data); + } + } + + public static void setBiome(final String worldname, final int pos1_x, final int pos1_z, final int pos2_x, final int pos2_z, final String biome) { + final Biome b = Biome.valueOf(biome.toUpperCase()); + final World world = getWorld(worldname); + for (int x = pos1_x; x <= pos2_x; x++) { + for (int z = pos1_z; z <= pos2_z; z++) { + final Block blk = world.getBlockAt(x, 0, z); + final Biome c = blk.getBiome(); + if (c.equals(b)) { + x += 15; + continue; + } + blk.setBiome(b); + } + } + } + + public static void refreshChunk(final String world, final int x, final int z) { + getWorld(world).refreshChunk(x, z); + } + + public static void regenerateChunk(final String world, final int x, final int z) { + getWorld(world).regenerateChunk(x, z); + } + + public static PlotBlock getBlock(final Location loc) { + final World world = getWorld(loc.getWorld()); + final Block block = world.getBlockAt(loc.getX(), loc.getY(), loc.getZ()); + if (block == null) { + return new PlotBlock((short) 0, (byte) 0); + } + return new PlotBlock((short) block.getTypeId(), block.getData()); + } + + public static Location getLocation(final Entity entity) { + final org.bukkit.Location loc = entity.getLocation(); + final String world = loc.getWorld().getName(); + return new Location(world, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + } + + @Override + public void functionSetBlocks(final String worldname, final int[] x, final int[] y, final int[] z, final int[] id, final byte[] data) { + final World world = getWorld(worldname); + for (int i = 0; i < x.length; i++) { + BukkitUtil.setBlock(world, x[i], y[i], z[i], id[i], data[i]); + } + } + + @Override + public void functionSetSign(final String worldname, final int x, final int y, final int z, final String[] lines) { + final World world = getWorld(worldname); + final Block block = world.getBlockAt(x, y, z); + block.setType(Material.AIR); + block.setTypeIdAndData(Material.WALL_SIGN.getId(), (byte) 2, false); + final BlockState blockstate = block.getState(); + if ((blockstate instanceof Sign)) { + for (int i = 0; i < lines.length; i++) { + ((Sign) blockstate).setLine(i, lines[i]); + } + ((Sign) blockstate).update(true); + } + } + + public static int getViewDistance() { + return Bukkit.getViewDistance(); + } + + @Override + public void functionSetBiomes(String worldname, int[] x, int[] z, int[] biome) { + World world = getWorld(worldname); + Biome[] biomes = Biome.values(); + for (int i = 0; i < x.length; i++) { + world.setBiome(x[i], z[i], biomes[biome[i]]); + } + } + + @Override + public void functionSetBlock(String worldname, int x, int y, int z, int id, byte data) { + BukkitUtil.setBlock(getWorld(worldname), x, y, z, id, data); + } + + @Override + public String[] getSign(Location loc) { + Block block = getWorld(loc.getWorld()).getBlockAt(loc.getX(), loc.getY(), loc.getZ()); + if (block != null) { + if (block.getState() instanceof Sign) { + final Sign sign = (Sign) block.getState(); + return sign.getLines(); + } + } + return null; + } + + @Override + public Location getSpawn(String world) { + org.bukkit.Location temp = getWorld(world).getSpawnLocation(); + return new Location(world, temp.getBlockX(), temp.getBlockY(), temp.getBlockZ()); + } + + @Override + public int getHeighestBlock(Location loc) { + return getWorld(loc.getWorld()).getHighestBlockAt(loc.getX(), loc.getZ()).getY(); + } + + @Override + public int getBiomeFromString(String biomeStr) { + Biome biome = Biome.valueOf(biomeStr.toUpperCase()); + if (biome == null) { + return -1; + } + return Arrays.asList(Biome.values()).indexOf(biome); + } + + @Override + public String[] getBiomeList() { + Biome[] biomes = Biome.values(); + String[] list = new String[biomes.length]; + for (int i = 0; i< biomes.length; i++) { + list[i] = biomes[i].name(); + } + return list; + } + + @Override + public int getBlockIdFromString(String block) { + Material material = Material.valueOf(block.toUpperCase()); + if (material == null) { + return -1; + } + return material.getId(); + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/ChunkManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/ChunkManager.java new file mode 100644 index 000000000..e486e57f8 --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/ChunkManager.java @@ -0,0 +1,768 @@ +package com.intellectualcrafters.plot.util.bukkit; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import org.apache.commons.lang.mutable.MutableInt; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.Note; +import org.bukkit.SkullType; +import org.bukkit.World; +import org.bukkit.block.Banner; +import org.bukkit.block.Beacon; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.BrewingStand; +import org.bukkit.block.Chest; +import org.bukkit.block.CommandBlock; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.Dispenser; +import org.bukkit.block.Dropper; +import org.bukkit.block.Furnace; +import org.bukkit.block.Hopper; +import org.bukkit.block.Jukebox; +import org.bukkit.block.NoteBlock; +import org.bukkit.block.Sign; +import org.bukkit.block.Skull; +import org.bukkit.block.banner.Pattern; +import org.bukkit.block.banner.PatternType; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; + +import com.intellectualcrafters.plot.BukkitMain; +import com.intellectualcrafters.plot.PlotSquared; +import com.intellectualcrafters.plot.listeners.PlotListener; +import com.intellectualcrafters.plot.object.BlockLoc; +import com.intellectualcrafters.plot.object.ChunkLoc; +import com.intellectualcrafters.plot.object.Location; +import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.RegionWrapper; +import com.intellectualcrafters.plot.object.entity.EntityWrapper; +import com.intellectualcrafters.plot.util.AChunkManager; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.TaskManager; + +public class ChunkManager extends AChunkManager { + public static MutableInt index = new MutableInt(0); + public static HashMap tasks = new HashMap<>(); + + @Override + public ArrayList getChunkChunks(final String world) { + final String directory = new File(".").getAbsolutePath() + File.separator + world + File.separator + "region"; + final File folder = new File(directory); + final File[] regionFiles = folder.listFiles(); + final ArrayList chunks = new ArrayList<>(); + for (final File file : regionFiles) { + final String name = file.getName(); + if (name.endsWith("mca")) { + final String[] split = name.split("\\."); + try { + final int x = Integer.parseInt(split[1]); + final int z = Integer.parseInt(split[2]); + final ChunkLoc loc = new ChunkLoc(x, z); + chunks.add(loc); + } catch (final Exception e) { + } + } + } + for (final Chunk chunk : Bukkit.getWorld(world).getLoadedChunks()) { + final ChunkLoc loc = new ChunkLoc(chunk.getX() >> 5, chunk.getZ() >> 5); + if (!chunks.contains(loc)) { + chunks.add(loc); + } + } + return chunks; + } + + @Override + public void deleteRegionFile(final String world, final ChunkLoc loc) { + TaskManager.runTaskAsync(new Runnable() { + @Override + public void run() { + final String directory = world + File.separator + "region" + File.separator + "r." + loc.x + "." + loc.z + ".mca"; + final File file = new File(directory); + PlotSquared.log("&6 - Deleting file: " + file.getName() + " (max 1024 chunks)"); + if (file.exists()) { + file.delete(); + } + } + }); + } + + @Override + public Plot hasPlot(final String world, final ChunkLoc chunk) { + final int x1 = chunk.x << 4; + final int z1 = chunk.z << 4; + final int x2 = x1 + 15; + final int z2 = z1 + 15; + final Location bot = new Location(world, x1, 0, z1); + Plot plot; + plot = MainUtil.getPlot(bot); + if ((plot != null) && (plot.owner != null)) { + return plot; + } + final Location top = new Location(world, x2, 0, z2); + plot = MainUtil.getPlot(top); + if ((plot != null) && (plot.owner != null)) { + return plot; + } + return null; + } + + private static HashMap chestContents; + private static HashMap furnaceContents; + private static HashMap dispenserContents; + private static HashMap dropperContents; + private static HashMap brewingStandContents; + private static HashMap beaconContents; + private static HashMap hopperContents; + private static HashMap furnaceTime; + private static HashMap skullData; + private static HashMap jukeDisc; + private static HashMap brewTime; + private static HashMap spawnerData; + private static HashMap cmdData; + private static HashMap signContents; + private static HashMap noteBlockContents; + private static HashMap> bannerColors; + private static HashMap bannerBase; + private static HashSet entities; + + /** + * Copy a region to a new location (in the same world) + */ + @Override + public boolean copyRegion(final Location pos1, final Location pos2, final Location newPos, final Runnable whenDone) { + index.increment(); + final int relX = newPos.getX() - pos1.getX(); + final int relZ = newPos.getZ() - pos1.getZ(); + final RegionWrapper region = new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); + final World world = Bukkit.getWorld(pos1.getWorld()); + final Chunk c1 = world.getChunkAt(pos1.getX(), pos1.getZ()); + final Chunk c2 = world.getChunkAt(pos2.getX(), pos2.getZ()); + final Chunk c3 = world.getChunkAt((pos1.getX() + relX), (pos1.getZ() + relZ)); + final Chunk c4 = world.getChunkAt((pos2.getX() + relX), (pos2.getZ() + relZ)); + final int sx = pos1.getX(); + final int sz = pos1.getZ(); + final int ex = pos2.getX(); + final int ez = pos2.getZ(); + final int c1x = c1.getX(); + final int c1z = c1.getZ(); + final int c2x = c2.getX(); + final int c2z = c2.getZ(); + final int c3x = c3.getX(); + final int c3z = c3.getZ(); + final int c4x = c4.getX(); + final int c4z = c4.getZ(); + final ArrayList chunks = new ArrayList<>(); + final ArrayList toGenerate = new ArrayList<>(); + // Load chunks + for (int x = c1x; x <= c2x; x++) { + for (int z = c1z; z <= c2z; z++) { + final Chunk chunk = world.getChunkAt(x << 4, z << 4); + toGenerate.add(chunk); + } + } + final Plugin plugin = BukkitMain.THIS; + final Integer currentIndex = index.toInteger(); + final int loadTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + @Override + public void run() { + final long start = System.currentTimeMillis(); + while ((System.currentTimeMillis() - start) < 25) { + if (toGenerate.size() == 0) { + Bukkit.getScheduler().cancelTask(tasks.get(currentIndex)); + tasks.remove(currentIndex); + TaskManager.runTask(new Runnable() { + @Override + public void run() { + index.increment(); + // Copy entities + initMaps(); + for (int x = c3x; x <= c4x; x++) { + for (int z = c3z; z <= c4z; z++) { + final Chunk chunk = world.getChunkAt(x, z); + chunks.add(chunk); + chunk.load(false); + saveEntitiesIn(chunk, region); + restoreEntities(world, relX, relZ); + } + } + // Copy blocks + final MutableInt mx = new MutableInt(sx); + final Integer currentIndex = index.toInteger(); + final int maxY = world.getMaxHeight(); + final Integer task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + @Override + public void run() { + final long start = System.currentTimeMillis(); + while ((System.currentTimeMillis() - start) < 25) { + final int x = mx.intValue(); + for (int z = sz; z <= ez; z++) { + saveBlocks(world, maxY, x, z); + for (int y = 1; y <= maxY; y++) { + final Block block = world.getBlockAt(x, y, z); + final int id = block.getTypeId(); + final byte data = block.getData(); + SetBlockManager.setBlockManager.set(world, x + relX, y, z + relZ, id, data); + } + } + mx.increment(); + if (x == ex) { // done! + restoreBlocks(world, relX, relZ); + SetBlockManager.setBlockManager.update(chunks); + for (final Chunk chunk : chunks) { + chunk.unload(true, true); + } + TaskManager.runTaskLater(whenDone, 1); + Bukkit.getScheduler().cancelTask(tasks.get(currentIndex)); + tasks.remove(currentIndex); + return; + } + } + }; + }, 1, 1); + tasks.put(currentIndex, task); + } + }); + return; + } + final Chunk chunk = toGenerate.get(0); + toGenerate.remove(0); + chunk.load(true); + chunks.add(chunk); + } + } + }, 1l, 1l); + tasks.put(currentIndex, loadTask); + return true; + } + + @Override + public boolean regenerateRegion(final Location pos1, final Location pos2, final Runnable whenDone) { + index.increment(); + final Plugin plugin = BukkitMain.THIS; + final World world = Bukkit.getWorld(pos1.getWorld()); + final Chunk c1 = world.getChunkAt(pos1.getX(), pos1.getZ()); + final Chunk c2 = world.getChunkAt(pos2.getX(), pos2.getZ()); + final int sx = pos1.getX(); + final int sz = pos1.getZ(); + final int ex = pos2.getX(); + final int ez = pos2.getZ(); + final int c1x = c1.getX(); + final int c1z = c1.getZ(); + final int c2x = c2.getX(); + final int c2z = c2.getZ(); + final ArrayList chunks = new ArrayList(); + for (int x = c1x; x <= c2x; x++) { + for (int z = c1z; z <= c2z; z++) { + final Chunk chunk = world.getChunkAt(x, z); + chunk.load(false); + chunks.add(chunk); + } + } + final int maxY = world.getMaxHeight(); + final Integer currentIndex = index.toInteger(); + final Integer task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + @Override + public void run() { + if (chunks.size() == 0) { + TaskManager.runTaskLater(whenDone, 1); + Bukkit.getScheduler().cancelTask(tasks.get(currentIndex)); + tasks.remove(currentIndex); + return; + } + CURRENT_PLOT_CLEAR = new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); + final Chunk chunk = chunks.get(0); + chunks.remove(0); + final int x = chunk.getX(); + final int z = chunk.getZ(); + boolean loaded = true; + if (!chunk.isLoaded()) { + final boolean result = chunk.load(false); + if (!result) { + loaded = false; + ; + } + if (!chunk.isLoaded()) { + loaded = false; + } + } + if (loaded) { + initMaps(); + final int absX = x << 4; + final int absZ = z << 4; + boolean save = false; + if ((x == c1x) || (z == c1z)) { + save = true; + for (int X = 0; X < 16; X++) { + for (int Z = 0; Z < 16; Z++) { + if ((((X + absX) < sx) || ((Z + absZ) < sz)) || (((X + absX) > ex) || ((Z + absZ) > ez))) { + saveBlocks(world, maxY, X + absX, Z + absZ); + } + } + } + } else if ((x == c2x) || (z == c2z)) { + for (int X = 0; X < 16; X++) { + save = true; + for (int Z = 0; Z < 16; Z++) { + if ((((X + absX) > ex) || ((Z + absZ) > ez)) || (((X + absX) < sx) || ((Z + absZ) < sz))) { + saveBlocks(world, maxY, X + absX, Z + absZ); + } + } + } + } + if (save) { + saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR); + } + world.regenerateChunk(x, z); + if (save) { + restoreBlocks(world, 0, 0); + restoreEntities(world, 0, 0); + } + chunk.unload(true, true); + SetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); + } + CURRENT_PLOT_CLEAR = null; + } + }, 1, 1); + tasks.put(currentIndex, task); + return true; + } + + public static void initMaps() { + GENERATE_BLOCKS = new HashMap<>(); + GENERATE_DATA = new HashMap<>(); + chestContents = new HashMap<>(); + furnaceContents = new HashMap<>(); + dispenserContents = new HashMap<>(); + dropperContents = new HashMap<>(); + brewingStandContents = new HashMap<>(); + beaconContents = new HashMap<>(); + hopperContents = new HashMap<>(); + furnaceTime = new HashMap<>(); + skullData = new HashMap<>(); + brewTime = new HashMap<>(); + jukeDisc = new HashMap<>(); + spawnerData = new HashMap<>(); + noteBlockContents = new HashMap<>(); + signContents = new HashMap<>(); + cmdData = new HashMap<>(); + bannerBase = new HashMap<>(); + bannerColors = new HashMap<>(); + entities = new HashSet<>(); + } + + public static boolean isIn(final RegionWrapper region, final int x, final int z) { + return ((x >= region.minX) && (x <= region.maxX) && (z >= region.minZ) && (z <= region.maxZ)); + } + + public static void saveEntitiesOut(final Chunk chunk, final RegionWrapper region) { + for (final Entity entity : chunk.getEntities()) { + final Location loc = BukkitUtil.getLocation(entity); + final int x = loc.getX(); + final int z = loc.getZ(); + if (isIn(region, x, z)) { + continue; + } + if (entity.getVehicle() != null) { + continue; + } + final EntityWrapper wrap = new EntityWrapper(entity, (short) 2); + entities.add(wrap); + } + } + + public static void saveEntitiesIn(final Chunk chunk, final RegionWrapper region) { + for (final Entity entity : chunk.getEntities()) { + final Location loc = BukkitUtil.getLocation(entity); + final int x = loc.getX(); + final int z = loc.getZ(); + if (!isIn(region, x, z)) { + continue; + } + if (entity.getVehicle() != null) { + continue; + } + final EntityWrapper wrap = new EntityWrapper(entity, (short) 2); + entities.add(wrap); + } + } + + public static void restoreEntities(final World world, final int x_offset, final int z_offset) { + for (final EntityWrapper entity : entities) { + try { + entity.spawn(world, x_offset, z_offset); + } catch (final Exception e) { + System.out.print("Failed to restore entity " + entity.x + "," + entity.y + "," + entity.z + " : " + entity.id + " : " + EntityType.fromId(entity.id)); + e.printStackTrace(); + } + } + } + + public static void restoreBlocks(final World world, final int x_offset, final int z_offset) { + for (final BlockLoc loc : chestContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Chest) { + final Chest chest = (Chest) state; + chest.getInventory().setContents(chestContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate chest: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : signContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Sign) { + final Sign sign = (Sign) state; + int i = 0; + for (final String line : signContents.get(loc)) { + sign.setLine(i, line); + i++; + } + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate sign: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : dispenserContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Dispenser) { + ((Dispenser) (state)).getInventory().setContents(dispenserContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate dispenser: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : dropperContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Dropper) { + ((Dropper) (state)).getInventory().setContents(dropperContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate dispenser: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : beaconContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Beacon) { + ((Beacon) (state)).getInventory().setContents(beaconContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate beacon: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : jukeDisc.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Jukebox) { + ((Jukebox) (state)).setPlaying(Material.getMaterial(jukeDisc.get(loc))); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to restore jukebox: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : skullData.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Skull) { + final Object[] data = skullData.get(loc); + if (data[0] != null) { + ((Skull) (state)).setOwner((String) data[0]); + } + if (((Integer) data[1]) != 0) { + ((Skull) (state)).setRotation(BlockFace.values()[(int) data[1]]); + } + if (((Integer) data[2]) != 0) { + ((Skull) (state)).setSkullType(SkullType.values()[(int) data[2]]); + } + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to restore jukebox: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : hopperContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Hopper) { + ((Hopper) (state)).getInventory().setContents(hopperContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate hopper: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : noteBlockContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof NoteBlock) { + ((NoteBlock) (state)).setNote(noteBlockContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate note block: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : brewTime.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof BrewingStand) { + ((BrewingStand) (state)).setBrewingTime(brewTime.get(loc)); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to restore brewing stand cooking: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : spawnerData.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof CreatureSpawner) { + ((CreatureSpawner) (state)).setCreatureTypeId(spawnerData.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to restore spawner type: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : cmdData.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof CommandBlock) { + ((CommandBlock) (state)).setCommand(cmdData.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to restore command block: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : brewingStandContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof BrewingStand) { + ((BrewingStand) (state)).getInventory().setContents(brewingStandContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate brewing stand: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : furnaceTime.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Furnace) { + final Short[] time = furnaceTime.get(loc); + ((Furnace) (state)).setBurnTime(time[0]); + ((Furnace) (state)).setCookTime(time[1]); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to restore furnace cooking: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : furnaceContents.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Furnace) { + ((Furnace) (state)).getInventory().setContents(furnaceContents.get(loc)); + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate furnace: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + for (final BlockLoc loc : bannerBase.keySet()) { + final Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset); + final BlockState state = block.getState(); + if (state instanceof Banner) { + final Banner banner = (Banner) state; + final byte base = bannerBase.get(loc); + final ArrayList colors = bannerColors.get(loc); + banner.setBaseColor(DyeColor.values()[base]); + for (final Byte[] color : colors) { + banner.addPattern(new Pattern(DyeColor.getByDyeData(color[1]), PatternType.values()[color[0]])); + } + state.update(true); + } else { + PlotSquared.log("&c[WARN] Plot clear failed to regenerate banner: " + loc.x + x_offset + "," + loc.y + "," + loc.z + z_offset); + } + } + } + + public static void saveBlocks(final World world, final int maxY, final int x, final int z) { + final HashMap ids = new HashMap<>(); + final HashMap datas = new HashMap<>(); + for (short y = 1; y < maxY; y++) { + final Block block = world.getBlockAt(x, y, z); + final short id = (short) block.getTypeId(); + if (id != 0) { + ids.put(y, id); + final byte data = block.getData(); + if (data != 0) { + datas.put(y, data); + } + BlockLoc bl; + switch (id) { + case 54: + bl = new BlockLoc(x, y, z); + final InventoryHolder chest = (InventoryHolder) block.getState(); + final ItemStack[] inventory = chest.getInventory().getContents().clone(); + chestContents.put(bl, inventory); + break; + case 52: + bl = new BlockLoc(x, y, z); + final CreatureSpawner spawner = (CreatureSpawner) block.getState(); + final String type = spawner.getCreatureTypeId(); + if ((type != null) && (type.length() != 0)) { + spawnerData.put(bl, type); + } + break; + case 137: + bl = new BlockLoc(x, y, z); + final CommandBlock cmd = (CommandBlock) block.getState(); + final String string = cmd.getCommand(); + if ((string != null) && (string.length() > 0)) { + cmdData.put(bl, string); + } + break; + case 63: + case 68: + case 323: + bl = new BlockLoc(x, y, z); + final Sign sign = (Sign) block.getState(); + sign.getLines(); + signContents.put(bl, sign.getLines().clone()); + break; + case 61: + case 62: + bl = new BlockLoc(x, y, z); + final Furnace furnace = (Furnace) block.getState(); + final short burn = furnace.getBurnTime(); + final short cook = furnace.getCookTime(); + final ItemStack[] invFur = furnace.getInventory().getContents().clone(); + furnaceContents.put(bl, invFur); + if (cook != 0) { + furnaceTime.put(bl, new Short[] { burn, cook }); + } + break; + case 23: + bl = new BlockLoc(x, y, z); + final Dispenser dispenser = (Dispenser) block.getState(); + final ItemStack[] invDis = dispenser.getInventory().getContents().clone(); + dispenserContents.put(bl, invDis); + break; + case 158: + bl = new BlockLoc(x, y, z); + final Dropper dropper = (Dropper) block.getState(); + final ItemStack[] invDro = dropper.getInventory().getContents().clone(); + dropperContents.put(bl, invDro); + break; + case 117: + bl = new BlockLoc(x, y, z); + final BrewingStand brewingStand = (BrewingStand) block.getState(); + final short time = (short) brewingStand.getBrewingTime(); + if (time > 0) { + brewTime.put(bl, time); + } + final ItemStack[] invBre = brewingStand.getInventory().getContents().clone(); + brewingStandContents.put(bl, invBre); + break; + case 25: + bl = new BlockLoc(x, y, z); + final NoteBlock noteBlock = (NoteBlock) block.getState(); + final Note note = noteBlock.getNote(); + noteBlockContents.put(bl, note); + break; + case 138: + bl = new BlockLoc(x, y, z); + final Beacon beacon = (Beacon) block.getState(); + final ItemStack[] invBea = beacon.getInventory().getContents().clone(); + beaconContents.put(bl, invBea); + break; + case 84: + bl = new BlockLoc(x, y, z); + final Jukebox jukebox = (Jukebox) block.getState(); + final Material playing = jukebox.getPlaying(); + if (playing != null) { + jukeDisc.put(bl, (short) playing.getId()); + } + break; + case 154: + bl = new BlockLoc(x, y, z); + final Hopper hopper = (Hopper) block.getState(); + final ItemStack[] invHop = hopper.getInventory().getContents().clone(); + hopperContents.put(bl, invHop); + break; + case 397: + bl = new BlockLoc(x, y, z); + final Skull skull = (Skull) block.getState(); + final String o = skull.getOwner(); + final byte skulltype = getOrdinal(SkullType.values(), skull.getSkullType()); + skull.getRotation(); + final short rot = getOrdinal(BlockFace.values(), skull.getRotation()); + skullData.put(bl, new Object[] { o, rot, skulltype }); + break; + case 176: + case 177: + bl = new BlockLoc(x, y, z); + final Banner banner = (Banner) block.getState(); + final byte base = getOrdinal(DyeColor.values(), banner.getBaseColor()); + final ArrayList types = new ArrayList<>(); + for (final Pattern pattern : banner.getPatterns()) { + types.add(new Byte[] { getOrdinal(PatternType.values(), pattern.getPattern()), pattern.getColor().getDyeData() }); + } + bannerBase.put(bl, base); + bannerColors.put(bl, types); + break; + } + } + } + final ChunkLoc loc = new ChunkLoc(x, z); + GENERATE_BLOCKS.put(loc, ids); + GENERATE_DATA.put(loc, datas); + } + + private static byte getOrdinal(final Object[] list, final Object value) { + for (byte i = 0; i < list.length; i++) { + if (list[i].equals(value)) { + return i; + } + } + return 0; + } + + @Override + public void clearAllEntities(final Plot plot) { + final List entities = BukkitUtil.getEntities(plot.world); + for (final Entity entity : entities) { + final PlotId id = MainUtil.getPlotId(BukkitUtil.getLocation(entity)); + if (plot.id.equals(id)) { + if (entity instanceof Player) { + final Player player = (Player) entity; + MainUtil.teleportPlayer(BukkitUtil.getPlayer(player), BukkitUtil.getLocation(entity), plot); + PlotListener.plotExit(player, plot); + } else { + entity.remove(); + } + } + } + } + + @Override + public boolean loadChunk(String world, ChunkLoc loc) { + return BukkitUtil.getWorld(world).getChunkAt(loc.x << 4, loc.z << 4).load(false); + } + + @Override + public void swap(String world, PlotId id, PlotId plotid) { + // FIXME swap plots + } +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Metrics.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/Metrics.java similarity index 98% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Metrics.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/Metrics.java index d4af7d53e..a9f852c4a 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/Metrics.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/Metrics.java @@ -18,8 +18,7 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.util; +package com.intellectualcrafters.plot.util.bukkit; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; @@ -99,7 +98,7 @@ public class Metrics { * The scheduled task */ private volatile BukkitTask task = null; - + public Metrics(final Plugin plugin) throws IOException { if (plugin == null) { throw new IllegalArgumentException("Plugin cannot be null"); @@ -121,7 +120,7 @@ public class Metrics { this.guid = this.configuration.getString("guid"); this.debug = this.configuration.getBoolean("debug", false); } - + /** * GZip compress a string of bytes * @@ -147,7 +146,7 @@ public class Metrics { } return baos.toByteArray(); } - + /** * Appends a json encoded key/value pair to the given string builder. * @@ -178,7 +177,7 @@ public class Metrics { json.append(escapeJSON(value)); } } - + /** * Escape a string to create a valid JSON string * @@ -222,7 +221,7 @@ public class Metrics { builder.append('"'); return builder.toString(); } - + /** * Encode text as UTF-8 * @@ -233,7 +232,7 @@ public class Metrics { private static String urlEncode(final String text) throws UnsupportedEncodingException { return URLEncoder.encode(text, "UTF-8"); } - + /** * Construct and create a Graph that can be used to separate specific plotters to their own graphs on the metrics * website. Plotters can be added to the graph object returned. @@ -253,7 +252,7 @@ public class Metrics { // and return back return graph; } - + /** * Add a Graph object to BukkitMetrics that represents data for the plugin that should be sent to the backend * @@ -265,7 +264,7 @@ public class Metrics { } this.graphs.add(graph); } - + /** * Start measuring statistics. This will immediately create an async repeating task as the plugin and send the * initial data to the metrics backend, and then after that it will post in increments of PING_INTERVAL * 1200 @@ -286,7 +285,7 @@ public class Metrics { // Begin hitting the server with glorious data this.task = this.plugin.getServer().getScheduler().runTaskTimerAsynchronously(this.plugin, new Runnable() { private boolean firstPost = true; - + @Override public void run() { try { @@ -330,7 +329,7 @@ public class Metrics { return true; } } - + /** * Has the server owner denied plugin metrics? * @@ -355,7 +354,7 @@ public class Metrics { return this.configuration.getBoolean("opt-out", false); } } - + /** * Enables metrics for the server by setting "opt-out" to false in the config file and starting the metrics task. * @@ -377,7 +376,7 @@ public class Metrics { } } } - + /** * Disables metrics for the server by setting "opt-out" to true in the config file and canceling the metrics task. * @@ -400,7 +399,7 @@ public class Metrics { } } } - + /** * Gets the File object of the config file that should be used to store data such as the GUID and opt-out status * @@ -417,7 +416,7 @@ public class Metrics { // return => base/plugins/PluginMetrics/config.yml return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml"); } - + /** * Generic method that posts a plugin to the metrics website */ @@ -442,7 +441,6 @@ public class Metrics { } } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) { } - // END server software specific section -- all code below does not use // any code outside of this class / Java // Construct the post data @@ -557,7 +555,7 @@ public class Metrics { } } } - + /** * Check if mineshafter is present. If it is, we need to bypass it to send POST requests * @@ -571,7 +569,7 @@ public class Metrics { return false; } } - + /** * Represents a custom graph on the website */ @@ -585,11 +583,11 @@ public class Metrics { * The set of plotters that are contained within this graph */ private final Set plotters = new LinkedHashSet(); - + private Graph(final String name) { this.name = name; } - + /** * Gets the graph's name * @@ -598,7 +596,7 @@ public class Metrics { public String getName() { return this.name; } - + /** * Add a plotter to the graph, which will be used to plot entries * @@ -607,7 +605,7 @@ public class Metrics { public void addPlotter(final Plotter plotter) { this.plotters.add(plotter); } - + /** * Remove a plotter from the graph * @@ -616,7 +614,7 @@ public class Metrics { public void removePlotter(final Plotter plotter) { this.plotters.remove(plotter); } - + /** * Gets an unmodifiable set of the plotter objects in the graph * @@ -625,12 +623,12 @@ public class Metrics { public Set getPlotters() { return Collections.unmodifiableSet(this.plotters); } - + @Override public int hashCode() { return this.name.hashCode(); } - + @Override public boolean equals(final Object object) { if (!(object instanceof Graph)) { @@ -639,14 +637,14 @@ public class Metrics { final Graph graph = (Graph) object; return graph.name.equals(this.name); } - + /** * Called when the server owner decides to opt-out of BukkitMetrics while the server is running. */ protected void onOptOut() { } } - + /** * Interface used to collect custom data for a plugin */ @@ -655,14 +653,14 @@ public class Metrics { * The plot's name */ private final String name; - + /** * Construct a plotter with the default plot name */ public Plotter() { this("Default"); } - + /** * Construct a plotter with a specific plot name * @@ -671,7 +669,7 @@ public class Metrics { public Plotter(final String name) { this.name = name; } - + /** * Get the current value for the plotted point. Since this function defers to an external function it may or may * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called @@ -680,7 +678,7 @@ public class Metrics { * @return the current value for the point to be plotted. */ public abstract int getValue(); - + /** * Get the column name for the plotted point * @@ -689,18 +687,18 @@ public class Metrics { public String getColumnName() { return this.name; } - + /** * Called after the website graphs have been updated */ public void reset() { } - + @Override public int hashCode() { return getColumnName().hashCode(); } - + @Override public boolean equals(final Object object) { if (!(object instanceof Plotter)) { diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PWE.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/PWE.java similarity index 57% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PWE.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/PWE.java index 15b97b7b6..e9b68b1a9 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PWE.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/PWE.java @@ -18,23 +18,21 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// +package com.intellectualcrafters.plot.util.bukkit; -package com.intellectualcrafters.plot.util; - -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.flag.FlagManager; +import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.PlotId; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.MainUtil; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalWorld; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; -import com.sk89q.worldedit.bukkit.BukkitPlayer; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.RegionMask; import com.sk89q.worldedit.regions.CuboidRegion; @@ -43,38 +41,31 @@ import com.sk89q.worldedit.regions.CuboidRegion; * @author Citymonstret * @author Empire92 */ -@SuppressWarnings("ALL") public class PWE { - - public static void setMask(final Player p, final Location l, boolean force) { +public class PWE { + public static void setMask(final PlotPlayer p, final Location l, final boolean force) { try { - LocalSession s; - if (PlotMain.worldEdit == null) { - s = WorldEdit.getInstance().getSession(p.getName()); - } else { - s = PlotMain.worldEdit.getSession(p); - } - if (!PlotMain.isPlotWorld(p.getWorld())) { + LocalSession s = WorldEdit.getInstance().getSession(p.getName()); + if (!PlotSquared.isPlotWorld(l.getWorld())) { removeMask(p); } - final PlotId id = PlayerFunctions.getPlot(l); + final PlotId id = MainUtil.getPlotId(l); if (id != null) { - final Plot plot = PlotMain.getPlots(l.getWorld()).get(id); + final Plot plot = PlotSquared.getPlots(l.getWorld()).get(id); if (plot != null) { - if (FlagManager.isPlotFlagTrue(plot, "no-worldedit")) { - return; - } - boolean r = ((plot.getOwner() != null) && plot.getOwner().equals(UUIDHandler.getUUID(p))) || plot.helpers.contains(DBFunc.everyone) || plot.helpers.contains(UUIDHandler.getUUID(p)); + if (FlagManager.isPlotFlagTrue(plot, "no-worldedit")) { + return; + } + final boolean r = ((plot.getOwner() != null) && plot.getOwner().equals(p.getUUID())) || plot.helpers.contains(DBFunc.everyone) || plot.helpers.contains(p.getUUID()); if (r) { - final World w = l.getWorld(); - - final Location bloc = PlotHelper.getPlotBottomLoc(w, plot.id); - final Location tloc = PlotHelper.getPlotTopLoc(w, plot.id); - - final Vector bvec = new Vector(bloc.getBlockX() + 1, bloc.getBlockY(), bloc.getBlockZ() + 1); - final Vector tvec = new Vector(tloc.getBlockX(), tloc.getBlockY(), tloc.getBlockZ()); - - final LocalWorld lw = PlotMain.worldEdit.wrapPlayer(p).getWorld(); - + final String w = l.getWorld(); + final Location bloc = MainUtil.getPlotBottomLoc(w, plot.id); + final Location tloc = MainUtil.getPlotTopLoc(w, plot.id); + final Vector bvec = new Vector(bloc.getX() + 1, bloc.getY(), bloc.getZ() + 1); + final Vector tvec = new Vector(tloc.getX(), tloc.getY(), tloc.getZ()); + + + // FIXME unchecked casting + final LocalWorld lw = PlotSquared.worldEdit.wrapPlayer(((BukkitPlayer) p).player).getWorld(); final CuboidRegion region = new CuboidRegion(lw, bvec, tvec); final RegionMask mask = new RegionMask(region); s.setMask(mask); @@ -82,63 +73,46 @@ import com.sk89q.worldedit.regions.CuboidRegion; } } } - if (force ^ (noMask(s) && !PlotMain.hasPermission(p, "plots.worldedit.bypass"))) { - final BukkitPlayer plr = PlotMain.worldEdit.wrapPlayer(p); + if (force ^ (noMask(s) && !p.hasPermission("plots.worldedit.bypass"))) { + // FIXME unchecked casting + final com.sk89q.worldedit.bukkit.BukkitPlayer plr = PlotSquared.worldEdit.wrapPlayer(((BukkitPlayer) p).player); final Vector p1 = new Vector(69, 69, 69), p2 = new Vector(69, 69, 69); s.setMask(new RegionMask(new CuboidRegion(plr.getWorld(), p1, p2))); } } catch (final Exception e) { e.printStackTrace(); - // throw new - // PlotSquaredException(PlotSquaredException.PlotError.MISSING_DEPENDENCY, - // "WorldEdit == Null?"); } } - public static boolean hasMask(final Player p) { - LocalSession s; - if (PlotMain.worldEdit == null) { - s = WorldEdit.getInstance().getSession(p.getName()); - } else { - s = PlotMain.worldEdit.getSession(p); - } + public static boolean hasMask(final PlotPlayer p) { + LocalSession s = WorldEdit.getInstance().getSession(p.getName()); return !noMask(s); } - + public static boolean noMask(final LocalSession s) { return s.getMask() == null; } - + @SuppressWarnings("deprecation") - public static void setNoMask(final Player p) { + public static void setNoMask(final PlotPlayer p) { try { - LocalSession s; - if (PlotMain.worldEdit == null) { - s = WorldEdit.getInstance().getSession(p.getName()); - } else { - s = PlotMain.worldEdit.getSession(p); - } - final BukkitPlayer plr = PlotMain.worldEdit.wrapPlayer(p); + LocalSession s = WorldEdit.getInstance().getSession(p.getName()); + final com.sk89q.worldedit.bukkit.BukkitPlayer plr = PlotSquared.worldEdit.wrapPlayer(((BukkitPlayer) p).player); final Vector p1 = new Vector(69, 69, 69), p2 = new Vector(69, 69, 69); s.setMask(new RegionMask(new CuboidRegion(plr.getWorld(), p1, p2))); } catch (final Exception e) { // } } - - public static void removeMask(final Player p, final LocalSession s) { + + public static void removeMask(final PlotPlayer p, final LocalSession s) { final Mask mask = null; s.setMask(mask); } - - public static void removeMask(final Player p) { + + public static void removeMask(final PlotPlayer p) { try { - LocalSession s; - if (PlotMain.worldEdit == null) { - s = WorldEdit.getInstance().getSession(p.getName()); - } else { - s = PlotMain.worldEdit.getSession(p); - } + LocalSession s = WorldEdit.getInstance().getSession(p.getName()); removeMask(p, s); } catch (final Exception e) { // throw new diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SendChunk.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java similarity index 85% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SendChunk.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java index 3800ca585..faa2cd2d3 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SendChunk.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SendChunk.java @@ -1,12 +1,15 @@ -package com.intellectualcrafters.plot.util; +package com.intellectualcrafters.plot.util.bukkit; import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; +import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.Chunk; +import org.bukkit.World; +import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.util.ReflectionUtils.RefClass; import com.intellectualcrafters.plot.util.ReflectionUtils.RefConstructor; import com.intellectualcrafters.plot.util.ReflectionUtils.RefField; @@ -18,27 +21,23 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; * @author Empire92 */ public class SendChunk { - // Ref Class private static final RefClass classWorld = getRefClass("{nms}.World"); private static final RefClass classEntityPlayer = getRefClass("{nms}.EntityPlayer"); private static final RefClass classChunkCoordIntPair = getRefClass("{nms}.ChunkCoordIntPair"); private static final RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); private static final RefClass classChunk = getRefClass("{nms}.Chunk"); - // Ref Method private static RefMethod methodGetHandle; - // Ref Field private static RefField chunkCoordIntPairQueue; private static RefField players; private static RefField locX; private static RefField locZ; private static RefField world; - // Ref Constructor private static RefConstructor ChunkCoordIntPairCon; - + /** * Constructor * @@ -47,25 +46,20 @@ public class SendChunk { public SendChunk() throws NoSuchMethodException { methodGetHandle = classCraftChunk.getMethod("getHandle"); chunkCoordIntPairQueue = classEntityPlayer.getField("chunkCoordIntPairQueue"); - players = classWorld.getField("players"); locX = classEntityPlayer.getField("locX"); locZ = classEntityPlayer.getField("locZ"); - world = classChunk.getField("world"); - ChunkCoordIntPairCon = classChunkCoordIntPair.getConstructor(int.class, int.class); } - + public static void sendChunk(final List chunks) { int diffx, diffz; final int view = Bukkit.getServer().getViewDistance() << 4; for (final Chunk chunk : chunks) { final Object c = methodGetHandle.of(chunk).call(); - final Object w = world.of(c).get(); final Object p = players.of(w).get(); - for (final Object ep : (List) p) { final int x = ((Double) locX.of(ep).get()).intValue(); final int z = ((Double) locZ.of(ep).get()).intValue(); @@ -79,4 +73,13 @@ public class SendChunk { } } } + + public static void sendChunk(final String worldname, final List locs) { + final World myworld = Bukkit.getWorld(worldname); + final ArrayList chunks = new ArrayList<>(); + for (final ChunkLoc loc : locs) { + chunks.add(myworld.getChunkAt(loc.x, loc.z)); + } + sendChunk(chunks); + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockFast.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java similarity index 89% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockFast.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java index 756b5c323..8e12c094c 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockFast.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast.java @@ -18,8 +18,7 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.util; +package com.intellectualcrafters.plot.util.bukkit; import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; @@ -28,6 +27,7 @@ import java.util.List; import org.bukkit.Chunk; import org.bukkit.World; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.ReflectionUtils.RefClass; import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; @@ -36,18 +36,16 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; * * @author Empire92 */ -public class SetBlockFast extends AbstractSetBlock { - +public class SetBlockFast extends SetBlockManager { private static final RefClass classBlock = getRefClass("{nms}.Block"); private static final RefClass classChunk = getRefClass("{nms}.Chunk"); private static final RefClass classWorld = getRefClass("{nms}.World"); private static final RefClass classCraftWorld = getRefClass("{cb}.CraftWorld"); - private static RefMethod methodGetHandle; private static RefMethod methodGetChunkAt; private static RefMethod methodA; private static RefMethod methodGetById; - + /** * Constructor * @@ -59,7 +57,7 @@ public class SetBlockFast extends AbstractSetBlock { methodA = classChunk.getMethod("a", int.class, int.class, int.class, classBlock, int.class); methodGetById = classBlock.getMethod("getById", int.class); } - + /** * Set the block at the location * @@ -73,28 +71,26 @@ public class SetBlockFast extends AbstractSetBlock { * @return true */ @Override - public boolean set(final org.bukkit.World world, final int x, final int y, final int z, final int blockId, final byte data) { - + public void set(final org.bukkit.World world, final int x, final int y, final int z, final int blockId, final byte data) { final Object w = methodGetHandle.of(world).call(); final Object chunk = methodGetChunkAt.of(w).call(x >> 4, z >> 4); final Object block = methodGetById.of(null).call(blockId); methodA.of(chunk).call(x & 0x0f, y, z & 0x0f, block, data); - return true; } - + /** * Update chunks * * @param player Player whose chunks we're updating */ @Override - public void update(List chunks) { + public void update(final List chunks) { if (chunks.size() == 0) { return; } - if (!PlotHelper.canSendChunk) { - World world = chunks.get(0).getWorld(); - for (Chunk chunk : chunks) { + if (!MainUtil.canSendChunk) { + final World world = chunks.get(0).getWorld(); + for (final Chunk chunk : chunks) { world.refreshChunk(chunk.getX(), chunk.getZ()); } return; @@ -102,7 +98,7 @@ public class SetBlockFast extends AbstractSetBlock { try { SendChunk.sendChunk(chunks); } catch (final Throwable e) { - PlotHelper.canSendChunk = false; + MainUtil.canSendChunk = false; } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockFast_1_8.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java similarity index 73% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockFast_1_8.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java index 6464081cb..6f649df01 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockFast_1_8.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockFast_1_8.java @@ -18,8 +18,7 @@ // / // You can contact us via: support@intellectualsites.com / //////////////////////////////////////////////////////////////////////////////////////////////////// - -package com.intellectualcrafters.plot.util; +package com.intellectualcrafters.plot.util.bukkit; import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; @@ -27,7 +26,9 @@ import java.util.List; import org.bukkit.Chunk; import org.bukkit.World; +import org.bukkit.block.Block; +import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.ReflectionUtils.RefClass; import com.intellectualcrafters.plot.util.ReflectionUtils.RefConstructor; import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; @@ -37,24 +38,17 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; * * @author Empire92 */ -public class SetBlockFast_1_8 extends AbstractSetBlock { - +public class SetBlockFast_1_8 extends SetBlockManager { private static final RefClass classBlock = getRefClass("{nms}.Block"); private static final RefClass classBlockPosition = getRefClass("{nms}.BlockPosition"); private static final RefClass classIBlockData = getRefClass("{nms}.IBlockData"); - - - - private static final RefClass classChunk = getRefClass("{nms}.Chunk"); private static final RefClass classWorld = getRefClass("{nms}.World"); private static final RefClass classCraftWorld = getRefClass("{cb}.CraftWorld"); - private static RefMethod methodGetHandle; private static RefMethod methodGetChunkAt; private static RefMethod methodA; private static RefMethod methodGetByCombinedId; - private static RefConstructor constructorBlockPosition; /** @@ -63,15 +57,13 @@ public class SetBlockFast_1_8 extends AbstractSetBlock { * @throws NoSuchMethodException */ public SetBlockFast_1_8() throws NoSuchMethodException { - constructorBlockPosition = classBlockPosition.getConstructor(int.class, int.class, int.class); methodGetByCombinedId = classBlock.getMethod("getByCombinedId", int.class); - methodGetHandle = classCraftWorld.getMethod("getHandle"); methodGetChunkAt = classWorld.getMethod("getChunkAt", int.class, int.class); methodA = classChunk.getMethod("a", classBlockPosition, classIBlockData); } - + /** * Set the block at the location * @@ -85,28 +77,60 @@ public class SetBlockFast_1_8 extends AbstractSetBlock { * @return true */ @Override - public boolean set(final World world, final int x, final int y, final int z, final int blockId, final byte data) { + public void set(final World world, final int x, final int y, final int z, final int id, final byte data) { + switch (id) { + case 54: + case 130: + case 146: + case 27: + case 28: + case 66: + case 157: + case 61: + case 62: + case 158: + case 23: + case 123: + case 124: + case 29: + case 33: + case 151: + case 178: { + final Block block = world.getBlockAt(x, y, z); + if (block.getData() == data) { + if (block.getTypeId() != id) { + block.setTypeId(id, false); + } + } else { + if (block.getTypeId() == id) { + block.setData(data, false); + } else { + block.setTypeIdAndData(id, data, false); + } + } + return; + } + } final Object w = methodGetHandle.of(world).call(); final Object chunk = methodGetChunkAt.of(w).call(x >> 4, z >> 4); - final Object pos = constructorBlockPosition.create((int) (x & 0x0f), y, (int) (z & 0x0f)); - final Object id = methodGetByCombinedId.of(null).call(blockId + (data << 12)); - methodA.of(chunk).call(pos, id); - return true; + final Object pos = constructorBlockPosition.create(x & 0x0f, y, z & 0x0f); + final Object combined = methodGetByCombinedId.of(null).call(id + (data << 12)); + methodA.of(chunk).call(pos, combined); } - + /** * Update chunks * * @param player Player whose chunks we're updating */ @Override - public void update(List chunks) { + public void update(final List chunks) { if (chunks.size() == 0) { return; } - if (!PlotHelper.canSendChunk) { - World world = chunks.get(0).getWorld(); - for (Chunk chunk : chunks) { + if (!MainUtil.canSendChunk) { + final World world = chunks.get(0).getWorld(); + for (final Chunk chunk : chunks) { world.refreshChunk(chunk.getX(), chunk.getZ()); } return; @@ -114,7 +138,7 @@ public class SetBlockFast_1_8 extends AbstractSetBlock { try { SendChunk.sendChunk(chunks); } catch (final Throwable e) { - PlotHelper.canSendChunk = false; + MainUtil.canSendChunk = false; } } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockManager.java new file mode 100644 index 000000000..209b9a59b --- /dev/null +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockManager.java @@ -0,0 +1,13 @@ +package com.intellectualcrafters.plot.util.bukkit; + +import java.util.List; + +import org.bukkit.Chunk; + +public abstract class SetBlockManager { + public static SetBlockManager setBlockManager = null; + + public abstract void set(final org.bukkit.World world, final int x, final int y, final int z, final int blockId, final byte data); + + public abstract void update(List list); +} diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockSlow.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java similarity index 62% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockSlow.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java index 1dda70743..1ea698a31 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/SetBlockSlow.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/SetBlockSlow.java @@ -1,4 +1,4 @@ -package com.intellectualcrafters.plot.util; +package com.intellectualcrafters.plot.util.bukkit; import java.util.List; @@ -6,11 +6,10 @@ import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.block.Block; -public class SetBlockSlow extends AbstractSetBlock { - +public class SetBlockSlow extends SetBlockManager { @Override - public boolean set(World world, int x, int y, int z, int id, byte data) { - Block block = world.getBlockAt(x, y, z); + public void set(final World world, final int x, final int y, final int z, final int id, final byte data) { + final Block block = world.getBlockAt(x, y, z); if (block.getData() == data) { if (block.getTypeId() != id) { block.setTypeId(id, false); @@ -22,13 +21,10 @@ public class SetBlockSlow extends AbstractSetBlock { block.setTypeIdAndData(id, data, false); } } - return false; - } - - @Override - public void update(List chunks) { - // TODO Auto-generated method stub - } + @Override + public void update(final List chunks) { + // TODO Auto-generated method stub + } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/UUIDHandler.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/UUIDHandler.java similarity index 57% rename from PlotSquared/src/main/java/com/intellectualcrafters/plot/util/UUIDHandler.java rename to PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/UUIDHandler.java index 3193e796f..a57033c51 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/UUIDHandler.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/bukkit/UUIDHandler.java @@ -1,4 +1,4 @@ -package com.intellectualcrafters.plot.util; +package com.intellectualcrafters.plot.util.bukkit; import java.io.File; import java.io.FilenameFilter; @@ -6,25 +6,23 @@ import java.util.HashMap; import java.util.HashSet; import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; -import com.intellectualcrafters.plot.PlotMain; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.DBFunc; +import com.intellectualcrafters.plot.object.BukkitOfflinePlayer; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.StringWrapper; import com.intellectualcrafters.plot.uuid.DefaultUUIDWrapper; import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper; import com.intellectualcrafters.plot.uuid.UUIDWrapper; public class UUIDHandler { - public static boolean CACHED = false; public static UUIDWrapper uuidWrapper = null; + public static HashMap players = new HashMap<>(); /** * Map containing names and UUIDs @@ -32,9 +30,9 @@ public class UUIDHandler { * @see com.google.common.collect.BiMap */ private final static BiMap uuidMap = HashBiMap.create(new HashMap()); - + public static void add(final StringWrapper name, final UUID uuid) { - if (uuid == null || name == null) { + if ((uuid == null) || (name == null)) { return; } if (!uuidMap.containsKey(name) && !uuidMap.inverse().containsKey(uuid)) { @@ -65,7 +63,7 @@ public class UUIDHandler { public static boolean uuidExists(final UUID uuid) { return uuidMap.containsValue(uuid); } - + /** * Check if a name is cached * @@ -79,137 +77,131 @@ public class UUIDHandler { return uuidMap.containsKey(name); } - public static void cacheAll() { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&6Starting player data caching"); + public static void cacheAll(String world) { + if (CACHED) { + return; + } + PlotSquared.log(C.PREFIX.s() + "&6Starting player data caching"); UUIDHandler.CACHED = true; - HashSet worlds = new HashSet<>(); - worlds.add(Bukkit.getWorlds().get(0).getName()); + final HashSet worlds = new HashSet<>(); + worlds.add(world); worlds.add("world"); - - HashSet uuids = new HashSet<>(); - HashSet names = new HashSet<>(); - - for (String worldname : worlds) { + final HashSet uuids = new HashSet<>(); + final HashSet names = new HashSet<>(); + for (final String worldname : worlds) { // Getting UUIDs - File playerdataFolder = new File(worldname + File.separator + "playerdata"); + final File playerdataFolder = new File(worldname + File.separator + "playerdata"); String[] dat = playerdataFolder.list(new FilenameFilter() { - public boolean accept(File f, String s) { + @Override + public boolean accept(final File f, final String s) { return s.endsWith(".dat"); } }); if (dat != null) { - for (String current : dat) { - String s = current.replaceAll(".dat$", ""); + for (final String current : dat) { + final String s = current.replaceAll(".dat$", ""); try { - UUID uuid = UUID.fromString(s); + final UUID uuid = UUID.fromString(s); uuids.add(uuid); - } - catch (Exception e) { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "Invalid playerdata: "+current); + } catch (final Exception e) { + PlotSquared.log(C.PREFIX.s() + "Invalid playerdata: " + current); } } } - // Getting names - File playersFolder = new File(worldname + File.separator + "players"); + final File playersFolder = new File(worldname + File.separator + "players"); dat = playersFolder.list(new FilenameFilter() { - public boolean accept(File f, String s) { + @Override + public boolean accept(final File f, final String s) { return s.endsWith(".dat"); } }); if (dat != null) { - for (String current : dat) { + for (final String current : dat) { names.add(current.replaceAll(".dat$", "")); } } } - UUIDWrapper wrapper = new DefaultUUIDWrapper(); + final UUIDWrapper wrapper = new DefaultUUIDWrapper(); for (UUID uuid : uuids) { try { - OfflinePlayer player = wrapper.getOfflinePlayer(uuid); + final BukkitOfflinePlayer player = wrapper.getOfflinePlayer(uuid); uuid = UUIDHandler.uuidWrapper.getUUID(player); - StringWrapper name = new StringWrapper(player.getName()); + final StringWrapper name = new StringWrapper(player.getName()); add(name, uuid); - } - catch (Throwable e) { - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&6Invalid playerdata: "+uuid.toString() + ".dat"); + } catch (final Throwable e) { + PlotSquared.log(C.PREFIX.s() + "&6Invalid playerdata: " + uuid.toString() + ".dat"); } } - for (String name : names) { - OfflinePlayer player = Bukkit.getOfflinePlayer(name); - UUID uuid = UUIDHandler.uuidWrapper.getUUID(player); - StringWrapper nameWrap = new StringWrapper(name); + for (final String name : names) { + final UUID uuid = uuidWrapper.getUUID(name); + final StringWrapper nameWrap = new StringWrapper(name); add(nameWrap, uuid); } - // add the Everyone '*' UUID add(new StringWrapper("*"), DBFunc.everyone); - - PlotMain.sendConsoleSenderMessage(C.PREFIX.s() + "&6Cached a total of: " + UUIDHandler.uuidMap.size() + " UUIDs"); + PlotSquared.log(C.PREFIX.s() + "&6Cached a total of: " + UUIDHandler.uuidMap.size() + " UUIDs"); } - public static UUID getUUID(Player player) { + public static UUID getUUID(final PlotPlayer player) { return UUIDHandler.uuidWrapper.getUUID(player); } - public static UUID getUUID(OfflinePlayer player) { + public static UUID getUUID(final BukkitOfflinePlayer player) { return UUIDHandler.uuidWrapper.getUUID(player); } - public static String getName(UUID uuid) { + public static String getName(final UUID uuid) { if (uuid == null) { return null; } - // check online - Player player = uuidWrapper.getPlayer(uuid); + final PlotPlayer player = UUIDHandler.getPlayer(uuid); if (player != null) { return player.getName(); } - // check cache - StringWrapper name = UUIDHandler.uuidMap.inverse().get(uuid); + final StringWrapper name = UUIDHandler.uuidMap.inverse().get(uuid); if (name != null) { return name.value; } - - // check drive - if (Settings.UUID_FROM_DISK) { - OfflinePlayer op = UUIDHandler.uuidWrapper.getOfflinePlayer(uuid); - String string = op.getName(); - StringWrapper sw = new StringWrapper(string); - add(sw, uuid); - return string; - } - return null; } + + public static PlotPlayer getPlayer(UUID uuid) { + for (PlotPlayer player : players.values()) { + if (player.getUUID().equals(uuid)) { + return player; + } + } + return null; + } + + public static PlotPlayer getPlayer(String name) { + return players.get(name); + } public static UUID getUUID(final String name) { - if (name == null || name.length() == 0) { + if ((name == null) || (name.length() == 0)) { return null; } // check online - Player player = Bukkit.getPlayer(name); + final PlotPlayer player = getPlayer(name); if (player != null) { - UUID uuid = UUIDHandler.uuidWrapper.getUUID(player); - add(new StringWrapper(name), uuid); - return uuid; + return player.getUUID(); } - // check cache - StringWrapper wrap = new StringWrapper(name); + final StringWrapper wrap = new StringWrapper(name); UUID uuid = UUIDHandler.uuidMap.get(wrap); if (uuid != null) { return uuid; } // Read from disk OR convert directly to offline UUID - if (Settings.UUID_FROM_DISK || uuidWrapper instanceof OfflineUUIDWrapper) { + if (Settings.UUID_FROM_DISK || (uuidWrapper instanceof OfflineUUIDWrapper)) { uuid = UUIDHandler.uuidWrapper.getUUID(name); add(new StringWrapper(name), uuid); return uuid; } - return null; } } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java index 169c9bcde..f3d6a78b8 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java @@ -3,34 +3,29 @@ package com.intellectualcrafters.plot.uuid; import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; + +import com.intellectualcrafters.plot.object.BukkitOfflinePlayer; +import com.intellectualcrafters.plot.object.BukkitPlayer; +import com.intellectualcrafters.plot.object.PlotPlayer; public class DefaultUUIDWrapper extends UUIDWrapper { - @Override - public UUID getUUID(final Player player) { - return player.getUniqueId(); + public UUID getUUID(final PlotPlayer player) { + return ((BukkitPlayer) player).player.getUniqueId(); } - + @Override - public UUID getUUID(final OfflinePlayer player) { - return player.getUniqueId(); + public UUID getUUID(final BukkitOfflinePlayer player) { + return player.getUUID(); } - + @Override - public OfflinePlayer getOfflinePlayer(final UUID uuid) { - return Bukkit.getOfflinePlayer(uuid); + public BukkitOfflinePlayer getOfflinePlayer(final UUID uuid) { + return new BukkitOfflinePlayer(Bukkit.getOfflinePlayer(uuid)); } - + @Override - public Player getPlayer(final UUID uuid) { - return Bukkit.getPlayer(uuid); - } - - @Override - public UUID getUUID(String name) { + public UUID getUUID(final String name) { return Bukkit.getOfflinePlayer(name).getUniqueId(); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java index d21f2a502..0d7b6e167 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java @@ -11,92 +11,84 @@ import org.bukkit.entity.Player; import com.google.common.base.Charsets; import com.google.common.collect.BiMap; +import com.intellectualcrafters.plot.object.BukkitOfflinePlayer; +import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.StringWrapper; -import com.intellectualcrafters.plot.util.UUIDHandler; +import com.intellectualcrafters.plot.util.bukkit.UUIDHandler; public class OfflineUUIDWrapper extends UUIDWrapper { - private Method getOnline = null; - private Object[] arg = new Object[0]; - + private final Object[] arg = new Object[0]; + public OfflineUUIDWrapper() { try { this.getOnline = Server.class.getMethod("getOnlinePlayers", new Class[0]); - } catch (NoSuchMethodException e) { + } catch (final NoSuchMethodException e) { e.printStackTrace(); - } catch (SecurityException e) { + } catch (final SecurityException e) { e.printStackTrace(); } } @Override - public UUID getUUID(final Player player) { + public UUID getUUID(final PlotPlayer player) { return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8)); } - + @Override + public UUID getUUID(final BukkitOfflinePlayer player) { + return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8)); + } + public UUID getUUID(final OfflinePlayer player) { return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8)); } - + @Override - public OfflinePlayer getOfflinePlayer(final UUID uuid) { + public BukkitOfflinePlayer getOfflinePlayer(final UUID uuid) { final BiMap map = UUIDHandler.getUuidMap().inverse(); String name; try { name = map.get(uuid).value; - } catch (NullPointerException e) { + } catch (final NullPointerException e) { name = null; } if (name != null) { - OfflinePlayer op = Bukkit.getOfflinePlayer(name); + final OfflinePlayer op = Bukkit.getOfflinePlayer(name); if (op.hasPlayedBefore()) { - return op; + return new BukkitOfflinePlayer(op); } } for (final OfflinePlayer player : Bukkit.getOfflinePlayers()) { if (getUUID(player).equals(uuid)) { - return player; + return new BukkitOfflinePlayer(player); } } return null; } - + public Player[] getOnlinePlayers() { - if (getOnline == null) { + if (this.getOnline == null) { return Bukkit.getOnlinePlayers().toArray(new Player[0]); } try { - Object players = getOnline.invoke(Bukkit.getServer(), arg); + final Object players = this.getOnline.invoke(Bukkit.getServer(), this.arg); if (players instanceof Player[]) { return (Player[]) players; - } - else { + } else { @SuppressWarnings("unchecked") - Collection p = (Collection) players; + final Collection p = (Collection) players; return p.toArray(new Player[0]); } - } - catch (Exception e) { + } catch (final Exception e) { System.out.print("Failed to resolve online players"); - getOnline = null; + this.getOnline = null; return Bukkit.getOnlinePlayers().toArray(new Player[0]); } } @Override - public Player getPlayer(final UUID uuid) { - for (final Player player : getOnlinePlayers()) { - if (getUUID(player).equals(uuid)) { - return player; - } - } - return null; - } - - @Override - public UUID getUUID(String name) { + public UUID getUUID(final String name) { return UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)); } - } diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java index 516309400..33b5623a6 100644 --- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java +++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java @@ -2,17 +2,15 @@ package com.intellectualcrafters.plot.uuid; import java.util.UUID; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; +import com.intellectualcrafters.plot.object.BukkitOfflinePlayer; +import com.intellectualcrafters.plot.object.PlotPlayer; public abstract class UUIDWrapper { - public abstract UUID getUUID(Player player); - - public abstract UUID getUUID(OfflinePlayer player); + public abstract UUID getUUID(PlotPlayer player); + + public abstract UUID getUUID(BukkitOfflinePlayer player); public abstract UUID getUUID(String name); - - public abstract OfflinePlayer getOfflinePlayer(UUID uuid); - - public abstract Player getPlayer(UUID uuid); + + public abstract BukkitOfflinePlayer getOfflinePlayer(UUID uuid); } diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/Translation.java b/PlotSquared/src/main/java/com/intellectualsites/translation/Translation.java index 7ef58979a..b05140163 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/Translation.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/Translation.java @@ -10,8 +10,10 @@ import java.lang.annotation.Target; * * @author Citymonstret */ -@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Translation { +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Translation { String description() default ""; - + String creationDescription() default ""; } diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationAsset.java b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationAsset.java index e584f01e6..4973fcf2b 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationAsset.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationAsset.java @@ -6,25 +6,24 @@ package com.intellectualsites.translation; * @author Citymonstret */ public class TranslationAsset { - private final TranslationObject trans; private final String translated; private final TranslationLanguage lang; - + public TranslationAsset(final TranslationObject trans, final String translated, final TranslationLanguage lang) { this.trans = trans; this.translated = translated; this.lang = lang; } - + public TranslationObject getObject() { return this.trans; } - + public String getTranslated() { return this.translated.replace("\n", "&-"); } - + public TranslationLanguage getLang() { return this.lang; } diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationFile.java b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationFile.java index eb7aa89d0..074bb3349 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationFile.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationFile.java @@ -6,26 +6,25 @@ package com.intellectualsites.translation; * @author Citymonstret */ public abstract class TranslationFile { - /** * A method used to get the language of the file * * @return language */ public abstract TranslationLanguage getLanguage(); - + /** * Save the file */ public abstract void saveFile(); - + /** * Read from the file * * @return instance */ public abstract TranslationFile read(); - + /** * Add a value * @@ -33,5 +32,4 @@ public abstract class TranslationFile { * @param value value */ public abstract void add(String key, String value); - } diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationLanguage.java b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationLanguage.java index 02b9e2b7c..85e284a77 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationLanguage.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationLanguage.java @@ -1,7 +1,6 @@ package com.intellectualsites.translation; public class TranslationLanguage { - public static final TranslationLanguage englishAmerican = (new TranslationLanguage("American English", "us", "en")); public static final TranslationLanguage englishBritish = (new TranslationLanguage("British English", "gb", "en")); public static final TranslationLanguage swedishSwedish = (new TranslationLanguage("Swedish", "sv", "se")); @@ -9,29 +8,29 @@ public class TranslationLanguage { private final String countryCode; private final String languageCode; private final String friendlyName; - + public TranslationLanguage(final String friendlyName, final String countryCode, final String languageCode) { this.friendlyName = friendlyName; this.countryCode = countryCode; this.languageCode = languageCode; } - + public static TranslationLanguage[] values() { - return new TranslationLanguage[]{englishAmerican, englishBritish, swedishSwedish}; + return new TranslationLanguage[] { englishAmerican, englishBritish, swedishSwedish }; } - + public String getName() { return this.friendlyName; } - + public String getCountryCode() { return this.countryCode; } - + public String getLanguageCode() { return this.languageCode; } - + @Override public String toString() { /* en_US */ diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationManager.java b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationManager.java index b3e489429..1c0cfa2ac 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationManager.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationManager.java @@ -15,7 +15,6 @@ import java.util.List; * @author Citymonstret */ public class TranslationManager { - /** * Objects */ @@ -24,14 +23,14 @@ public class TranslationManager { * The translations */ private final LinkedHashMap translatedObjects; - + /** * Constructor */ public TranslationManager() { - this(new TranslationObject[]{}); + this(new TranslationObject[] {}); } - + /** * Constructor * @@ -41,7 +40,7 @@ public class TranslationManager { this.translationObjects = new LinkedList(Arrays.asList(translationObjects)); this.translatedObjects = new LinkedHashMap(); } - + public static List transformEnum(final Object[] os) { final List eList = new ArrayList(); for (final Object o : os) { @@ -49,7 +48,7 @@ public class TranslationManager { } return eList; } - + public static void scan(final Class c, final TranslationManager manager) throws IllegalAccessException { final Field[] fields = c.getDeclaredFields(); Annotation annotation; @@ -65,7 +64,7 @@ public class TranslationManager { manager.addTranslationObject(new TranslationObject(key, defaultValue, t.description(), t.creationDescription())); } } - + /** * Don't use this! * @@ -74,7 +73,7 @@ public class TranslationManager { public TranslationManager instance() { return this; } - + /** * Get the translation objects * @@ -83,7 +82,7 @@ public class TranslationManager { public List translations() { return this.translationObjects; } - + /** * Add an object * @@ -95,7 +94,7 @@ public class TranslationManager { this.translationObjects.add(t); return instance(); } - + /** * Remove an object * @@ -107,7 +106,7 @@ public class TranslationManager { this.translationObjects.remove(t); return instance(); } - + public String getDescription(final String key) { for (final TranslationObject o : translations()) { if (o.getKey().equals(key) && !o.getDescription().equals("")) { @@ -116,11 +115,11 @@ public class TranslationManager { } return ""; } - + public TranslationManager addTranslation(final TranslationObject t, final TranslationAsset a) { return addTranslation(t.getKey(), a); } - + public TranslationManager addTranslation(final String key, final TranslationAsset a) { String eKey = key + "." + a.getLang().toString(); eKey = eKey.toLowerCase(); @@ -130,7 +129,7 @@ public class TranslationManager { this.translatedObjects.put(eKey, a); return instance(); } - + public TranslationAsset getTranslated(final String key, final String language) { String eKey = key + "." + language; eKey = eKey.toLowerCase(); @@ -139,7 +138,7 @@ public class TranslationManager { } return this.translatedObjects.get(key); } - + public TranslationAsset getTranslated(final String key, final TranslationLanguage language) { String eKey = key + "." + language.toString(); eKey = eKey.toLowerCase(); @@ -148,15 +147,15 @@ public class TranslationManager { } return this.translatedObjects.get(eKey); } - + public TranslationAsset getTranslated(final TranslationObject t, final TranslationLanguage l) { return getTranslated(t.getKey(), l); } - + public String getTranslation(final String key, final TranslationLanguage l) { return getTranslated(key, l).getTranslated(); } - + public TranslationObject getDefault(final String key) { for (final TranslationObject o : translations()) { if (o.getKey().equals(key.toLowerCase())) { @@ -165,7 +164,7 @@ public class TranslationManager { } return null; } - + public TranslationManager saveAll(final TranslationFile file) { for (final TranslationObject object : translations()) { final TranslationAsset o = getTranslated(object.getKey(), file.getLanguage()); @@ -173,7 +172,7 @@ public class TranslationManager { } return instance(); } - + public TranslationManager debug(final PrintStream out) { for (final TranslationObject object : translations()) { out.println(object.getKey() + ":"); @@ -183,7 +182,7 @@ public class TranslationManager { } return instance(); } - + public TranslationManager saveFile(final TranslationFile file) { file.saveFile(); return instance(); diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationObject.java b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationObject.java index 186a9869f..e4deb1934 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationObject.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/TranslationObject.java @@ -1,8 +1,6 @@ package com.intellectualsites.translation; - public class TranslationObject { - // can include a suffix | not null private final String key; // The default ("no-translation" value) | not null @@ -11,7 +9,7 @@ public class TranslationObject { private final String description; // Like a plugin name for example | can be null private final String creationDescription; - + public TranslationObject(final String key, final String defaultValue, String description, String creationDescription) { if (description == null) { description = ""; @@ -29,21 +27,20 @@ public class TranslationObject { this.description = description; this.creationDescription = creationDescription; } - + public String getKey() { return this.key; } - + public String getDefaultValue() { return this.defaultValue; } - + public String getDescription() { return this.description; } - + public String getCreationDescription() { return this.creationDescription; } - } diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java b/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java index 5aa10259f..7b41e9c91 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/YamlTranslationFile.java @@ -17,7 +17,6 @@ import org.yaml.snakeyaml.Yaml; * @author Citymonstret */ public class YamlTranslationFile extends TranslationFile { - final private TranslationLanguage language; final private String name; final private TranslationManager manager; @@ -30,7 +29,7 @@ public class YamlTranslationFile extends TranslationFile { * YAML Object */ private Yaml yaml; - + /** * Constructor * @@ -60,7 +59,7 @@ public class YamlTranslationFile extends TranslationFile { this.instance = this; this.instance = this; } - + /** * Reload */ @@ -68,7 +67,7 @@ public class YamlTranslationFile extends TranslationFile { this.map = new HashMap(); this.read(); } - + /** * Set the header * @@ -81,7 +80,7 @@ public class YamlTranslationFile extends TranslationFile { this.fancyHead = false; return this.instance; } - + /** * Set a fancy header * @@ -107,7 +106,7 @@ public class YamlTranslationFile extends TranslationFile { this.fancyHead = true; return this.instance; } - + /** * Add a translation * @@ -121,7 +120,7 @@ public class YamlTranslationFile extends TranslationFile { } this.map.put(key, value); } - + /** * Get the translation language * @@ -131,7 +130,7 @@ public class YamlTranslationFile extends TranslationFile { public TranslationLanguage getLanguage() { return this.language; } - + /** * Save the file */ @@ -167,7 +166,7 @@ public class YamlTranslationFile extends TranslationFile { e.printStackTrace(); } } - + /** * Get the YAML object * @@ -185,7 +184,7 @@ public class YamlTranslationFile extends TranslationFile { } return this.yaml; } - + /** * Read the file * diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/BukkitTranslation.java b/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/BukkitTranslation.java index 1728acfb0..04c9b23f3 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/BukkitTranslation.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/BukkitTranslation.java @@ -3,8 +3,8 @@ package com.intellectualsites.translation.bukkit; import java.io.File; import org.bukkit.Material; -import org.bukkit.plugin.java.JavaPlugin; +import com.intellectualcrafters.plot.PlotSquared; import com.intellectualsites.translation.TranslationAsset; import com.intellectualsites.translation.TranslationLanguage; import com.intellectualsites.translation.TranslationManager; @@ -14,7 +14,6 @@ import com.intellectualsites.translation.TranslationObject; * @author Citymonstret */ public class BukkitTranslation { - /** * Get the converted string * @@ -28,7 +27,7 @@ public class BukkitTranslation { // &- = new line return asset.getTranslated().replace("&-", "\n").replace('&', '\u00A7'); } - + /** * Get the universal parent based on the plugin data folder * @@ -36,10 +35,10 @@ public class BukkitTranslation { * * @return parent folder */ - public static File getParent(final JavaPlugin plugin) { - return new File(plugin.getDataFolder() + File.separator + "translations"); + public static File getParent() { + return new File(PlotSquared.IMP.getDirectory() + File.separator + "translations"); } - + /** * The default translation language * @@ -48,7 +47,7 @@ public class BukkitTranslation { public TranslationLanguage getDefaultLanguage() { return TranslationLanguage.englishAmerican; } - + /** * Add material names to the translation list Will default to a somewhat friendly name */ diff --git a/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java b/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java index 4fa992155..7fcf92f9a 100644 --- a/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java +++ b/PlotSquared/src/main/java/com/intellectualsites/translation/bukkit/TranslationPlugin.java @@ -11,17 +11,13 @@ import com.intellectualsites.translation.TranslationManager; import com.intellectualsites.translation.YamlTranslationFile; public class TranslationPlugin extends JavaPlugin { - @Translation(description = "Printed when the translator is fully loaded") private static final String TRANSLATOR_LOADED = "The translator has been loaded"; - @Translation(description = "Printed when the translator has been disabled") private static final String TRANSLATOR_DISABLED = "The translator has been disabled"; - private static TranslationManager manager; - private TranslationFile english; - + @Override public void onEnable() { // Create a new manager @@ -33,16 +29,15 @@ public class TranslationPlugin extends JavaPlugin { e.printStackTrace(); } // Now let's create some default files :D - this.english = new YamlTranslationFile(BukkitTranslation.getParent(this), TranslationLanguage.englishAmerican, getName(), manager).read().header("Example file", "@author Citymonstret"); + this.english = new YamlTranslationFile(BukkitTranslation.getParent(), TranslationLanguage.englishAmerican, getName(), manager).read().header("Example file", "@author Citymonstret"); // That created the file, read it, and made a default header getLogger().log(Level.INFO, BukkitTranslation.convert(manager.getTranslated("translator_loaded", TranslationLanguage.englishAmerican))); } - + @Override public void onDisable() { // Add all translations and save the file manager.saveAll(this.english).saveFile(this.english); getLogger().log(Level.INFO, BukkitTranslation.convert(manager.getTranslated("translator_disabled", TranslationLanguage.englishAmerican))); } - } diff --git a/PlotSquared/src/main/resources/LICENSE b/PlotSquared/src/main/resources/LICENSE index ef7e7efc0..c95a26732 100644 --- a/PlotSquared/src/main/resources/LICENSE +++ b/PlotSquared/src/main/resources/LICENSE @@ -1,15 +1,11 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble - The GNU General Public License is a free, copyleft license for software and other kinds of works. - The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to @@ -18,35 +14,29 @@ software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. - When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. - For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. - For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. - Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of @@ -57,49 +47,37 @@ have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. - Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. - The precise terms and conditions for copying, distribution and modification follow. - TERMS AND CONDITIONS - 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. - "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. - "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. - To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. - A "covered work" means either the unmodified Program or a work based on the Program. - To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. - To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. - An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) @@ -108,18 +86,14 @@ extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. - 1. Source Code. - The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. - A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. - The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major @@ -130,7 +104,6 @@ implementation is available to the public in source code form. A (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. - The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to @@ -143,16 +116,12 @@ the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. - The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. - The Corresponding Source for a work in source code form is that same work. - 2. Basic Permissions. - All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited @@ -160,7 +129,6 @@ permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. - You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose @@ -171,19 +139,15 @@ not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. - Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. - When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to @@ -191,9 +155,7 @@ the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. - 4. Conveying Verbatim Copies. - You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; @@ -201,24 +163,18 @@ keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. - You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - 5. Conveying Modified Source Versions. - You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: - a) The work must carry prominent notices stating that you modified it, and giving a relevant date. - b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". - c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 @@ -226,12 +182,10 @@ terms of section 4, provided that you also meet all of these conditions: regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. - d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. - A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, @@ -241,19 +195,15 @@ used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - 6. Conveying Non-Source Forms. - You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: - a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. - b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as @@ -265,13 +215,11 @@ in one of these ways: more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. - c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. - d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no @@ -284,16 +232,13 @@ in one of these ways: Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. - e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. - A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. - A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation @@ -306,7 +251,6 @@ actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. - "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from @@ -314,7 +258,6 @@ a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. - If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the @@ -325,7 +268,6 @@ by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). - The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for @@ -333,15 +275,12 @@ the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. - Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - 7. Additional Terms. - "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall @@ -350,41 +289,32 @@ that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. - When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. - Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: - a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or - b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or - c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or - d) Limiting the use for publicity purposes of names of licensors or authors of the material; or - e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or - f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. - All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is @@ -394,46 +324,37 @@ a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. - If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. - Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. - 8. Termination. - You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). - However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. - Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. - Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - 9. Acceptance Not Required for Having Copies. - You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission @@ -442,14 +363,11 @@ nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - 10. Automatic Licensing of Downstream Recipients. - Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered @@ -459,7 +377,6 @@ licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. - You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of @@ -467,13 +384,10 @@ rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - 11. Patents. - A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". - A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted @@ -483,19 +397,16 @@ consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. - Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. - If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a @@ -509,7 +420,6 @@ actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties @@ -517,7 +427,6 @@ receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are @@ -532,13 +441,10 @@ conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. - Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - 12. No Surrender of Others' Freedom. - If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a @@ -548,9 +454,7 @@ not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Use with the GNU Affero General Public License. - Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single @@ -559,14 +463,11 @@ License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. - 14. Revised Versions of this License. - The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the @@ -575,19 +476,15 @@ version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. - If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. - Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - 15. Disclaimer of Warranty. - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY @@ -596,9 +493,7 @@ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - 16. Limitation of Liability. - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY @@ -608,64 +503,48 @@ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - 17. Interpretation of Sections 15 and 16. - If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - END OF TERMS AND CONDITIONS - How to Apply These Terms to Your New Programs - If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License along with this program. If not, see . - Also add information on how to contact you by electronic and paper mail. - If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. - The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". - You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . - The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with diff --git a/PlotSquared/src/main/resources/plugin.yml b/PlotSquared/src/main/resources/plugin.yml index b23508692..e0ba9b747 100644 --- a/PlotSquared/src/main/resources/plugin.yml +++ b/PlotSquared/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: ${project.name} -main: com.intellectualcrafters.plot.PlotMain +main: com.intellectualcrafters.plot.PlotSquared version: ${project.version} load: STARTUP description: > @@ -9,7 +9,7 @@ softdepend: [WorldEdit, BarAPI, CameraAPI, Vault] database: false commands: plots: - description: PlotMain PlotSquared command. + description: PlotSquared PlotSquared command. aliases: [p,plot,ps,plotsquared,p2] permission: plots.use permission-message: "You are lacking the permission node 'plots.use'"