diff --git a/src/main/java/org/bukkit/Location.java b/src/main/java/org/bukkit/Location.java index 3760f5a2..fe7c4b09 100644 --- a/src/main/java/org/bukkit/Location.java +++ b/src/main/java/org/bukkit/Location.java @@ -472,19 +472,10 @@ public class Location implements Cloneable { @Override public Location clone() { try { - Location l = (Location) super.clone(); - - l.world = world; - l.x = x; - l.y = y; - l.z = z; - l.yaw = yaw; - l.pitch = pitch; - return l; + return (Location) super.clone(); } catch (CloneNotSupportedException e) { - e.printStackTrace(); + throw new Error(e); } - return null; } /** diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java index df51a20e..7dd59d83 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -12,7 +12,7 @@ import org.bukkit.material.MaterialData; /** * Represents a stack of items */ -public class ItemStack implements ConfigurationSerializable { +public class ItemStack implements Cloneable, ConfigurationSerializable { private int type; private int amount = 0; private MaterialData data = null; @@ -210,10 +210,18 @@ public class ItemStack implements ConfigurationSerializable { @Override public ItemStack clone() { - ItemStack result = new ItemStack(type, amount, durability); - result.addUnsafeEnchantments(getEnchantments()); + try { + ItemStack itemStack = (ItemStack) super.clone(); - return result; + itemStack.enchantments = new HashMap(this.enchantments); + if (this.data != null) { + itemStack.data = this.data.clone(); + } + + return itemStack; + } catch (CloneNotSupportedException e) { + throw new Error(e); + } } @Override diff --git a/src/main/java/org/bukkit/material/Bed.java b/src/main/java/org/bukkit/material/Bed.java index f763ac26..63e92063 100644 --- a/src/main/java/org/bukkit/material/Bed.java +++ b/src/main/java/org/bukkit/material/Bed.java @@ -119,4 +119,9 @@ public class Bed extends MaterialData implements Directional { public String toString() { return (isHeadOfBed() ? "HEAD" : "FOOT") + " of " + super.toString() + " facing " + getFacing(); } + + @Override + public Bed clone() { + return (Bed) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Button.java b/src/main/java/org/bukkit/material/Button.java index fbdc121a..d80e11ec 100644 --- a/src/main/java/org/bukkit/material/Button.java +++ b/src/main/java/org/bukkit/material/Button.java @@ -103,4 +103,9 @@ public class Button extends SimpleAttachableMaterialData implements Redstone { public String toString() { return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; } + + @Override + public Button clone() { + return (Button) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Cake.java b/src/main/java/org/bukkit/material/Cake.java index c9a047dd..a4a13d79 100644 --- a/src/main/java/org/bukkit/material/Cake.java +++ b/src/main/java/org/bukkit/material/Cake.java @@ -68,4 +68,9 @@ public class Cake extends MaterialData { public String toString() { return super.toString() + " " + getSlicesEaten() + "/" + getSlicesRemaining() + " slices eaten/remaining"; } + + @Override + public Cake clone() { + return (Cake) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Coal.java b/src/main/java/org/bukkit/material/Coal.java index 43dfd93b..a1876638 100644 --- a/src/main/java/org/bukkit/material/Coal.java +++ b/src/main/java/org/bukkit/material/Coal.java @@ -54,4 +54,9 @@ public class Coal extends MaterialData { public String toString() { return getType() + " " + super.toString(); } + + @Override + public Coal clone() { + return (Coal) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Crops.java b/src/main/java/org/bukkit/material/Crops.java index c477dcec..04f8ddf2 100644 --- a/src/main/java/org/bukkit/material/Crops.java +++ b/src/main/java/org/bukkit/material/Crops.java @@ -54,4 +54,9 @@ public class Crops extends MaterialData { public String toString() { return getState() + " " + super.toString(); } + + @Override + public Crops clone() { + return (Crops) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/DetectorRail.java b/src/main/java/org/bukkit/material/DetectorRail.java index a32317c7..a75eb8ec 100644 --- a/src/main/java/org/bukkit/material/DetectorRail.java +++ b/src/main/java/org/bukkit/material/DetectorRail.java @@ -33,4 +33,9 @@ public class DetectorRail extends ExtendedRails implements PressureSensor { public void setPressed(boolean isPressed) { setData((byte) (isPressed ? (getData() | 0x8) : (getData() & ~0x8))); } + + @Override + public DetectorRail clone() { + return (DetectorRail) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Diode.java b/src/main/java/org/bukkit/material/Diode.java index 788bc483..6c1930c4 100644 --- a/src/main/java/org/bukkit/material/Diode.java +++ b/src/main/java/org/bukkit/material/Diode.java @@ -100,4 +100,9 @@ public class Diode extends MaterialData implements Directional { public String toString() { return super.toString() + " facing " + getFacing() + " with " + getDelay() + " ticks delay"; } + + @Override + public Diode clone() { + return (Diode) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Dispenser.java b/src/main/java/org/bukkit/material/Dispenser.java index 9931450f..4168d88a 100644 --- a/src/main/java/org/bukkit/material/Dispenser.java +++ b/src/main/java/org/bukkit/material/Dispenser.java @@ -32,4 +32,9 @@ public class Dispenser extends FurnaceAndDispenser { public Dispenser(final Material type, final byte data) { super(type, data); } + + @Override + public Dispenser clone() { + return (Dispenser) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Door.java b/src/main/java/org/bukkit/material/Door.java index 5086555e..14226790 100644 --- a/src/main/java/org/bukkit/material/Door.java +++ b/src/main/java/org/bukkit/material/Door.java @@ -128,4 +128,9 @@ public class Door extends MaterialData implements Directional { } return null; // shouldn't happen } + + @Override + public Door clone() { + return (Door) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Dye.java b/src/main/java/org/bukkit/material/Dye.java index 347dc8eb..e053c7bb 100644 --- a/src/main/java/org/bukkit/material/Dye.java +++ b/src/main/java/org/bukkit/material/Dye.java @@ -49,4 +49,9 @@ public class Dye extends MaterialData implements Colorable { public String toString() { return getColor() + " DYE(" + getData() + ")"; } + + @Override + public Dye clone() { + return (Dye) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/ExtendedRails.java b/src/main/java/org/bukkit/material/ExtendedRails.java index a86a44ff..5d3a9d92 100644 --- a/src/main/java/org/bukkit/material/ExtendedRails.java +++ b/src/main/java/org/bukkit/material/ExtendedRails.java @@ -44,4 +44,9 @@ public class ExtendedRails extends Rails { super.setDirection(face, isOnSlope); setData((byte) (extraBitSet ? (getData() | 0x8) : (getData() & ~0x8))); } + + @Override + public ExtendedRails clone() { + return (ExtendedRails) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Furnace.java b/src/main/java/org/bukkit/material/Furnace.java index dad56bc4..26fadfa6 100644 --- a/src/main/java/org/bukkit/material/Furnace.java +++ b/src/main/java/org/bukkit/material/Furnace.java @@ -37,4 +37,9 @@ public class Furnace extends FurnaceAndDispenser { public Furnace(final Material type, final byte data) { super(type, data); } + + @Override + public Furnace clone() { + return (Furnace) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/FurnaceAndDispenser.java b/src/main/java/org/bukkit/material/FurnaceAndDispenser.java index 9505fb70..af016c2a 100644 --- a/src/main/java/org/bukkit/material/FurnaceAndDispenser.java +++ b/src/main/java/org/bukkit/material/FurnaceAndDispenser.java @@ -70,4 +70,9 @@ public class FurnaceAndDispenser extends MaterialData implements Directional { public String toString() { return super.toString() + " facing " + getFacing(); } + + @Override + public FurnaceAndDispenser clone() { + return (FurnaceAndDispenser) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Ladder.java b/src/main/java/org/bukkit/material/Ladder.java index ae791c68..aea01f8e 100644 --- a/src/main/java/org/bukkit/material/Ladder.java +++ b/src/main/java/org/bukkit/material/Ladder.java @@ -79,4 +79,9 @@ public class Ladder extends SimpleAttachableMaterialData { setData(data); } + + @Override + public Ladder clone() { + return (Ladder) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Leaves.java b/src/main/java/org/bukkit/material/Leaves.java index d02dc90a..5acde607 100644 --- a/src/main/java/org/bukkit/material/Leaves.java +++ b/src/main/java/org/bukkit/material/Leaves.java @@ -54,4 +54,9 @@ public class Leaves extends MaterialData { public String toString() { return getSpecies() + " " + super.toString(); } + + @Override + public Leaves clone() { + return (Leaves) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Lever.java b/src/main/java/org/bukkit/material/Lever.java index 369d16de..9277d77a 100644 --- a/src/main/java/org/bukkit/material/Lever.java +++ b/src/main/java/org/bukkit/material/Lever.java @@ -119,4 +119,9 @@ public class Lever extends SimpleAttachableMaterialData implements Redstone { public String toString() { return super.toString() + " facing " + getFacing() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; } + + @Override + public Lever clone() { + return (Lever) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/LongGrass.java b/src/main/java/org/bukkit/material/LongGrass.java index 8413519e..b9aa345a 100644 --- a/src/main/java/org/bukkit/material/LongGrass.java +++ b/src/main/java/org/bukkit/material/LongGrass.java @@ -54,4 +54,9 @@ public class LongGrass extends MaterialData { public String toString() { return getSpecies() + " " + super.toString(); } + + @Override + public LongGrass clone() { + return (LongGrass) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/MaterialData.java b/src/main/java/org/bukkit/material/MaterialData.java index b24f279c..9e28fcf6 100644 --- a/src/main/java/org/bukkit/material/MaterialData.java +++ b/src/main/java/org/bukkit/material/MaterialData.java @@ -6,7 +6,7 @@ import org.bukkit.Material; /** * Handles specific metadata for certain items or blocks */ -public class MaterialData { +public class MaterialData implements Cloneable { private final int type; private byte data = 0; @@ -102,4 +102,13 @@ public class MaterialData { return false; } } + + @Override + public MaterialData clone() { + try { + return (MaterialData) super.clone(); + } catch (CloneNotSupportedException e) { + throw new Error(e); + } + } } diff --git a/src/main/java/org/bukkit/material/MonsterEggs.java b/src/main/java/org/bukkit/material/MonsterEggs.java index a34a9607..3f141441 100644 --- a/src/main/java/org/bukkit/material/MonsterEggs.java +++ b/src/main/java/org/bukkit/material/MonsterEggs.java @@ -44,4 +44,9 @@ public class MonsterEggs extends TexturedMaterial { public List getTextures() { return textures; } + + @Override + public MonsterEggs clone() { + return (MonsterEggs) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/PistonBaseMaterial.java b/src/main/java/org/bukkit/material/PistonBaseMaterial.java index c2a30e1a..82315530 100644 --- a/src/main/java/org/bukkit/material/PistonBaseMaterial.java +++ b/src/main/java/org/bukkit/material/PistonBaseMaterial.java @@ -88,4 +88,9 @@ public class PistonBaseMaterial extends MaterialData implements Directional, Red public boolean isSticky() { return this.getItemType() == Material.PISTON_STICKY_BASE; } + + @Override + public PistonBaseMaterial clone() { + return (PistonBaseMaterial) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/PistonExtensionMaterial.java b/src/main/java/org/bukkit/material/PistonExtensionMaterial.java index 47edc5cd..f513f231 100644 --- a/src/main/java/org/bukkit/material/PistonExtensionMaterial.java +++ b/src/main/java/org/bukkit/material/PistonExtensionMaterial.java @@ -88,4 +88,9 @@ public class PistonExtensionMaterial extends MaterialData implements Attachable public BlockFace getAttachedFace() { return getFacing().getOppositeFace(); } + + @Override + public PistonExtensionMaterial clone() { + return (PistonExtensionMaterial) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/PoweredRail.java b/src/main/java/org/bukkit/material/PoweredRail.java index 857c4499..a8f627cc 100644 --- a/src/main/java/org/bukkit/material/PoweredRail.java +++ b/src/main/java/org/bukkit/material/PoweredRail.java @@ -38,4 +38,9 @@ public class PoweredRail extends ExtendedRails implements Redstone { public void setPowered(boolean isPowered) { setData((byte) (isPowered ? (getData() | 0x8) : (getData() & ~0x8))); } + + @Override + public PoweredRail clone() { + return (PoweredRail) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/PressurePlate.java b/src/main/java/org/bukkit/material/PressurePlate.java index 3946cbc9..2be71918 100644 --- a/src/main/java/org/bukkit/material/PressurePlate.java +++ b/src/main/java/org/bukkit/material/PressurePlate.java @@ -34,4 +34,9 @@ public class PressurePlate extends MaterialData implements PressureSensor { public String toString() { return super.toString() + (isPressed() ? " PRESSED" : ""); } + + @Override + public PressurePlate clone() { + return (PressurePlate) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Pumpkin.java b/src/main/java/org/bukkit/material/Pumpkin.java index 78ec3aa0..4acc6bb0 100644 --- a/src/main/java/org/bukkit/material/Pumpkin.java +++ b/src/main/java/org/bukkit/material/Pumpkin.java @@ -89,4 +89,9 @@ public class Pumpkin extends MaterialData implements Directional { public String toString() { return super.toString() + " facing " + getFacing() + " " + (isLit() ? "" : "NOT ") + "LIT"; } + + @Override + public Pumpkin clone() { + return (Pumpkin) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Rails.java b/src/main/java/org/bukkit/material/Rails.java index cfe812fc..406675dc 100644 --- a/src/main/java/org/bukkit/material/Rails.java +++ b/src/main/java/org/bukkit/material/Rails.java @@ -149,4 +149,9 @@ public class Rails extends MaterialData { break; } } + + @Override + public Rails clone() { + return (Rails) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/RedstoneTorch.java b/src/main/java/org/bukkit/material/RedstoneTorch.java index 85ee722d..4312e227 100644 --- a/src/main/java/org/bukkit/material/RedstoneTorch.java +++ b/src/main/java/org/bukkit/material/RedstoneTorch.java @@ -40,4 +40,9 @@ public class RedstoneTorch extends Torch implements Redstone { public String toString() { return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; } + + @Override + public RedstoneTorch clone() { + return (RedstoneTorch) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/RedstoneWire.java b/src/main/java/org/bukkit/material/RedstoneWire.java index 1b6264d5..ac0843da 100644 --- a/src/main/java/org/bukkit/material/RedstoneWire.java +++ b/src/main/java/org/bukkit/material/RedstoneWire.java @@ -40,4 +40,9 @@ public class RedstoneWire extends MaterialData implements Redstone { public String toString() { return super.toString() + " " + (isPowered() ? "" : "NOT ") + "POWERED"; } + + @Override + public RedstoneWire clone() { + return (RedstoneWire) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Sign.java b/src/main/java/org/bukkit/material/Sign.java index 5ec101f4..ceb15d87 100644 --- a/src/main/java/org/bukkit/material/Sign.java +++ b/src/main/java/org/bukkit/material/Sign.java @@ -227,4 +227,9 @@ public class Sign extends MaterialData implements Attachable { public String toString() { return super.toString() + " facing " + getFacing(); } + + @Override + public Sign clone() { + return (Sign) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java b/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java index ec5778f0..bc3a4ff8 100644 --- a/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java +++ b/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java @@ -42,4 +42,9 @@ public abstract class SimpleAttachableMaterialData extends MaterialData implemen public String toString() { return super.toString() + " facing " + getFacing(); } + + @Override + public SimpleAttachableMaterialData clone() { + return (SimpleAttachableMaterialData) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/SmoothBrick.java b/src/main/java/org/bukkit/material/SmoothBrick.java index 7f82b773..9c0d1784 100644 --- a/src/main/java/org/bukkit/material/SmoothBrick.java +++ b/src/main/java/org/bukkit/material/SmoothBrick.java @@ -45,4 +45,8 @@ public class SmoothBrick extends TexturedMaterial { return textures; } + @Override + public SmoothBrick clone() { + return (SmoothBrick) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Stairs.java b/src/main/java/org/bukkit/material/Stairs.java index f7e249cf..04f59b7f 100644 --- a/src/main/java/org/bukkit/material/Stairs.java +++ b/src/main/java/org/bukkit/material/Stairs.java @@ -92,4 +92,9 @@ public class Stairs extends MaterialData implements Directional { public String toString() { return super.toString() + " facing " + getFacing(); } + + @Override + public Stairs clone() { + return (Stairs) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Step.java b/src/main/java/org/bukkit/material/Step.java index f08b772e..ba36bd83 100644 --- a/src/main/java/org/bukkit/material/Step.java +++ b/src/main/java/org/bukkit/material/Step.java @@ -46,4 +46,9 @@ public class Step extends TexturedMaterial { public List getTextures() { return textures; } + + @Override + public Step clone() { + return (Step) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/TexturedMaterial.java b/src/main/java/org/bukkit/material/TexturedMaterial.java index 93b13d72..3fbd815f 100644 --- a/src/main/java/org/bukkit/material/TexturedMaterial.java +++ b/src/main/java/org/bukkit/material/TexturedMaterial.java @@ -65,4 +65,8 @@ public abstract class TexturedMaterial extends MaterialData { return getMaterial() + " " + super.toString(); } + @Override + public TexturedMaterial clone() { + return (TexturedMaterial) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Torch.java b/src/main/java/org/bukkit/material/Torch.java index 3105a130..13a9777e 100644 --- a/src/main/java/org/bukkit/material/Torch.java +++ b/src/main/java/org/bukkit/material/Torch.java @@ -82,4 +82,9 @@ public class Torch extends SimpleAttachableMaterialData { setData(data); } + + @Override + public Torch clone() { + return (Torch) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/TrapDoor.java b/src/main/java/org/bukkit/material/TrapDoor.java index 2fa9b590..f709fcf9 100644 --- a/src/main/java/org/bukkit/material/TrapDoor.java +++ b/src/main/java/org/bukkit/material/TrapDoor.java @@ -80,4 +80,8 @@ public class TrapDoor extends SimpleAttachableMaterialData { return (isOpen() ? "OPEN " : "CLOSED ") + super.toString() + " with hinges set " + getAttachedFace(); } + @Override + public TrapDoor clone() { + return (TrapDoor) super.clone(); + } } \ No newline at end of file diff --git a/src/main/java/org/bukkit/material/Tree.java b/src/main/java/org/bukkit/material/Tree.java index 1d4f0b55..5a909656 100644 --- a/src/main/java/org/bukkit/material/Tree.java +++ b/src/main/java/org/bukkit/material/Tree.java @@ -54,4 +54,9 @@ public class Tree extends MaterialData { public String toString() { return getSpecies() + " " + super.toString(); } + + @Override + public Tree clone() { + return (Tree) super.clone(); + } } diff --git a/src/main/java/org/bukkit/material/Wool.java b/src/main/java/org/bukkit/material/Wool.java index 8f398ac7..00f2a2ca 100644 --- a/src/main/java/org/bukkit/material/Wool.java +++ b/src/main/java/org/bukkit/material/Wool.java @@ -54,4 +54,9 @@ public class Wool extends MaterialData implements Colorable { public String toString() { return getColor() + " " + super.toString(); } + + @Override + public Wool clone() { + return (Wool) super.clone(); + } } diff --git a/src/main/java/org/bukkit/util/BlockVector.java b/src/main/java/org/bukkit/util/BlockVector.java index 8cdd4280..bdf8f6d5 100644 --- a/src/main/java/org/bukkit/util/BlockVector.java +++ b/src/main/java/org/bukkit/util/BlockVector.java @@ -105,12 +105,7 @@ public class BlockVector extends Vector { */ @Override public BlockVector clone() { - BlockVector v = (BlockVector) super.clone(); - - v.x = x; - v.y = y; - v.z = z; - return v; + return (BlockVector) super.clone(); } public static BlockVector deserialize(Map args) { diff --git a/src/main/java/org/bukkit/util/Vector.java b/src/main/java/org/bukkit/util/Vector.java index 0cceb5f1..9b1376bf 100644 --- a/src/main/java/org/bukkit/util/Vector.java +++ b/src/main/java/org/bukkit/util/Vector.java @@ -546,16 +546,10 @@ public class Vector implements Cloneable, ConfigurationSerializable { @Override public Vector clone() { try { - Vector v = (Vector) super.clone(); - - v.x = x; - v.y = y; - v.z = z; - return v; + return (Vector) super.clone(); } catch (CloneNotSupportedException e) { - e.printStackTrace(); + throw new Error(e); } - return null; } /**