This commit is contained in:
MattBDev 2016-04-05 23:50:04 -04:00
parent c5282b29b2
commit d49de5297b
10 changed files with 165 additions and 121 deletions

View File

@ -33,17 +33,17 @@ import java.util.UUID;
/** /**
* PlotSquared API. * PlotSquared API.
* <br> *
* <br> * <p>Useful classes:</p>
* Useful classes:<br> * <ul>
* @see BukkitUtil * <li>{@link BukkitUtil}</li>
* @see PlotPlayer * <li>{@link PlotPlayer}</li>
* @see Plot * <li>{@link Plot}</li>
* @see com.intellectualcrafters.plot.object.Location * <li>{@link com.intellectualcrafters.plot.object.Location}</li>
* @see PlotArea * <li>{@link PlotArea}</li>
* @see PS * <li>{@link PS}</li>
* </ul>
* @version 3.3.3 * @version 3.3.3
>>>>>>> origin/master
*/ */
public class PlotAPI { public class PlotAPI {

View File

@ -22,7 +22,6 @@ import com.intellectualcrafters.plot.util.RegExUtil;
import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.StringMan;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import com.plotsquared.bukkit.BukkitMain;
import com.plotsquared.bukkit.object.BukkitLazyBlock; import com.plotsquared.bukkit.object.BukkitLazyBlock;
import com.plotsquared.bukkit.object.BukkitPlayer; import com.plotsquared.bukkit.object.BukkitPlayer;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
@ -738,7 +737,7 @@ public class PlayerEvents extends PlotListener implements Listener {
plotExit(pp, plot); plotExit(pp, plot);
} }
if (BukkitMain.worldEdit != null && PS.get().worldedit != null) { if (true && PS.get().worldedit != null) {
if (!Permissions.hasPermission(pp, C.PERMISSION_WORLDEDIT_BYPASS)) { if (!Permissions.hasPermission(pp, C.PERMISSION_WORLDEDIT_BYPASS)) {
if (pp.getAttribute("worldedit")) { if (pp.getAttribute("worldedit")) {
pp.removeAttribute("worldedit"); pp.removeAttribute("worldedit");

View File

@ -9,6 +9,8 @@ import org.bukkit.World;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.Ageable; import org.bukkit.entity.Ageable;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Bat;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Guardian; import org.bukkit.entity.Guardian;
@ -16,6 +18,7 @@ import org.bukkit.entity.Horse;
import org.bukkit.entity.Horse.Color; import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Horse.Style; import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant; import org.bukkit.entity.Horse.Variant;
import org.bukkit.entity.IronGolem;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.entity.ItemFrame; import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@ -25,6 +28,7 @@ import org.bukkit.entity.Rabbit.Type;
import org.bukkit.entity.Sheep; import org.bukkit.entity.Sheep;
import org.bukkit.entity.Skeleton; import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.entity.Skeleton.SkeletonType;
import org.bukkit.entity.Slime;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
@ -39,10 +43,10 @@ public class EntityWrapper {
public final float pitch; public final float pitch;
public final short depth; public final short depth;
private final int hash; private final int hash;
private final EntityBaseStats base = new EntityBaseStats();
public double x; public double x;
public double y; public double y;
public double z; public double z;
public EntityBaseStats base = null;
// Extended // Extended
public ItemStack stack; public ItemStack stack;
public ItemStack[] inventory; public ItemStack[] inventory;
@ -52,10 +56,9 @@ public class EntityWrapper {
public LivingEntityStats lived; public LivingEntityStats lived;
public AgeableStats aged; public AgeableStats aged;
public TameableStats tamed; public TameableStats tamed;
ArmorStandStats stand;
private HorseStats horse; private HorseStats horse;
private ArmorStandStats stand;
@SuppressWarnings("deprecation")
public EntityWrapper(Entity entity, short depth) { public EntityWrapper(Entity entity, short depth) {
this.hash = entity.getEntityId(); this.hash = entity.getEntityId();
this.depth = depth; this.depth = depth;
@ -69,10 +72,9 @@ public class EntityWrapper {
if (depth == 0) { if (depth == 0) {
return; return;
} }
this.base = new EntityBaseStats(); Entity passenger = entity.getPassenger();
Entity p = entity.getPassenger(); if (passenger != null) {
if (p != null) { this.base.passenger = new EntityWrapper(passenger, depth);
this.base.passenger = new EntityWrapper(p, depth);
} }
this.base.fall = entity.getFallDistance(); this.base.fall = entity.getFallDistance();
this.base.fire = (short) entity.getFireTicks(); this.base.fire = (short) entity.getFireTicks();
@ -168,10 +170,10 @@ public class EntityWrapper {
this.horse.variant = getOrdinal(Variant.values(), horse.getVariant()); this.horse.variant = getOrdinal(Variant.values(), horse.getVariant());
this.horse.style = getOrdinal(Style.values(), horse.getStyle()); this.horse.style = getOrdinal(Style.values(), horse.getStyle());
this.horse.color = getOrdinal(Color.values(), horse.getColor()); this.horse.color = getOrdinal(Color.values(), horse.getColor());
storeTameable((Tameable) entity); storeTameable(horse);
storeAgeable((Ageable) entity); storeAgeable(horse);
storeLiving((LivingEntity) entity); storeLiving(horse);
storeInventory((InventoryHolder) entity); storeInventory(horse);
return; return;
// END INVENTORY HOLDER // // END INVENTORY HOLDER //
case WOLF: case WOLF:
@ -185,8 +187,8 @@ public class EntityWrapper {
Sheep sheep = (Sheep) entity; Sheep sheep = (Sheep) entity;
this.dataByte = (byte) (sheep.isSheared() ? 1 : 0); this.dataByte = (byte) (sheep.isSheared() ? 1 : 0);
this.dataByte2 = sheep.getColor().getDyeData(); this.dataByte2 = sheep.getColor().getDyeData();
storeAgeable((Ageable) entity); storeAgeable(sheep);
storeLiving((LivingEntity) entity); storeLiving(sheep);
return; return;
case VILLAGER: case VILLAGER:
case CHICKEN: case CHICKEN:
@ -196,26 +198,25 @@ public class EntityWrapper {
storeAgeable((Ageable) entity); storeAgeable((Ageable) entity);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
case RABBIT: // NEW case RABBIT:
this.dataByte = getOrdinal(Type.values(), ((Rabbit) entity).getRabbitType()); this.dataByte = getOrdinal(Type.values(), ((Rabbit) entity).getRabbitType());
storeAgeable((Ageable) entity); storeAgeable((Ageable) entity);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
// END AGEABLE // // END AGEABLE //
case GUARDIAN: // NEW case GUARDIAN:
this.dataByte = (byte) (((Guardian) entity).isElder() ? 1 : 0); this.dataByte = (byte) (((Guardian) entity).isElder() ? 1 : 0);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
case SKELETON: // NEW case SKELETON:
this.dataByte = (byte) ((Skeleton) entity).getSkeletonType().getId(); this.dataByte = (byte) ((Skeleton) entity).getSkeletonType().getId();
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
case ARMOR_STAND: // NEW case ARMOR_STAND:
// CHECK positions
ArmorStand stand = (ArmorStand) entity; ArmorStand stand = (ArmorStand) entity;
this.inventory = new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(), stand.getChestplate().clone(), this.inventory = new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(), stand.getChestplate().clone(),
stand.getLeggings().clone(), stand.getBoots().clone()}; stand.getLeggings().clone(), stand.getBoots().clone()};
storeLiving((LivingEntity) entity); storeLiving(stand);
this.stand = new ArmorStandStats(); this.stand = new ArmorStandStats();
EulerAngle head = stand.getHeadPose(); EulerAngle head = stand.getHeadPose();
@ -264,9 +265,19 @@ public class EntityWrapper {
this.stand.small = true; this.stand.small = true;
} }
return; return;
case ENDERMITE: // NEW case ENDERMITE:
return;
case BAT: case BAT:
if (((Bat) entity).isAwake()) {
this.dataByte = (byte) 1;
} else {
this.dataByte = (byte) 0;
}
return;
case ENDER_DRAGON: case ENDER_DRAGON:
EnderDragon entity1 = (EnderDragon) entity;
this.dataByte = (byte) entity1.getPhase().ordinal();
return;
case GHAST: case GHAST:
case MAGMA_CUBE: case MAGMA_CUBE:
case SQUID: case SQUID:
@ -283,8 +294,16 @@ public class EntityWrapper {
case BLAZE: case BLAZE:
case SHULKER: case SHULKER:
case SNOWMAN: case SNOWMAN:
case IRON_GOLEM:
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return;
case IRON_GOLEM:
if (((IronGolem) entity).isPlayerCreated()) {
this.dataByte = (byte) 1;
} else {
this.dataByte = (byte) 0;
}
storeLiving((LivingEntity) entity);
return;
// END LIVING // // END LIVING //
} }
} }
@ -303,7 +322,7 @@ public class EntityWrapper {
this.inventory = held.getInventory().getContents().clone(); this.inventory = held.getInventory().getContents().clone();
} }
private void restoreLiving(LivingEntity entity) { void restoreLiving(LivingEntity entity) {
entity.setCanPickupItems(this.lived.loot); entity.setCanPickupItems(this.lived.loot);
if (this.lived.name != null) { if (this.lived.name != null) {
entity.setCustomName(this.lived.name); entity.setCustomName(this.lived.name);
@ -315,12 +334,7 @@ public class EntityWrapper {
entity.setRemainingAir(this.lived.air); entity.setRemainingAir(this.lived.air);
entity.setRemoveWhenFarAway(this.lived.persistent); entity.setRemoveWhenFarAway(this.lived.persistent);
if (this.lived.equipped) { if (this.lived.equipped) {
EntityEquipment equipment = entity.getEquipment(); this.restoreEquipment(entity);
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 (this.lived.leashed) { if (this.lived.leashed) {
// TODO leashes // TODO leashes
@ -331,6 +345,20 @@ public class EntityWrapper {
} }
} }
void restoreEquipment(LivingEntity entity) {
EntityEquipment equipment = entity.getEquipment();
if (PS.get().checkVersion(PS.get().IMP.getServerVersion(), 1, 9, 0)) {
equipment.setItemInMainHand(this.lived.mainHand);
equipment.setItemInOffHand(this.lived.offHand);
} else {
equipment.setItemInHand(this.lived.mainHand);
}
equipment.setHelmet(this.lived.helmet);
equipment.setChestplate(this.lived.chestplate);
equipment.setLeggings(this.lived.leggings);
equipment.setBoots(this.lived.boots);
}
private void restoreInventory(InventoryHolder entity) { private void restoreInventory(InventoryHolder entity) {
entity.getInventory().setContents(this.inventory); entity.getInventory().setContents(this.inventory);
} }
@ -354,13 +382,23 @@ public class EntityWrapper {
EntityEquipment equipment = lived.getEquipment(); EntityEquipment equipment = lived.getEquipment();
this.lived.equipped = equipment != null; this.lived.equipped = equipment != null;
if (this.lived.equipped) { if (this.lived.equipped) {
this.lived.hands = equipment.getItemInHand().clone(); storeEquipment(equipment);
}
}
void storeEquipment(EntityEquipment equipment) {
if (PS.get().checkVersion(PS.get().IMP.getServerVersion(), 1, 9, 0)) {
this.lived.mainHand = equipment.getItemInMainHand().clone();
this.lived.offHand = equipment.getItemInOffHand().clone();
} else {
this.lived.mainHand = equipment.getItemInHand().clone();
this.lived.offHand = null;
}
this.lived.boots = equipment.getBoots().clone(); this.lived.boots = equipment.getBoots().clone();
this.lived.leggings = equipment.getLeggings().clone(); this.lived.leggings = equipment.getLeggings().clone();
this.lived.chestplate = equipment.getChestplate().clone(); this.lived.chestplate = equipment.getChestplate().clone();
this.lived.helmet = equipment.getHelmet().clone(); this.lived.helmet = equipment.getHelmet().clone();
} }
}
private void restoreTameable(Tameable entity) { private void restoreTameable(Tameable entity) {
if (this.tamed.tamed) { if (this.tamed.tamed) {
@ -394,7 +432,6 @@ public class EntityWrapper {
this.tamed.tamed = tamed.isTamed(); this.tamed.tamed = tamed.isTamed();
} }
@SuppressWarnings("deprecation")
public Entity spawn(World world, int x_offset, int z_offset) { public Entity spawn(World world, int x_offset, int z_offset) {
Location loc = new Location(world, this.x + x_offset, this.y, this.z + z_offset); Location loc = new Location(world, this.x + x_offset, this.y, this.z + z_offset);
loc.setYaw(this.yaw); loc.setYaw(this.yaw);
@ -449,6 +486,7 @@ public class EntityWrapper {
case ENDER_CRYSTAL: case ENDER_CRYSTAL:
case ENDER_PEARL: case ENDER_PEARL:
case ENDER_SIGNAL: case ENDER_SIGNAL:
case DROPPED_ITEM:
case EXPERIENCE_ORB: case EXPERIENCE_ORB:
case FALLING_BLOCK: case FALLING_BLOCK:
case FIREBALL: case FIREBALL:
@ -463,11 +501,19 @@ public class EntityWrapper {
case PLAYER: case PLAYER:
case PRIMED_TNT: case PRIMED_TNT:
case SLIME: case SLIME:
((Slime) entity).setSize(this.dataByte);
return entity;
case SMALL_FIREBALL: case SMALL_FIREBALL:
case SNOWBALL: case SNOWBALL:
case SPLASH_POTION: case SPLASH_POTION:
case THROWN_EXP_BOTTLE: case THROWN_EXP_BOTTLE:
case WEATHER: case WEATHER:
case TIPPED_ARROW:
case SPECTRAL_ARROW:
case SHULKER_BULLET:
case LINGERING_POTION:
case AREA_EFFECT_CLOUD:
case DRAGON_FIREBALL:
case WITHER_SKULL: case WITHER_SKULL:
case MINECART_FURNACE: case MINECART_FURNACE:
case UNKNOWN: case UNKNOWN:
@ -503,10 +549,10 @@ public class EntityWrapper {
horse.setVariant(Variant.values()[this.horse.variant]); horse.setVariant(Variant.values()[this.horse.variant]);
horse.setStyle(Style.values()[this.horse.style]); horse.setStyle(Style.values()[this.horse.style]);
horse.setColor(Color.values()[this.horse.color]); horse.setColor(Color.values()[this.horse.color]);
restoreTameable((Tameable) entity); restoreTameable(horse);
restoreAgeable((Ageable) entity); restoreAgeable(horse);
restoreLiving((LivingEntity) entity); restoreLiving(horse);
restoreInventory((InventoryHolder) entity); restoreInventory(horse);
return entity; return entity;
// END INVENTORY HOLDER // // END INVENTORY HOLDER //
case WOLF: case WOLF:
@ -524,9 +570,9 @@ public class EntityWrapper {
if (this.dataByte2 != 0) { if (this.dataByte2 != 0) {
sheep.setColor(DyeColor.getByDyeData(this.dataByte2)); sheep.setColor(DyeColor.getByDyeData(this.dataByte2));
} }
restoreAgeable((Ageable) entity); restoreAgeable(sheep);
restoreLiving((LivingEntity) entity); restoreLiving(sheep);
return entity; return sheep;
case VILLAGER: case VILLAGER:
case CHICKEN: case CHICKEN:
case COW: case COW:
@ -536,26 +582,26 @@ public class EntityWrapper {
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
// END AGEABLE // // END AGEABLE //
case RABBIT: // NEW case RABBIT:
if (this.dataByte != 0) { if (this.dataByte != 0) {
((Rabbit) entity).setRabbitType(Type.values()[this.dataByte]); ((Rabbit) entity).setRabbitType(Type.values()[this.dataByte]);
} }
restoreAgeable((Ageable) entity); restoreAgeable((Ageable) entity);
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
case GUARDIAN: // NEW case GUARDIAN:
if (this.dataByte != 0) { if (this.dataByte != 0) {
((Guardian) entity).setElder(true); ((Guardian) entity).setElder(true);
} }
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
case SKELETON: // NEW case SKELETON:
if (this.dataByte != 0) { if (this.dataByte != 0) {
((Skeleton) entity).setSkeletonType(SkeletonType.values()[this.dataByte]); ((Skeleton) entity).setSkeletonType(SkeletonType.values()[this.dataByte]);
} }
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return entity; return entity;
case ARMOR_STAND: // NEW case ARMOR_STAND:
// CHECK positions // CHECK positions
ArmorStand stand = (ArmorStand) entity; ArmorStand stand = (ArmorStand) entity;
if (this.inventory[0] != null) { if (this.inventory[0] != null) {
@ -612,11 +658,21 @@ public class EntityWrapper {
if (this.stand.small) { if (this.stand.small) {
stand.setSmall(true); stand.setSmall(true);
} }
restoreLiving(stand);
return stand;
case BAT:
if (this.dataByte != 0) {
((Bat) entity).setAwake(true);
}
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
case ENDERMITE: // NEW
case BAT:
case ENDER_DRAGON: case ENDER_DRAGON:
if (this.dataByte != 0) {
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
}
restoreLiving((LivingEntity) entity);
return entity;
case ENDERMITE:
case GHAST: case GHAST:
case MAGMA_CUBE: case MAGMA_CUBE:
case SQUID: case SQUID:
@ -632,7 +688,13 @@ public class EntityWrapper {
case CREEPER: case CREEPER:
case BLAZE: case BLAZE:
case SNOWMAN: case SNOWMAN:
case SHULKER:
restoreLiving((LivingEntity) entity);
return entity;
case IRON_GOLEM: case IRON_GOLEM:
if (this.dataByte != 0) {
((IronGolem) entity).setPlayerCreated(true);
}
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
// END LIVING // // END LIVING //

View File

@ -1,10 +1,10 @@
package com.plotsquared.bukkit.object.entity; package com.plotsquared.bukkit.object.entity;
import java.util.Collection;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import java.util.Collection;
public class LivingEntityStats { public class LivingEntityStats {
public boolean loot; public boolean loot;
public String name; public String name;
@ -17,10 +17,11 @@ public class LivingEntityStats {
public short leash_y; public short leash_y;
public short leash_z; public short leash_z;
public boolean equipped; public boolean equipped;
public ItemStack hands; public ItemStack mainHand;
public ItemStack helmet; public ItemStack helmet;
public ItemStack boots; public ItemStack boots;
public ItemStack leggings; public ItemStack leggings;
public ItemStack chestplate; public ItemStack chestplate;
public Collection<PotionEffect> potions; public Collection<PotionEffect> potions;
public ItemStack offHand;
} }

View File

@ -854,25 +854,20 @@ public class BukkitChunkManager extends ChunkManager {
BlockState state = block.getState(); BlockState state = block.getState();
if (state instanceof Skull) { if (state instanceof Skull) {
Object[] data = blockLocEntry.getValue(); Object[] data = blockLocEntry.getValue();
if (data[0] != null) { if ((Boolean) data[0]) {
((Skull) state).setOwner((String) data[0]); ((Skull) state).setOwner((String) data[1]);
}
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]]);
} }
((Skull) state).setRotation((BlockFace) data[2]);
((Skull) state).setSkullType((SkullType) data[3]);
state.update(true); state.update(true);
} else { } else {
PS.debug("&c[WARN] Plot clear failed to restore skull: " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry PS.debug("&c[WARN] Plot clear failed to restore skull: " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry
.getKey().y .getKey().y + "," + (blockLocEntry.getKey().z + zOffset));
+ "," + (
blockLocEntry.getKey().z + zOffset));
} }
} catch (Exception e) { } catch (Exception e) {
PS.debug("&c[WARN] Plot clear failed to regenerate skull (e): " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry PS.debug("&c[WARN] Plot clear failed to regenerate skull (e): " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry
.getKey().y + "," + (blockLocEntry.getKey().z + zOffset)); .getKey().y + "," + (blockLocEntry.getKey().z + zOffset));
e.printStackTrace();
} }
} }
for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.hopperContents.entrySet()) { for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.hopperContents.entrySet()) {
@ -989,10 +984,7 @@ public class BukkitChunkManager extends ChunkManager {
} }
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
PS.debug("&c[WARN] Plot clear failed to regenerate brewing stand (e): " + (blockLocEntry.getKey().x + xOffset) + "," PS.debug("&c[WARN] Plot clear failed to regenerate brewing stand (e): " + (blockLocEntry.getKey().x + xOffset) + ","
+ blockLocEntry + blockLocEntry.getKey().y + "," + (blockLocEntry.getKey().z + zOffset));
.getKey().y + "," + (
blockLocEntry.getKey().z
+ zOffset));
} }
} }
for (Entry<BlockLoc, Short[]> blockLocEntry : this.furnaceTime.entrySet()) { for (Entry<BlockLoc, Short[]> blockLocEntry : this.furnaceTime.entrySet()) {
@ -1007,14 +999,12 @@ public class BukkitChunkManager extends ChunkManager {
} else { } else {
PS.debug( PS.debug(
"&c[WARN] Plot clear failed to restore furnace cooking: " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry "&c[WARN] Plot clear failed to restore furnace cooking: " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry
.getKey().y + "," + ( .getKey().y + "," + (blockLocEntry.getKey().z + zOffset));
blockLocEntry.getKey().z + zOffset));
} }
} catch (Exception e) { } catch (Exception e) {
PS.debug( PS.debug(
"&c[WARN] Plot clear failed to restore furnace cooking (e): " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry "&c[WARN] Plot clear failed to restore furnace cooking (e): " + (blockLocEntry.getKey().x + xOffset) + "," + blockLocEntry
.getKey().y + "," + ( .getKey().y + "," + (blockLocEntry.getKey().z + zOffset));
blockLocEntry.getKey().z + zOffset));
} }
} }
for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.furnaceContents.entrySet()) { for (Entry<BlockLoc, ItemStack[]> blockLocEntry : this.furnaceContents.entrySet()) {
@ -1048,15 +1038,11 @@ public class BukkitChunkManager extends ChunkManager {
state.update(true); state.update(true);
} else { } else {
PS.debug("&c[WARN] Plot clear failed to regenerate banner: " + (blockLocByteEntry.getKey().x + xOffset) + "," PS.debug("&c[WARN] Plot clear failed to regenerate banner: " + (blockLocByteEntry.getKey().x + xOffset) + ","
+ blockLocByteEntry + blockLocByteEntry.getKey().y + "," + (blockLocByteEntry.getKey().z + zOffset));
.getKey().y + "," + (
blockLocByteEntry.getKey().z + zOffset));
} }
} catch (Exception e) { } catch (Exception e) {
PS.debug("&c[WARN] Plot clear failed to regenerate banner (e): " + (blockLocByteEntry.getKey().x + xOffset) + "," PS.debug("&c[WARN] Plot clear failed to regenerate banner (e): " + (blockLocByteEntry.getKey().x + xOffset) + ","
+ blockLocByteEntry + blockLocByteEntry.getKey().y + "," + (blockLocByteEntry.getKey().z + zOffset));
.getKey().y + "," + (
blockLocByteEntry.getKey().z + zOffset));
} }
} }
} }
@ -1134,11 +1120,7 @@ public class BukkitChunkManager extends ChunkManager {
} }
} else if (block.getState() instanceof Skull) { } else if (block.getState() instanceof Skull) {
Skull skull = (Skull) block.getState(); Skull skull = (Skull) block.getState();
String o = skull.getOwner(); this.skullData.put(bl, new Object[]{skull.hasOwner(), skull.getOwner(), skull.getRotation(), skull.getSkullType()});
byte skullType = getOrdinal(SkullType.values(), skull.getSkullType());
skull.getRotation();
short rot = getOrdinal(BlockFace.values(), skull.getRotation());
this.skullData.put(bl, new Object[]{o, rot, skullType});
} else if (block.getState() instanceof Banner) { } else if (block.getState() instanceof Banner) {
Banner banner = (Banner) block.getState(); Banner banner = (Banner) block.getState();
DyeColor base = banner.getBaseColor(); DyeColor base = banner.getBaseColor();

View File

@ -74,14 +74,14 @@ public class SQLUUIDHandler extends UUIDHandlerImplementation {
public void run() { public void run() {
try { try {
HashBiMap<StringWrapper, UUID> toAdd = HashBiMap.create(new HashMap<StringWrapper, UUID>()); HashBiMap<StringWrapper, UUID> toAdd = HashBiMap.create(new HashMap<StringWrapper, UUID>());
PreparedStatement statement = getConnection().prepareStatement("SELECT `uuid`, `username` FROM `usercache`"); try (PreparedStatement statement = getConnection().prepareStatement("SELECT `uuid`, `username` FROM `usercache`");
ResultSet resultSet = statement.executeQuery(); ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) { while (resultSet.next()) {
StringWrapper username = new StringWrapper(resultSet.getString("username")); StringWrapper username = new StringWrapper(resultSet.getString("username"));
UUID uuid = UUID.fromString(resultSet.getString("uuid")); UUID uuid = UUID.fromString(resultSet.getString("uuid"));
toAdd.put(new StringWrapper(username.value), uuid); toAdd.put(new StringWrapper(username.value), uuid);
} }
statement.close(); }
add(toAdd); add(toAdd);
add(new StringWrapper("*"), DBFunc.everyone); add(new StringWrapper("*"), DBFunc.everyone);

View File

@ -141,7 +141,7 @@ public class Area extends SubCommand {
} }
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
CmdConfirm.addPending(player, "/plot area create pos2 (Creates world)", run); CmdConfirm.addPending(player, getCommandString() + " create pos2 (Creates world)", run);
} else { } else {
run.run(); run.run();
} }
@ -172,7 +172,7 @@ public class Area extends SubCommand {
for (int i = 2; i < args.length; i++) { for (int i = 2; i < args.length; i++) {
String[] pair = args[i].split("="); String[] pair = args[i].split("=");
if (pair.length != 2) { if (pair.length != 2) {
C.COMMAND_SYNTAX.send(player, "/plot area create [world[:id]] [<modifier>=<value>]..."); C.COMMAND_SYNTAX.send(player, getCommandString() + " create [world[:id]] [<modifier>=<value>]...");
return false; return false;
} }
switch (pair[0].toLowerCase()) { switch (pair[0].toLowerCase()) {
@ -218,7 +218,7 @@ public class Area extends SubCommand {
object.type = pa.TYPE; object.type = pa.TYPE;
break; break;
default: default:
C.COMMAND_SYNTAX.send(player, "/plot area create [world[:id]] [<modifier>=<value>]..."); C.COMMAND_SYNTAX.send(player, getCommandString() + " create [world[:id]] [<modifier>=<value>]...");
return false; return false;
} }
} }
@ -254,14 +254,14 @@ public class Area extends SubCommand {
} }
}; };
if (hasConfirmation(player)) { if (hasConfirmation(player)) {
CmdConfirm.addPending(player, "/plot area " + StringMan.join(args, " "), run); CmdConfirm.addPending(player, getCommandString() + " " + StringMan.join(args, " "), run);
} else { } else {
run.run(); run.run();
} }
return true; return true;
} }
if (pa.id == null) { if (pa.id == null) {
C.COMMAND_SYNTAX.send(player, "/plot area create [world[:id]] [<modifier>=<value>]..."); C.COMMAND_SYNTAX.send(player, getCommandString() + " create [world[:id]] [<modifier>=<value>]...");
return false; return false;
} }
if (WorldUtil.IMP.isWorld(pa.worldname)) { if (WorldUtil.IMP.isWorld(pa.worldname)) {
@ -275,7 +275,7 @@ public class Area extends SubCommand {
player.teleport(WorldUtil.IMP.getSpawn(pa.worldname)); player.teleport(WorldUtil.IMP.getSpawn(pa.worldname));
} }
player.setMeta("area_create_area", pa); player.setMeta("area_create_area", pa);
MainUtil.sendMessage(player, "$1Go to the first corner and use: $2/plot area create pos1"); MainUtil.sendMessage(player, "$1Go to the first corner and use: $2 " + getCommandString() + " create pos1");
break; break;
} }
return true; return true;
@ -294,7 +294,7 @@ public class Area extends SubCommand {
area = PS.get().getPlotAreaByString(args[1]); area = PS.get().getPlotAreaByString(args[1]);
break; break;
default: default:
C.COMMAND_SYNTAX.send(player, "/plot area info [area]"); C.COMMAND_SYNTAX.send(player, getCommandString() + " info [area]");
return false; return false;
} }
if (area == null) { if (area == null) {
@ -351,7 +351,7 @@ public class Area extends SubCommand {
break; break;
} }
default: default:
C.COMMAND_SYNTAX.send(player, "/plot area list [#]"); C.COMMAND_SYNTAX.send(player, getCommandString() + " list [#]");
return false; return false;
} }
ArrayList<PlotArea> areas = new ArrayList<>(PS.get().getPlotAreas()); ArrayList<PlotArea> areas = new ArrayList<>(PS.get().getPlotAreas());
@ -388,7 +388,8 @@ public class Area extends SubCommand {
message.text("[").color("$3") message.text("[").color("$3")
.text(i + "").command(visit).tooltip(visit).color("$1") .text(i + "").command(visit).tooltip(visit).color("$1")
.text("]").color("$3") .text("]").color("$3")
.text(" " + name).tooltip(tooltip).command("/plot area info " + area).color("$1").text(" - ").color("$2") .text(" " + name).tooltip(tooltip).command(getCommandString() + " info " + area).color("$1").text(" - ")
.color("$2")
.text(area.TYPE + ":" + area.TERRAIN).color("$3"); .text(area.TYPE + ":" + area.TERRAIN).color("$3");
} }
}, "/plot area list", C.AREA_LIST_HEADER_PAGED.s()); }, "/plot area list", C.AREA_LIST_HEADER_PAGED.s());

