This commit is contained in:
boy0001 2015-02-19 21:12:26 +11:00
parent fcdbd341d8
commit 0d3f6d5e0b
9 changed files with 150 additions and 91 deletions

View File

@ -15,7 +15,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.world.WorldInitEvent;
import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
@ -26,12 +25,11 @@ import com.intellectualcrafters.plot.commands.Buy;
import com.intellectualcrafters.plot.commands.MainCommand; import com.intellectualcrafters.plot.commands.MainCommand;
import com.intellectualcrafters.plot.commands.WE_Anywhere; import com.intellectualcrafters.plot.commands.WE_Anywhere;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.config.Configuration;
import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.database.PlotMeConverter; import com.intellectualcrafters.plot.database.PlotMeConverter;
import com.intellectualcrafters.plot.events.PlayerTeleportToPlotEvent;
import com.intellectualcrafters.plot.events.PlotDeleteEvent; import com.intellectualcrafters.plot.events.PlotDeleteEvent;
import com.intellectualcrafters.plot.generator.HybridGen; import com.intellectualcrafters.plot.generator.HybridGen;
import com.intellectualcrafters.plot.generator.HybridPlotWorld;
import com.intellectualcrafters.plot.listeners.ForceFieldListener; import com.intellectualcrafters.plot.listeners.ForceFieldListener;
import com.intellectualcrafters.plot.listeners.InventoryListener; import com.intellectualcrafters.plot.listeners.InventoryListener;
import com.intellectualcrafters.plot.listeners.PlayerEvents; import com.intellectualcrafters.plot.listeners.PlayerEvents;
@ -39,8 +37,8 @@ import com.intellectualcrafters.plot.listeners.PlayerEvents_1_8;
import com.intellectualcrafters.plot.listeners.PlotListener; import com.intellectualcrafters.plot.listeners.PlotListener;
import com.intellectualcrafters.plot.listeners.PlotPlusListener; import com.intellectualcrafters.plot.listeners.PlotPlusListener;
import com.intellectualcrafters.plot.listeners.WorldEditListener; import com.intellectualcrafters.plot.listeners.WorldEditListener;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotGenerator; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.ConsoleColors; import com.intellectualcrafters.plot.util.ConsoleColors;
import com.intellectualcrafters.plot.util.Metrics; import com.intellectualcrafters.plot.util.Metrics;
@ -53,6 +51,7 @@ import com.intellectualcrafters.plot.util.SetBlockSlow;
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.intellectualcrafters.plot.util.bukkit.BukkitTaskManager; import com.intellectualcrafters.plot.util.bukkit.BukkitTaskManager;
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.WorldEditPlugin;
public class BukkitMain extends JavaPlugin implements Listener,IPlotMain { public class BukkitMain extends JavaPlugin implements Listener,IPlotMain {
@ -60,6 +59,7 @@ public class BukkitMain extends JavaPlugin implements Listener,IPlotMain {
public static BukkitMain THIS = null; public static BukkitMain THIS = null;
public static PlotSquared MAIN = null; public static PlotSquared MAIN = null;
// TODO restructure this
public static boolean hasPermission(final Player player, final String perm) { public static boolean hasPermission(final Player player, final String perm) {
if ((player == null) || player.isOp() || player.hasPermission(PlotSquared.ADMIN_PERMISSION)) { if ((player == null) || player.isOp() || player.hasPermission(PlotSquared.ADMIN_PERMISSION)) {
return true; return true;
@ -78,6 +78,50 @@ public class BukkitMain extends JavaPlugin implements Listener,IPlotMain {
return false; return false;
} }
// TODO restructure this
public static boolean teleportPlayer(final Player player, final Location from, final Plot plot) {
Plot bot = PlayerFunctions.getBottomPlot(player.getWorld().getName(), 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);
int x = location.getX();
int z = location.getZ();
if ((x >= 29999999) || (x <= -29999999) || (z >= 299999999) || (z <= -29999999)) {
event.setCancelled(true);
return false;
}
if (Settings.TELEPORT_DELAY == 0 || hasPermission(player, "plots.teleport.delay.bypass")) {
PlayerFunctions.sendMessage(player, C.TELEPORTED_TO_PLOT);
BukkitUtil.teleportPlayer(player, location);
return true;
}
PlayerFunctions.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)) {
PlayerFunctions.sendMessage(player, C.TELEPORT_FAILED);
return;
}
TaskManager.TELEPORT_QUEUE.remove(name);
if (!player.isOnline()) {
return;
}
PlayerFunctions.sendMessage(player, C.TELEPORTED_TO_PLOT);
BukkitUtil.teleportPlayer(player, location);
}
}, Settings.TELEPORT_DELAY * 20);
return true;
}
return !event.isCancelled();
}
@EventHandler @EventHandler
public static void worldLoad(WorldLoadEvent event) { public static void worldLoad(WorldLoadEvent event) {
UUIDHandler.cacheAll(); UUIDHandler.cacheAll();

View File

@ -2,8 +2,12 @@ package com.intellectualcrafters.plot;
import java.io.File; import java.io.File;
import org.bukkit.entity.Player;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId; import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;

View File

@ -160,11 +160,11 @@ public class Auto extends SubCommand {
} }
// } // }
} }
String worldname = world.getName();
PlotWorld plotworld = PlotSquared.getWorldSettings(world); PlotWorld plotworld = PlotSquared.getWorldSettings(worldname);
if (plotworld.TYPE == 2) { if (plotworld.TYPE == 2) {
Location loc = plr.getLocation(); Location loc = plr.getLocation();
Plot plot = PlotHelper.getCurrentPlot(loc); Plot plot = PlotHelper.getCurrentPlot(new com.intellectualcrafters.plot.object.Location(worldname, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
if (plot == null) { if (plot == null) {
return sendMessage(plr, C.NOT_IN_PLOT); return sendMessage(plr, C.NOT_IN_PLOT);
} }
@ -183,7 +183,7 @@ public class Auto extends SubCommand {
// //
for (int i = 0; i <= max; i++) { for (int i = 0; i <= max; i++) {
PlotId currentId = new PlotId(origin.x + id.x, origin.y + id.y); PlotId currentId = new PlotId(origin.x + id.x, origin.y + id.y);
Plot current = PlotHelper.getPlot(world, currentId); Plot current = PlotHelper.getPlot(worldname, currentId);
if (current != null && (current.hasOwner() == false) && (current.settings.isMerged() == false) && cluster.equals(ClusterManager.getCluster(current))) { if (current != null && (current.hasOwner() == false) && (current.settings.isMerged() == false) && cluster.equals(ClusterManager.getCluster(current))) {
Claim.claimPlot(plr, current, true, true); Claim.claimPlot(plr, current, true, true);
return true; return true;
@ -197,10 +197,9 @@ public class Auto extends SubCommand {
} }
boolean br = false; boolean br = false;
String worldname = world.getName();
if ((size_x == 1) && (size_z == 1)) { if ((size_x == 1) && (size_z == 1)) {
while (!br) { while (!br) {
final Plot plot = PlotHelper.getPlot(world, getLastPlot(worldname)); final Plot plot = PlotHelper.getPlot(worldname, getLastPlot(worldname));
if ((plot.owner == null)) { if ((plot.owner == null)) {
Claim.claimPlot(plr, plot, true, true); Claim.claimPlot(plr, plot, true, true);
br = true; br = true;
@ -215,21 +214,21 @@ public class Auto extends SubCommand {
PlotHelper.lastPlot.put(worldname, start); PlotHelper.lastPlot.put(worldname, start);
if (lastPlot) { if (lastPlot) {
} }
if ((PlotSquared.getPlots(world).get(start) != null) && (PlotSquared.getPlots(world).get(start).owner != null)) { if ((PlotSquared.getPlots(worldname).get(start) != null) && (PlotSquared.getPlots(worldname).get(start).owner != null)) {
continue; continue;
} else { } else {
lastPlot = false; lastPlot = false;
} }
final PlotId end = new PlotId((start.x + size_x) - 1, (start.y + size_z) - 1); final PlotId end = new PlotId((start.x + size_x) - 1, (start.y + size_z) - 1);
if (PlotHelper.isUnowned(world, start, end)) { if (PlotHelper.isUnowned(worldname, start, end)) {
for (int i = start.x; i <= end.x; i++) { for (int i = start.x; i <= end.x; i++) {
for (int j = start.y; j <= end.y; j++) { for (int j = start.y; j <= end.y; j++) {
final Plot plot = PlotHelper.getPlot(world, new PlotId(i, j)); final Plot plot = PlotHelper.getPlot(worldname, new PlotId(i, j));
final boolean teleport = ((i == end.x) && (j == end.y)); final boolean teleport = ((i == end.x) && (j == end.y));
Claim.claimPlot(plr, plot, teleport, true); Claim.claimPlot(plr, plot, teleport, true);
} }
} }
if (!PlotHelper.mergePlots(plr, world, PlayerFunctions.getPlotSelectionIds(start, end))) { if (!PlotHelper.mergePlots(plr, worldname, PlayerFunctions.getPlotSelectionIds(start, end))) {
return false; return false;
} }
br = true; br = true;

View File

@ -21,12 +21,12 @@
package com.intellectualcrafters.plot.events; package com.intellectualcrafters.plot.events;
import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
/** /**

View File

@ -90,6 +90,7 @@ public class Location implements Cloneable, Comparable<Location> {
this.built = false; this.built = false;
} }
public Location add(int x, int y, int z) {
this.x += x; this.x += x;
this.y += y; this.y += y;
this.z += z; this.z += z;
@ -128,6 +129,7 @@ public class Location implements Cloneable, Comparable<Location> {
y <= max.getY() && z >= min.getX() && z < max.getZ(); y <= max.getY() && z >= min.getX() && z < max.getZ();
} }
public void lookTowards(int x, int y) {
double l = this.x - x; double l = this.x - x;
double w = this.z - z; double w = this.z - z;
double c = Math.sqrt(l * l + w * w); double c = Math.sqrt(l * l + w * w);
@ -139,6 +141,7 @@ public class Location implements Cloneable, Comparable<Location> {
this.built = false; this.built = false;
} }
public Location subtract(int x, int y, int z) {
this.x -= x; this.x -= x;
this.y -= y; this.y -= y;
this.z -= z; this.z -= z;

View File

@ -32,9 +32,9 @@ public abstract class BlockManager {
return (int) r; return (int) r;
} }
public abstract void functionSetBlock(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data); public abstract void functionSetBlocks(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data);
public abstract void setSign(String worldname, int x, int y, int z, String[] lines); public abstract void functionSetSign(String worldname, int x, int y, int z, String[] lines);
public static void setBlocks(String worldname, int[] x, int y[], int z[], PlotBlock[][] blocks) { public static void setBlocks(String worldname, int[] x, int y[], int z[], PlotBlock[][] blocks) {
@ -60,6 +60,11 @@ public abstract class BlockManager {
setBlocks(worldname, x, y, z, id, data); setBlocks(worldname, x, y, z, id, data);
} }
public static void setSign(String worldname, int x, int y, int z, String[] lines) {
manager.functionSetSign(worldname, x, y, z, lines);
}
public static void setBlocks(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data) { public static void setBlocks(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data) {
manager.functionSetBlocks(worldname, x, y, z, id, data);
} }
} }

View File

@ -41,6 +41,7 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import com.intellectualcrafters.plot.BukkitMain;
import com.intellectualcrafters.plot.PlotSquared; import com.intellectualcrafters.plot.PlotSquared;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc; import com.intellectualcrafters.plot.database.DBFunc;
@ -53,7 +54,7 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager; import com.intellectualcrafters.plot.object.PlotManager;
import com.intellectualcrafters.plot.object.PlotSettings; import com.intellectualcrafters.plot.object.PlotSettings;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.bukkit.TaskManager; import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
/** /**
* plot functions * plot functions
@ -137,7 +138,7 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
public static boolean mergePlots(final Player plr, final String world, final ArrayList<PlotId> plotIds) { public static boolean mergePlots(final Player plr, final String world, final ArrayList<PlotId> plotIds) {
final PlotWorld plotworld = PlotSquared.getWorldSettings(world); final PlotWorld plotworld = PlotSquared.getWorldSettings(world);
if (PlotSquared.useEconomy && plotworld.USE_ECONOMY) { if ((PlotSquared.economy != null) && plotworld.USE_ECONOMY) {
final double cost = plotIds.size() * plotworld.MERGE_PRICE; final double cost = plotIds.size() * plotworld.MERGE_PRICE;
if (cost > 0d) { if (cost > 0d) {
final Economy economy = PlotSquared.economy; final Economy economy = PlotSquared.economy;
@ -289,20 +290,17 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
if (name == null) { if (name == null) {
name = "unknown"; name = "unknown";
} }
final PlotManager manager = PlotSquared.getPlotManager(world); final PlotManager manager = PlotSquared.getPlotManager(p.world);
final PlotWorld plotworld = PlotSquared.getWorldSettings(world); final PlotWorld plotworld = PlotSquared.getWorldSettings(p.world);
final Location loc = manager.getSignLoc(plotworld, p); final Location loc = manager.getSignLoc(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 String id = p.id.x + ";" + p.id.y;
final Sign sign = (Sign) bs.getState(); String[] lines = new String[] {
sign.setLine(0, C.OWNER_SIGN_LINE_1.translated().replaceAll("%id%", id)); C.OWNER_SIGN_LINE_1.translated().replaceAll("%id%", id),
sign.setLine(1, C.OWNER_SIGN_LINE_2.translated().replaceAll("%id%", id).replaceAll("%plr%", name)); 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)); 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)); C.OWNER_SIGN_LINE_4.translated().replaceAll("%id%", id).replaceAll("%plr%", name)
sign.update(true); };
BukkitUtil.setSign(p.world, loc.getX(), loc.getY(), loc.getZ(), lines);
} }
public static String getPlayerName(final UUID uuid) { public static String getPlayerName(final UUID uuid) {
@ -379,7 +377,7 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
} }
merge = false; merge = false;
} }
update(player.getLocation()); update(BukkitUtil.getLocation(player));
} }
private static boolean ownsPlots(final String world, final ArrayList<PlotId> plots, final Player player, final int dir) { private static boolean ownsPlots(final String world, final ArrayList<PlotId> plots, final Player player, final int dir) {
@ -403,6 +401,18 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
return true; return true;
} }
public static void update(Location loc) {
ArrayList<Chunk> chunks = new ArrayList<>();
final int distance = Bukkit.getViewDistance();
for (int cx = -distance; cx < distance; cx++) {
for (int cz = -distance; cz < distance; cz++) {
Chunk chunk = BukkitUtil.getChunkAt(loc.getWorld(), loc.getX(), loc.getZ());
chunks.add(chunk);
}
}
AbstractSetBlock.setBlockManager.update(chunks);
}
public static void updateWorldBorder(Plot plot) { public static void updateWorldBorder(Plot plot) {
if (!worldBorder.containsKey(plot.world)) { if (!worldBorder.containsKey(plot.world)) {
return; return;
@ -413,8 +423,8 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
Location bot = manager.getPlotBottomLocAbs(plotworld, plot.id); Location bot = manager.getPlotBottomLocAbs(plotworld, plot.id);
Location top = manager.getPlotTopLocAbs(plotworld, plot.id); Location top = manager.getPlotTopLocAbs(plotworld, plot.id);
int border = worldBorder.get(plot.world); int border = worldBorder.get(plot.world);
int botmax = Math.max(Math.abs(bot.getBlockX()), Math.abs(bot.getBlockZ())); int botmax = Math.max(Math.abs(bot.getX()), Math.abs(bot.getZ()));
int topmax = Math.max(Math.abs(top.getBlockX()), Math.abs(top.getBlockZ())); int topmax = Math.max(Math.abs(top.getX()), Math.abs(top.getZ()));
int max = Math.max(botmax, topmax); int max = Math.max(botmax, topmax);
if (max > border ) { if (max > border ) {
worldBorder.put(plot.world, max); worldBorder.put(plot.world, max);
@ -428,7 +438,7 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
if (PlotHelper.worldBorder.containsKey(plot.world)) { if (PlotHelper.worldBorder.containsKey(plot.world)) {
updateWorldBorder(plot); updateWorldBorder(plot);
} }
World w = player.getWorld(); String w = BukkitUtil.getWorld(player);
UUID uuid = UUIDHandler.getUUID(player); UUID uuid = UUIDHandler.getUUID(player);
Plot p = createPlotAbs(uuid, plot); Plot p = createPlotAbs(uuid, plot);
final PlotWorld plotworld = PlotSquared.getWorldSettings(w); final PlotWorld plotworld = PlotSquared.getWorldSettings(w);
@ -449,34 +459,6 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
return p; return p;
} }
public static int getLoadedChunks(final String world) {
return world.getLoadedChunks().length;
}
public static int getEntities(final String world) {
return world.getEntities().size();
}
public static int getTileEntities(final String world) {
PlotSquared.getWorldSettings(world);
int x = 0;
for (final Chunk chunk : world.getLoadedChunks()) {
x += chunk.getTileEntities().length;
}
return x;
}
public static double getWorldFolderSize(final String 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) { public static String createId(final int x, final int z) {
return x + ";" + z; return x + ";" + z;
} }
@ -494,15 +476,13 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
} }
public static void clearAllEntities(final String world, final Plot plot, final boolean tile) { public static void clearAllEntities(final String world, final Plot plot, final boolean tile) {
final List<Entity> entities = BukkitUtil.getEntities(world);
final List<Entity> entities = world.getEntities();
for (final Entity entity : entities) { for (final Entity entity : entities) {
final PlotId id = PlayerFunctions.getPlot(entity.getLocation()); final PlotId id = PlayerFunctions.getPlot(entity.getLocation());
if (plot.id.equals(id)) { if (plot.id.equals(id)) {
if (entity instanceof Player) { if (entity instanceof Player) {
final Player player = (Player) entity; final Player player = (Player) entity;
PlotSquared.teleportPlayer(player, entity.getLocation(), plot); BukkitMain.teleportPlayer(player, BukkitUtil.getLocation(entity), plot);
PlotListener.plotExit(player, plot); PlotListener.plotExit(player, plot);
} else { } else {
entity.remove(); entity.remove();
@ -530,8 +510,8 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
final int prime = 31; final int prime = 31;
int h = 1; int h = 1;
h = (prime * h) + pos1.getBlockX(); h = (prime * h) + pos1.getX();
h = (prime * h) + pos1.getBlockZ(); h = (prime * h) + pos1.getZ();
state = h; state = h;
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
@ -593,8 +573,8 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
} }
for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) { for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) {
for (int x = pos1.getBlockX(); x < pos2.getBlockX(); x++) { for (int x = pos1.getX(); x < pos2.getX(); x++) {
for (int z = pos1.getBlockZ(); z < pos2.getBlockZ(); z++) { for (int z = pos1.getZ(); z < pos2.getZ(); z++) {
final Block block = world.getBlockAt(x, y, z); final Block block = world.getBlockAt(x, y, z);
if (!((block.getTypeId() == newblock.id) && (block.getData() == newblock.data))) { if (!((block.getTypeId() == newblock.id) && (block.getData() == newblock.data))) {
setBlock(world, x, y, z, newblock.id, newblock.data); setBlock(world, x, y, z, newblock.id, newblock.data);
@ -611,8 +591,8 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
return; return;
} }
for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) { for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) {
for (int x = pos1.getBlockX(); x < pos2.getBlockX(); x++) { for (int x = pos1.getX(); x < pos2.getX(); x++) {
for (int z = pos1.getBlockZ(); z < pos2.getBlockZ(); z++) { for (int z = pos1.getZ(); z < pos2.getZ(); z++) {
final int i = random(blocks.length); final int i = random(blocks.length);
final PlotBlock newblock = blocks[i]; final PlotBlock newblock = blocks[i];
final Block block = world.getBlockAt(x, y, z); final Block block = world.getBlockAt(x, y, z);
@ -627,8 +607,8 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
public static void setSimpleCuboid(final String world, final Location pos1, final Location pos2, final PlotBlock newblock) { public static void setSimpleCuboid(final String world, final Location pos1, final Location pos2, final PlotBlock newblock) {
for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) { for (int y = pos1.getBlockY(); y < pos2.getBlockY(); y++) {
for (int x = pos1.getBlockX(); x < pos2.getBlockX(); x++) { for (int x = pos1.getX(); x < pos2.getX(); x++) {
for (int z = pos1.getBlockZ(); z < pos2.getBlockZ(); z++) { for (int z = pos1.getZ(); z < pos2.getZ(); z++) {
final Block block = world.getBlockAt(x, y, z); final Block block = world.getBlockAt(x, y, z);
if (!((block.getTypeId() == newblock.id))) { if (!((block.getTypeId() == newblock.id))) {
setBlock(world, x, y, z, newblock.id, (byte) 0); setBlock(world, x, y, z, newblock.id, (byte) 0);
@ -640,10 +620,10 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
public static void setBiome(final String world, final Plot plot, final Biome b) { public static void setBiome(final String world, final Plot plot, final Biome b) {
final int bottomX = getPlotBottomLoc(world, plot.id).getBlockX(); final int bottomX = getPlotBottomLoc(world, plot.id).getX();
final int topX = getPlotTopLoc(world, plot.id).getBlockX() + 1; final int topX = getPlotTopLoc(world, plot.id).getX() + 1;
final int bottomZ = getPlotBottomLoc(world, plot.id).getBlockZ(); final int bottomZ = getPlotBottomLoc(world, plot.id).getZ();
final int topZ = getPlotTopLoc(world, plot.id).getBlockZ() + 1; final int topZ = getPlotTopLoc(world, plot.id).getZ() + 1;
final Block block = world.getBlockAt(getPlotBottomLoc(world, plot.id).add(1, 1, 1)); final Block block = world.getBlockAt(getPlotBottomLoc(world, plot.id).add(1, 1, 1));
final Biome biome = block.getBiome(); final Biome biome = block.getBiome();
@ -696,8 +676,8 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
PlotManager manager = PlotSquared.getPlotManager(w); PlotManager manager = PlotSquared.getPlotManager(w);
if (home == null || (home.x == 0 && home.z == 0)) { if (home == null || (home.x == 0 && home.z == 0)) {
final Location top = getPlotTopLoc(w, plotid); final Location top = getPlotTopLoc(w, plotid);
final int x = ((top.getBlockX() - bot.getBlockX())/2) + bot.getBlockX(); final int x = ((top.getX() - bot.getX())/2) + bot.getX();
final int z = ((top.getBlockZ() - bot.getBlockZ())/2) + bot.getBlockZ(); final int z = ((top.getZ() - bot.getZ())/2) + bot.getZ();
final int y = Math.max(getHeighestBlock(w, x, z), manager.getSignLoc(w, PlotSquared.getWorldSettings(w), plot).getBlockY()); final int y = Math.max(getHeighestBlock(w, x, z), manager.getSignLoc(w, PlotSquared.getWorldSettings(w), plot).getBlockY());
return new Location(w, x, y, z); return new Location(w, x, y, z);
} }
@ -716,7 +696,7 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
*/ */
public static Location getPlotHomeDefault(final Plot plot) { public static Location getPlotHomeDefault(final Plot plot) {
final Location l = getPlotBottomLoc(plot.getWorld(), plot.getId()).subtract(0, 0, 0); final Location l = getPlotBottomLoc(plot.getWorld(), plot.getId()).subtract(0, 0, 0);
l.setY(getHeighestBlock(plot.getWorld(), l.getBlockX(), l.getBlockZ())); l.setY(getHeighestBlock(plot.getWorld(), l.getX(), l.getZ()));
return l; return l;
} }
@ -742,10 +722,10 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
*/ */
public static void refreshPlotChunks(final String world, final Plot plot) { public static void refreshPlotChunks(final String world, final Plot plot) {
final int bottomX = getPlotBottomLoc(world, plot.id).getBlockX(); final int bottomX = getPlotBottomLoc(world, plot.id).getX();
final int topX = getPlotTopLoc(world, plot.id).getBlockX(); final int topX = getPlotTopLoc(world, plot.id).getX();
final int bottomZ = getPlotBottomLoc(world, plot.id).getBlockZ(); final int bottomZ = getPlotBottomLoc(world, plot.id).getZ();
final int topZ = getPlotTopLoc(world, plot.id).getBlockZ(); final int topZ = getPlotTopLoc(world, plot.id).getZ();
final int minChunkX = (int) Math.floor((double) bottomX / 16); final int minChunkX = (int) Math.floor((double) bottomX / 16);
final int maxChunkX = (int) Math.floor((double) topX / 16); final int maxChunkX = (int) Math.floor((double) topX / 16);
@ -818,7 +798,7 @@ import com.intellectualcrafters.plot.util.bukkit.TaskManager;
*/ */
public static int getPlotWidth(final String world, final PlotId id) { public static int getPlotWidth(final String world, final PlotId id) {
return getPlotTopLoc(world, id).getBlockX() - getPlotBottomLoc(world, id).getBlockX(); return getPlotTopLoc(world, id).getX() - getPlotBottomLoc(world, id).getX();
} }
/** /**

View File

@ -6,7 +6,7 @@ import com.intellectualcrafters.plot.PlotSquared;
public abstract class TaskManager { public abstract class TaskManager {
public HashSet<String> TELEPORT_QUEUE = new HashSet<>(); public static HashSet<String> TELEPORT_QUEUE = new HashSet<>();
public abstract void taskRepeat(final Runnable r, int interval); public abstract void taskRepeat(final Runnable r, int interval);

View File

@ -2,6 +2,7 @@ package com.intellectualcrafters.plot.util.bukkit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
@ -10,7 +11,10 @@ import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.SetBlockManager; import com.intellectualcrafters.plot.util.SetBlockManager;
@ -51,6 +55,19 @@ public class BukkitUtil extends BlockManager {
SetBlockManager.setBlockManager.update(chunks); SetBlockManager.setBlockManager.update(chunks);
} }
public static String getWorld(Entity entity) {
return entity.getWorld().getName();
}
public static void teleportPlayer(Player player, Location loc) {
org.bukkit.Location bukkitLoc = new org.bukkit.Location(getWorld(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ());
player.teleport(bukkitLoc);
}
public static List<Entity> getEntities(String worldname) {
return getWorld(worldname).getEntities();
}
public static void setBlock(World world, int x, int y, int z, int id, byte data) { public static void setBlock(World world, int x, int y, int z, int id, byte data) {
try { try {
SetBlockManager.setBlockManager.set(world, x, y, z, id, data); SetBlockManager.setBlockManager.set(world, x, y, z, id, data);
@ -61,8 +78,14 @@ public class BukkitUtil extends BlockManager {
} }
} }
public static Location getLocation(Entity entity) {
org.bukkit.Location loc = entity.getLocation();
String world = loc.getWorld().getName();
return new Location(world, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
}
@Override @Override
public void functionSetBlock(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data) { public void functionSetBlocks(String worldname, int[] x, int[] y, int[] z, int[] id, byte[] data) {
World world = getWorld(worldname); World world = getWorld(worldname);
for (int i = 0; i < x.length; i++) { for (int i = 0; i < x.length; i++) {
BukkitUtil.setBlock(world, x[i], y[i], z[i], id[i], data[i]); BukkitUtil.setBlock(world, x[i], y[i], z[i], id[i], data[i]);
@ -70,7 +93,7 @@ public class BukkitUtil extends BlockManager {
} }
@Override @Override
public void setSign(String worldname, int x, int y, int z, String[] lines) { public void functionSetSign(String worldname, int x, int y, int z, String[] lines) {
World world = getWorld(worldname); World world = getWorld(worldname);
Block block = world.getBlockAt(x, y, z); Block block = world.getBlockAt(x, y, z);
block.setType(Material.AIR); block.setType(Material.AIR);
@ -80,6 +103,7 @@ public class BukkitUtil extends BlockManager {
for (int i = 0; i < lines.length; i++) { for (int i = 0; i < lines.length; i++) {
((Sign) blockstate).setLine(i, lines[i]); ((Sign) blockstate).setLine(i, lines[i]);
} }
((Sign) blockstate).update(true);
} }
} }