From 92b34e4fa904b0b24ad6c08407ba01fcf5064a45 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Tue, 5 Nov 2019 08:03:00 +0000 Subject: [PATCH] Regen using EditSession --- .../sk89q/worldedit/bukkit/BukkitWorld.java | 83 ++++++++++--------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java index 33786c3ce..e67bfd777 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -183,47 +183,48 @@ public class BukkitWorld extends AbstractWorld { @Override public boolean regenerate(Region region, EditSession editSession) { - BaseBlock[] history = new BaseBlock[16 * 16 * (getMaxY() + 1)]; - - for (BlockVector2 chunk : region.getChunks()) { - BlockVector3 min = BlockVector3.at(chunk.getBlockX() * 16, 0, chunk.getBlockZ() * 16); - - // First save all the blocks inside - for (int x = 0; x < 16; ++x) { - for (int y = 0; y < (getMaxY() + 1); ++y) { - for (int z = 0; z < 16; ++z) { - BlockVector3 pt = min.add(x, y, z); - int index = y * 16 * 16 + z * 16 + x; - history[index] = editSession.getFullBlock(pt); - } - } - } - - try { - getWorld().regenerateChunk(chunk.getBlockX(), chunk.getBlockZ()); - } catch (Throwable t) { - logger.warn("Chunk generation via Bukkit raised an error", t); - } - - // Then restore - for (int x = 0; x < 16; ++x) { - for (int y = 0; y < (getMaxY() + 1); ++y) { - for (int z = 0; z < 16; ++z) { - BlockVector3 pt = min.add(x, y, z); - int index = y * 16 * 16 + z * 16 + x; - - // We have to restore the block if it was outside - if (!region.contains(pt)) { - editSession.smartSetBlock(pt, history[index]); - } else { // Otherwise fool with history - editSession.getChangeSet().add(new BlockChange(pt, history[index], editSession.getFullBlock(pt))); - } - } - } - } - } - - return true; + return editSession.regenerate(region); +// BaseBlock[] history = new BaseBlock[16 * 16 * (getMaxY() + 1)]; +// +// for (BlockVector2 chunk : region.getChunks()) { +// BlockVector3 min = BlockVector3.at(chunk.getBlockX() * 16, 0, chunk.getBlockZ() * 16); +// +// // First save all the blocks inside +// for (int x = 0; x < 16; ++x) { +// for (int y = 0; y < (getMaxY() + 1); ++y) { +// for (int z = 0; z < 16; ++z) { +// BlockVector3 pt = min.add(x, y, z); +// int index = y * 16 * 16 + z * 16 + x; +// history[index] = editSession.getFullBlock(pt); +// } +// } +// } +// +// try { +// getWorld().regenerateChunk(chunk.getBlockX(), chunk.getBlockZ()); +// } catch (Throwable t) { +// logger.warn("Chunk generation via Bukkit raised an error", t); +// } +// +// // Then restore +// for (int x = 0; x < 16; ++x) { +// for (int y = 0; y < (getMaxY() + 1); ++y) { +// for (int z = 0; z < 16; ++z) { +// BlockVector3 pt = min.add(x, y, z); +// int index = y * 16 * 16 + z * 16 + x; +// +// // We have to restore the block if it was outside +// if (!region.contains(pt)) { +// editSession.smartSetBlock(pt, history[index]); +// } else { // Otherwise fool with history +// editSession.getChangeSet().add(new BlockChange(pt, history[index], editSession.getFullBlock(pt))); +// } +// } +// } +// } +// } +// +// return true; } /**