Try and teleport players above plot after clearing

This commit is contained in:
Byteflux 2015-06-09 15:28:59 -07:00
parent 3aa7a74626
commit f8fcb96915
4 changed files with 30 additions and 7 deletions

View File

@ -37,6 +37,8 @@ public abstract class ChunkManager {
public abstract List<ChunkLoc> getChunkChunks(String world); public abstract List<ChunkLoc> getChunkChunks(String world);
public abstract void regenerateChunk(String world, ChunkLoc loc);
public abstract void deleteRegionFile(final String world, final ChunkLoc loc); public abstract void deleteRegionFile(final String world, final ChunkLoc loc);
public abstract void deleteRegionFiles(final String world, final List<ChunkLoc> chunks); public abstract void deleteRegionFiles(final String world, final List<ChunkLoc> chunks);

View File

@ -286,8 +286,9 @@ public class ClusterManager {
@Override @Override
public void run() { public void run() {
if ((populator == null) || (plotworld.TYPE == 0)) { if ((populator == null) || (plotworld.TYPE == 0)) {
world.regenerateChunk(chunk.getX(), chunk.getZ()); ChunkLoc loc = new ChunkLoc(chunk.getX(), chunk.getZ());
MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); ChunkManager.manager.regenerateChunk(world.getName(), loc);
MainUtil.update(world.getName(), loc);
} else { } else {
populator.populate(world, rand, chunk); populator.populate(world, rand, chunk);
} }

View File

@ -94,6 +94,22 @@ public class BukkitChunkManager extends ChunkManager {
return chunks; return chunks;
} }
@Override
public void regenerateChunk(String world, ChunkLoc loc) {
World bukkitWorld = Bukkit.getWorld(world);
bukkitWorld.regenerateChunk(loc.x, loc.z);
Chunk chunk = bukkitWorld.getChunkAt(loc.x, loc.z);
for (final Entity entity : chunk.getEntities()) {
if (entity instanceof Player) {
final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(entity.getLocation()));
if (plot != null) {
final PlotPlayer pp = BukkitUtil.getPlayer((Player) entity);
pp.teleport(MainUtil.getDefaultHome(plot));
}
}
}
}
@Override @Override
public void deleteRegionFile(final String world, final ChunkLoc loc) { public void deleteRegionFile(final String world, final ChunkLoc loc) {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@ -360,12 +376,13 @@ public class BukkitChunkManager extends ChunkManager {
if (save) { if (save) {
saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR); saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR);
} }
world.regenerateChunk(x, z); ChunkLoc loc = new ChunkLoc(chunk.getX(), chunk.getZ());
regenerateChunk(world.getName(), loc);
if (save) { if (save) {
restoreBlocks(world, 0, 0); restoreBlocks(world, 0, 0);
restoreEntities(world, 0, 0); restoreEntities(world, 0, 0);
} }
MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); MainUtil.update(world.getName(), loc);
BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk }));
} }
CURRENT_PLOT_CLEAR = null; CURRENT_PLOT_CLEAR = null;
@ -1092,12 +1109,13 @@ public class BukkitChunkManager extends ChunkManager {
if (save) { if (save) {
saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR); saveEntitiesOut(chunk, CURRENT_PLOT_CLEAR);
} }
world.regenerateChunk(cx, cz); ChunkLoc chunkLoc = new ChunkLoc(chunk.getX(), chunk.getZ());
regenerateChunk(world.getName(), chunkLoc);
if (save) { if (save) {
restoreBlocks(world, 0, 0); restoreBlocks(world, 0, 0);
restoreEntities(world, 0, 0); restoreEntities(world, 0, 0);
} }
MainUtil.update(world.getName(), new ChunkLoc(chunk.getX(), chunk.getZ())); MainUtil.update(world.getName(), chunkLoc);
BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk })); BukkitSetBlockManager.setBlockManager.update(Arrays.asList(new Chunk[] { chunk }));
CURRENT_PLOT_CLEAR = null; CURRENT_PLOT_CLEAR = null;
} }

View File

@ -19,11 +19,13 @@ import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.intellectualcrafters.plot.object.BukkitPlayer; import com.intellectualcrafters.plot.object.BukkitPlayer;
import com.intellectualcrafters.plot.object.ChunkLoc;
import com.intellectualcrafters.plot.object.Location; import com.intellectualcrafters.plot.object.Location;
import com.intellectualcrafters.plot.object.PlotBlock; import com.intellectualcrafters.plot.object.PlotBlock;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.schematic.PlotItem; import com.intellectualcrafters.plot.object.schematic.PlotItem;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.ChunkManager;
public class BukkitUtil extends BlockManager { public class BukkitUtil extends BlockManager {
private static HashMap<String, World> worlds = new HashMap<>(); private static HashMap<String, World> worlds = new HashMap<>();
@ -157,7 +159,7 @@ public class BukkitUtil extends BlockManager {
World worldObj = getWorld(world); World worldObj = getWorld(world);
Chunk chunk = worldObj.getChunkAt(x, z); Chunk chunk = worldObj.getChunkAt(x, z);
if (chunk.isLoaded() || chunk.load(false)) { if (chunk.isLoaded() || chunk.load(false)) {
worldObj.regenerateChunk(x, z); ChunkManager.manager.regenerateChunk(world, new ChunkLoc(x, z));
} }
} }