Skip to content

Commit 9ba179c

Browse files
committed
feat: allow loading schematics from input streams
1 parent 08c4893 commit 9ba179c

2 files changed

Lines changed: 47 additions & 28 deletions

File tree

src/main/java/xyz/webmc/wlib/api/structure/AbstractBaseStructure.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
package xyz.webmc.wlib.api.structure;
22

3-
import xyz.webmc.wlib.api.util.SchemUtil;
4-
53
import java.io.File;
4+
import java.io.FileInputStream;
5+
import java.io.FileOutputStream;
66
import java.io.IOException;
7+
import java.io.InputStream;
8+
import java.io.OutputStream;
79
import java.util.ArrayList;
810
import java.util.List;
911

12+
import org.bukkit.Location;
13+
1014
import com.cryptomorin.xseries.XMaterial;
15+
1116
import dev.zerite.craftlib.commons.world.Block;
1217
import dev.zerite.craftlib.schematic.Schematic;
1318
import dev.zerite.craftlib.schematic.SchematicMaterials;
14-
import org.bukkit.Location;
19+
import xyz.webmc.wlib.api.util.SchemUtil;
1520

1621
public abstract class AbstractBaseStructure {
1722
private final List<BlockRelative> blocks = new ArrayList<>();
@@ -35,13 +40,17 @@ public final String getName() {
3540
return this.name;
3641
}
3742

38-
public final void saveSchematic(final File file) throws IOException {
43+
public final void saveSchematic(final OutputStream os) throws IOException {
3944
final Schematic schematic = createSchematic();
40-
SchemUtil.writeSchematicFile(schematic, file);
45+
SchemUtil.writeSchematic(schematic, os);
4146
}
4247

43-
public final void loadSchematic(final File file) throws IOException {
44-
final Schematic schematic = SchemUtil.readSchematicFile(file);
48+
public final void saveSchematic(final File file) throws IOException {
49+
saveSchematic(new FileOutputStream(file));
50+
}
51+
52+
public final void loadSchematic(final InputStream is) throws IOException {
53+
final Schematic schematic = SchemUtil.readSchematic(is);
4554

4655
final int width = schematic.getWidth();
4756
final int height = schematic.getHeight();
@@ -66,7 +75,11 @@ public final void loadSchematic(final File file) throws IOException {
6675
}
6776
}
6877

69-
private Schematic createSchematic() {
78+
public final void loadSchematic(final File file) throws IOException {
79+
loadSchematic(new FileInputStream(file));
80+
}
81+
82+
public final Schematic createSchematic() {
7083
if (!this.blocks.isEmpty()) {
7184
int minX = Integer.MAX_VALUE;
7285
int minY = Integer.MAX_VALUE;

src/main/java/xyz/webmc/wlib/api/util/SchemUtil.java

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,43 @@
44
import java.io.FileInputStream;
55
import java.io.FileOutputStream;
66
import java.io.IOException;
7+
import java.io.InputStream;
8+
import java.io.OutputStream;
79
import java.util.concurrent.CompletionException;
810

911
import dev.zerite.craftlib.schematic.Schematic;
1012
import dev.zerite.craftlib.schematic.SchematicIO;
1113

1214
public final class SchemUtil {
13-
public static final Schematic readSchematicFile(final File file) throws IOException {
14-
try (FileInputStream input = new FileInputStream(file)) {
15-
try {
16-
return SchematicIO.readFuture(input, false).join();
17-
} catch (final CompletionException ex) {
18-
if (ex.getCause() instanceof IOException io) {
19-
throw io;
20-
} else {
21-
throw ex;
22-
}
15+
public static final Schematic readSchematic(final InputStream is) throws IOException {
16+
try (is) {
17+
return SchematicIO.readFuture(is, false).join();
18+
} catch (final CompletionException ex) {
19+
if (ex.getCause() instanceof IOException io) {
20+
throw io;
21+
} else {
22+
throw ex;
2323
}
2424
}
2525
}
2626

27-
public static final void writeSchematicFile(final Schematic schematic, final File file) throws IOException {
28-
try (FileOutputStream output = new FileOutputStream(file)) {
29-
try {
30-
SchematicIO.writeFuture(schematic, output, false).join();
31-
} catch (final CompletionException ex) {
32-
if (ex.getCause() instanceof IOException io) {
33-
throw io;
34-
} else {
35-
throw ex;
36-
}
27+
public static final Schematic readSchematic(final File file) throws IOException {
28+
return readSchematic(new FileInputStream(file));
29+
}
30+
31+
public static final void writeSchematic(final Schematic schematic, final OutputStream os) throws IOException {
32+
try (os) {
33+
SchematicIO.writeFuture(schematic, os, false).join();
34+
} catch (final CompletionException ex) {
35+
if (ex.getCause() instanceof IOException io) {
36+
throw io;
37+
} else {
38+
throw ex;
3739
}
3840
}
3941
}
42+
43+
public static final void writeSchematic(final Schematic schematic, final File file) throws IOException {
44+
writeSchematic(schematic, new FileOutputStream(file));
45+
}
4046
}

0 commit comments

Comments
 (0)