Schematic fixes

The 1.13 schematic format uses the `.schem` extension, use that instead
Support loading both legacy `.schematic` and `.schem` files for road
schematics
Fix reading road schematics with an offset
This commit is contained in:
Jesse Boyd 2019-04-01 21:39:01 +11:00
parent 0f8b7cd588
commit 1c9c0d0207
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
7 changed files with 38 additions and 30 deletions

View File

@ -27,7 +27,7 @@ import java.util.UUID;
}
} else {
uuid = UUIDHandler.getUUID(value, null);
name = UUIDHandler.getName(uuid);
name = uuid == null ? value : UUIDHandler.getName(uuid);
name = name == null ? value : name;
}
if (uuid == null || value.equalsIgnoreCase("-")) {

View File

@ -64,7 +64,7 @@ import java.util.UUID;
MainUtil.sendMessage(player, Captions.SAVE_SUCCESS);
List<String> schematics = player.getMeta("plot_schematics");
if (schematics != null) {
schematics.add(file + ".schematic");
schematics.add(file + ".schem");
}
}
});

View File

@ -31,22 +31,22 @@ public class HybridPlotManager extends ClassicPlotManager {
+ File.separator;
try {
File sideroad =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "sideroad.schematic");
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "sideroad.schem");
if (sideroad.exists()) {
files.add(new FileBytes(newDir + "sideroad.schematic",
files.add(new FileBytes(newDir + "sideroad.schem",
Files.readAllBytes(sideroad.toPath())));
}
File intersection =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), "intersection.schematic");
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), "intersection.schem");
if (intersection.exists()) {
files.add(new FileBytes(newDir + "intersection.schematic",
files.add(new FileBytes(newDir + "intersection.schem",
Files.readAllBytes(intersection.toPath())));
}
File plot =
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "plot.schematic");
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), dir + "plot.schem");
if (plot.exists()) {
files.add(
new FileBytes(newDir + "plot.schematic", Files.readAllBytes(plot.toPath())));
new FileBytes(newDir + "plot.schem", Files.readAllBytes(plot.toPath())));
}
} catch (IOException e) {
e.printStackTrace();

View File

@ -131,15 +131,16 @@ public class HybridPlotWorld extends ClassicPlotWorld {
public void setupSchematics() throws SchematicHandler.UnsupportedFormatException {
this.G_SCH = new HashMap<>();
File schematic1File = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(),
"schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/sideroad.schematic");
File schematic2File = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(),
"schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/intersection.schematic");
File schem3File = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(),
"schematics/GEN_ROAD_SCHEMATIC/" + this.worldname + "/plot.schematic");
File root = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), "schematics/GEN_ROAD_SCHEMATIC/" + this.worldname);
File schematic1File = new File(root, "sideroad.schem");
if (!schematic1File.exists()) schematic1File = new File(root, "sideroad.schematic");
File schematic2File = new File(root, "intersection.schem");
if (!schematic2File.exists()) schematic2File = new File(root, "intersection.schematic");
File schematic3File = new File(root, "plot.schem");
if (!schematic3File.exists()) schematic3File = new File(root, "plot.schematic");
Schematic schematic1 = SchematicHandler.manager.getSchematic(schematic1File);
Schematic schematic2 = SchematicHandler.manager.getSchematic(schematic2File);
Schematic schematic3 = SchematicHandler.manager.getSchematic(schem3File);
Schematic schematic3 = SchematicHandler.manager.getSchematic(schematic3File);
int shift = this.ROAD_WIDTH / 2;
int oddshift = (this.ROAD_WIDTH & 1) == 0 ? 0 : 1;
int minY = Math.min(PLOT_HEIGHT, ROAD_HEIGHT);
@ -169,10 +170,11 @@ public class HybridPlotWorld extends ClassicPlotWorld {
int startY = minY - PLOT_HEIGHT;
BlockVector3 min = blockArrayClipboard3.getMinimumPoint();
for (short x = 0; x < w3; x++) {
for (short z = 0; z < l3; z++) {
for (short y = 0; y < h3; y++) {
BaseBlock id = blockArrayClipboard3.getFullBlock(BlockVector3.at(x, y, z));
BaseBlock id = blockArrayClipboard3.getFullBlock(BlockVector3.at(x + min.getBlockX(), y + min.getBlockY(), z + min.getBlockZ()));
if (!id.getBlockType().getMaterial().isAir()) {
addOverlayBlock((short) (x + shift + oddshift + centerShiftX),
(short) (y + startY), (short) (z + shift + oddshift + centerShiftZ),
@ -233,10 +235,11 @@ public class HybridPlotWorld extends ClassicPlotWorld {
short l2 = (short) d2.getZ();
short h2 = (short) d2.getY();
int startY = minY - ROAD_HEIGHT;
for (short x = 0; x < w1; x++) {
for (short z = 0; z < l1; z++) {
for (short y = 0; y < h1; y++) {
BaseBlock id = blockArrayClipboard1.getFullBlock(BlockVector3.at(x, y, z));
BlockVector3 min = blockArrayClipboard2.getMinimumPoint();
for (short x = 0; x < w2; x++) {
for (short z = 0; z < l2; z++) {
for (short y = 0; y < h2; y++) {
BaseBlock id = blockArrayClipboard2.getFullBlock(BlockVector3.at(x + min.getBlockX(), y + min.getBlockY(), z + min.getBlockZ()));
if (!id.getBlockType().getMaterial().isAir()) {
addOverlayBlock((short) (x - shift), (short) (y + startY),
(short) (z + shift + oddshift), id, false, h1);
@ -246,10 +249,11 @@ public class HybridPlotWorld extends ClassicPlotWorld {
}
}
}
min = blockArrayClipboard2.getMinimumPoint();
for (short x = 0; x < w2; x++) {
for (short z = 0; z < l2; z++) {
for (short y = 0; y < h2; y++) {
BaseBlock id = blockArrayClipboard2.getFullBlock(BlockVector3.at(x, y, z));
BaseBlock id = blockArrayClipboard2.getFullBlock(BlockVector3.at(x + min.getBlockX(), y + min.getBlockY(), z + min.getBlockZ()));
if (!id.getBlockType().getMaterial().isAir()) {
addOverlayBlock((short) (x - shift), (short) (y + startY),
(short) (z - shift), id, false, h2);

View File

@ -238,13 +238,14 @@ public abstract class HybridUtils {
final String dir =
"schematics" + File.separator + "GEN_ROAD_SCHEMATIC" + File.separator + plot.getArea()
.toString() + File.separator;
SchematicHandler.manager.getCompoundTag(world, sideRoad, new RunnableVal<CompoundTag>() {
@Override public void run(CompoundTag value) {
SchematicHandler.manager.save(value, dir + "sideroad.schematic");
SchematicHandler.manager.save(value, dir + "sideroad.schem");
SchematicHandler.manager
.getCompoundTag(world, intersection, new RunnableVal<CompoundTag>() {
@Override public void run(CompoundTag value) {
SchematicHandler.manager.save(value, dir + "intersection.schematic");
SchematicHandler.manager.save(value, dir + "intersection.schem");
plotworld.ROAD_SCHEMATIC_ENABLED = true;
try {
plotworld.setupSchematics();

View File

@ -1882,7 +1882,7 @@ public class Plot {
String name = Plot.this.id + "," + Plot.this.area + ',' + MainUtil
.getName(Plot.this.owner);
boolean result = SchematicHandler.manager.save(value,
Settings.Paths.SCHEMATICS + File.separator + name + ".schematic");
Settings.Paths.SCHEMATICS + File.separator + name + ".schem");
if (whenDone != null) {
whenDone.value = result;
TaskManager.runTask(whenDone);

View File

@ -80,7 +80,7 @@ public abstract class SchematicHandler {
TaskManager.runTaskAsync(() -> {
MainUtil.sendMessage(null, "&6ID: " + plot.getId());
boolean result = SchematicHandler.manager
.save(value, directory + File.separator + name + ".schematic");
.save(value, directory + File.separator + name + ".schem");
if (!result) {
MainUtil
.sendMessage(null, "&7 - Failed to save &c" + plot.getId());
@ -250,10 +250,13 @@ public abstract class SchematicHandler {
throw new RuntimeException("Could not create schematic parent directory");
}
}
File file = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(),
Settings.Paths.SCHEMATICS + File.separator + name + (name.endsWith(".schem") ?
"" :
".schematic"));
if (!name.endsWith(".schem") && !name.endsWith(".schematic")) {
name = name + ".schem";
}
File file = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.SCHEMATICS + File.separator + name);
if (!file.exists()) {
file = MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.SCHEMATICS + File.separator + name + "atic");
}
return getSchematic(file);
}
@ -267,7 +270,7 @@ public abstract class SchematicHandler {
MainUtil.getFile(PlotSquared.get().IMP.getDirectory(), Settings.Paths.SCHEMATICS);
final List<String> names = new ArrayList<>();
if (parent.exists()) {
final String[] rawNames = parent.list((dir, name) -> name.endsWith(".schematic"));
final String[] rawNames = parent.list((dir, name) -> name.endsWith(".schematic") || name.endsWith(".schem"));
if (rawNames != null) {
final List<String> transformed = Arrays.stream(rawNames)
.map(rawName -> rawName.substring(0, rawName.length() - 10))