View File

@ -60,7 +60,7 @@ public class Delete extends SubCommand {
sendMessage(plr, C.ADDED_BALANCE, value + ""); sendMessage(plr, C.ADDED_BALANCE, value + "");
} }
} }
MainUtil.sendMessage(plr, C.CLEARING_DONE, "" + (System.currentTimeMillis() - start)); MainUtil.sendMessage(plr, C.CLEARING_DONE, System.currentTimeMillis() - start);
} }
}); });
if (result) { if (result) {
@ -71,7 +71,7 @@ public class Delete extends SubCommand {
} }
}; };
if (hasConfirmation(plr)) { if (hasConfirmation(plr)) {
CmdConfirm.addPending(plr, "/plot delete " + plot.getId(), run); CmdConfirm.addPending(plr, getCommandString() + ' ' + plot.getId(), run);
} else { } else {
TaskManager.runTask(run); TaskManager.runTask(run);
} }

View File

@ -25,7 +25,7 @@ public abstract class UUIDHandlerImplementation {
public final ConcurrentHashMap<String, PlotPlayer> players; public final ConcurrentHashMap<String, PlotPlayer> players;
public final HashSet<UUID> unknown = new HashSet<>(); public final HashSet<UUID> unknown = new HashSet<>();
public UUIDWrapper uuidWrapper = null; public UUIDWrapper uuidWrapper;
private boolean cached = false; private boolean cached = false;
private BiMap<StringWrapper, UUID> uuidMap = HashBiMap.create(new HashMap<StringWrapper, UUID>()); private BiMap<StringWrapper, UUID> uuidMap = HashBiMap.create(new HashMap<StringWrapper, UUID>());
@ -181,7 +181,6 @@ public abstract class UUIDHandlerImplementation {
public void handleShutdown() { public void handleShutdown() {
this.players.clear(); this.players.clear();
this.uuidMap.clear(); this.uuidMap.clear();
this.uuidWrapper = null;
} }
public String getName(UUID uuid) { public String getName(UUID uuid) {

View File

@ -13,21 +13,21 @@ import java.util.UUID;
public class SpongeUUIDHandler extends UUIDHandlerImplementation { public class SpongeUUIDHandler extends UUIDHandlerImplementation {
public SpongeUUIDHandler(final UUIDWrapper wrapper) { public SpongeUUIDHandler(UUIDWrapper wrapper) {
super(wrapper); super(wrapper);
} }
@Override @Override
public boolean startCaching(final Runnable whenDone) { public boolean startCaching(Runnable whenDone) {
if (!super.startCaching(whenDone)) { if (!super.startCaching(whenDone)) {
return false; return false;
} }
return cache(whenDone); return cache(whenDone);
} }
public boolean cache(final Runnable whenDone) { public boolean cache(Runnable whenDone) {
add(new StringWrapper("*"), DBFunc.everyone); add(new StringWrapper("*"), DBFunc.everyone);
for (final GameProfile profile : SpongeMain.THIS.getResolver().getCachedProfiles()) { for (GameProfile profile : SpongeMain.THIS.getServer().getGameProfileManager().getCache().getProfiles()) {
String name = profile.getName().orElse(null); String name = profile.getName().orElse(null);
if (name != null) { if (name != null) {
add(new StringWrapper(name), profile.getUniqueId()); add(new StringWrapper(name), profile.getUniqueId());
@ -37,11 +37,11 @@ public class SpongeUUIDHandler extends UUIDHandlerImplementation {
} }
@Override @Override
public void fetchUUID(final String name, final RunnableVal<UUID> ifFetch) { public void fetchUUID(String name, RunnableVal<UUID> ifFetch) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
ifFetch.value = uuidWrapper.getUUID(name); ifFetch.value = SpongeUUIDHandler.this.uuidWrapper.getUUID(name);
TaskManager.runTask(ifFetch); TaskManager.runTask(ifFetch);
} }
}); });