Fixed plot clear schematic

This commit is contained in:
boy0001 2015-05-15 00:55:28 +10:00
parent 2b7adedeeb
commit 4ac6619ace

View File

@ -38,6 +38,7 @@ import com.intellectualcrafters.plot.object.PlotLoc;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.SchematicHandler;
import com.intellectualcrafters.plot.util.SetBlockQueue; import com.intellectualcrafters.plot.util.SetBlockQueue;
import com.intellectualcrafters.plot.util.TaskManager; import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil; import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
@ -83,12 +84,11 @@ public class HybridPlotManager extends ClassicPlotManager {
Location top = getPlotTopLocAbs(hpw, id); Location top = getPlotTopLocAbs(hpw, id);
Location pos1 = new Location(plot.world, top.getX() + 1, 0, bot.getZ()); Location pos1 = new Location(plot.world, top.getX() + 1, 0, bot.getZ());
Location pos2 = new Location(plot.world, bot.getX(), 256, top.getZ() + 1); Location pos2 = new Location(plot.world, bot.getX(), 256, top.getZ() + 1);
createRoadAbs(hpw, pos1, pos2); createSchemAbs(hpw, pos1, pos2, hpw.ROAD_HEIGHT, true);
return true; return true;
} }
public static void createRoadAbs(HybridPlotWorld hpw, Location pos1, Location pos2) { public void createSchemAbs(HybridPlotWorld hpw, Location pos1, Location pos2, int height, boolean clear) {
final int sy = hpw.ROAD_HEIGHT;
final int size = hpw.SIZE; final int size = hpw.SIZE;
for (int x = pos1.getX(); x <= pos2.getX(); x++) { for (int x = pos1.getX(); x <= pos2.getX(); x++) {
for (int z = pos1.getZ(); z <= pos2.getZ(); z++) { for (int z = pos1.getZ(); z <= pos2.getZ(); z++) {
@ -102,14 +102,16 @@ public class HybridPlotManager extends ClassicPlotManager {
} }
final PlotLoc loc = new PlotLoc(absX, absZ); final PlotLoc loc = new PlotLoc(absX, absZ);
final HashMap<Short, Short> blocks = hpw.G_SCH.get(loc); final HashMap<Short, Short> blocks = hpw.G_SCH.get(loc);
for (short y = (short) (hpw.ROAD_HEIGHT); y <= (hpw.ROAD_HEIGHT + hpw.SCHEMATIC_HEIGHT); y++) { if (clear) {
SetBlockQueue.setBlock(hpw.worldname, x, y + y, z, 0); for (short y = (short) (height); y <= (height + hpw.SCHEMATIC_HEIGHT); y++) {
SetBlockQueue.setBlock(hpw.worldname, x, y + y, z, 0);
}
} }
if (blocks != null) { if (blocks != null) {
final HashMap<Short, Byte> datas = hpw.G_SCH_DATA.get(loc); final HashMap<Short, Byte> datas = hpw.G_SCH_DATA.get(loc);
if (datas == null) { if (datas == null) {
for (final Short y : blocks.keySet()) { for (final Short y : blocks.keySet()) {
SetBlockQueue.setBlock(hpw.worldname, x, sy + y, z, blocks.get(y)); SetBlockQueue.setBlock(hpw.worldname, x, height + y, z, blocks.get(y));
} }
} else { } else {
for (final Short y : blocks.keySet()) { for (final Short y : blocks.keySet()) {
@ -117,7 +119,7 @@ public class HybridPlotManager extends ClassicPlotManager {
if (data == null) { if (data == null) {
data = 0; data = 0;
} }
SetBlockQueue.setBlock(hpw.worldname, x, sy + y, z, new PlotBlock(blocks.get(y), data)); SetBlockQueue.setBlock(hpw.worldname, x, height + y, z, new PlotBlock(blocks.get(y), data));
} }
} }
} }
@ -138,7 +140,7 @@ public class HybridPlotManager extends ClassicPlotManager {
Location top = getPlotTopLocAbs(hpw, id); Location top = getPlotTopLocAbs(hpw, id);
Location pos1 = new Location(plot.world, bot.getX(), 0, top.getZ() + 1); Location pos1 = new Location(plot.world, bot.getX(), 0, top.getZ() + 1);
Location pos2 = new Location(plot.world, top.getX() + 1, 256, bot.getZ()); Location pos2 = new Location(plot.world, top.getX() + 1, 256, bot.getZ());
createRoadAbs(hpw, pos1, pos2); createSchemAbs(hpw, pos1, pos2, hpw.ROAD_HEIGHT, true);
return true; return true;
} }
@ -155,7 +157,7 @@ public class HybridPlotManager extends ClassicPlotManager {
Location pos2 = getPlotBottomLocAbs(hpw, id2); Location pos2 = getPlotBottomLocAbs(hpw, id2);
pos1.setY(0); pos1.setY(0);
pos2.setY(256); pos2.setY(256);
createRoadAbs(hpw, pos1, pos2); createSchemAbs(hpw, pos1, pos2, hpw.ROAD_HEIGHT, true);
return true; return true;
} }
@ -244,6 +246,7 @@ public class HybridPlotManager extends ClassicPlotManager {
MainUtil.setSimpleCuboidAsync(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT + 1, pos1.getZ()), new Location(world, pos2.getX() + 1, maxy + 1, pos2.getZ() + 1), new PlotBlock((short) 0, (byte) 0)); MainUtil.setSimpleCuboidAsync(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT + 1, pos1.getZ()), new Location(world, pos2.getX() + 1, maxy + 1, pos2.getZ() + 1), new PlotBlock((short) 0, (byte) 0));
MainUtil.setCuboidAsync(world, new Location(world, pos1.getX(), 1, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT, pos2.getZ() + 1), filling); MainUtil.setCuboidAsync(world, new Location(world, pos1.getX(), 1, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT, pos2.getZ() + 1), filling);
MainUtil.setCuboidAsync(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getZ() + 1), plotfloor); MainUtil.setCuboidAsync(world, new Location(world, pos1.getX(), dpw.PLOT_HEIGHT, pos1.getZ()), new Location(world, pos2.getX() + 1, dpw.PLOT_HEIGHT + 1, pos2.getZ() + 1), plotfloor);
pastePlotSchematic(dpw, l1, l2);
SetBlockQueue.addNotify(whenDone); SetBlockQueue.addNotify(whenDone);
return; return;
} }
@ -291,9 +294,18 @@ public class HybridPlotManager extends ClassicPlotManager {
MainUtil.setSimpleCuboidAsync(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT + 1, max.getZ()), new Location(world, plotMaxX + 1, maxy + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0)); MainUtil.setSimpleCuboidAsync(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT + 1, max.getZ()), new Location(world, plotMaxX + 1, maxy + 1, plotMaxZ + 1), new PlotBlock((short) 0, (byte) 0));
MainUtil.setCuboidAsync(world, new Location(world, max.getX(), 1, max.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling); MainUtil.setCuboidAsync(world, new Location(world, max.getX(), 1, max.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT, plotMaxZ + 1), filling);
MainUtil.setCuboidAsync(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT, max.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor); MainUtil.setCuboidAsync(world, new Location(world, max.getX(), dpw.PLOT_HEIGHT, max.getZ()), new Location(world, plotMaxX + 1, dpw.PLOT_HEIGHT + 1, plotMaxZ + 1), plotfloor);
pastePlotSchematic(dpw, l1, l2);
SetBlockQueue.addNotify(whenDone); SetBlockQueue.addNotify(whenDone);
} }
}); });
return true; return true;
} }
public void pastePlotSchematic(HybridPlotWorld plotworld, Location l1, Location l2) {
if (!plotworld.PLOT_SCHEMATIC) {
return;
}
createSchemAbs(plotworld, l1.add(1,0,1), l2, plotworld.PLOT_HEIGHT, false);
}
} }