Skip to content
This repository was archived by the owner on May 27, 2023. It is now read-only.

Commit 0ea93de

Browse files
committed
refactor!: remove data from Schematic constructors
1 parent 30c7cc6 commit 0ea93de

File tree

11 files changed

+61
-78
lines changed

11 files changed

+61
-78
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,4 +142,8 @@ buildNumber.properties
142142
### Minestom ###
143143
extensions/
144144

145+
### Scaffolding ###
146+
*.schematic
147+
*.schem
148+
145149
# End of https://www.toptal.com/developers/gitignore/api/maven,intellij+all,java

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Scaffolding
2+
Scaffolding is a library for Minestom that allows you to load and place schematics.
3+
> This library is very early in development and has too many bugs to count. For your own safety, you should not use it in a production environment.
4+
5+
## Usage
6+
```java
7+
// Load a schematic from File.
8+
public void method1() {
9+
Schematic schematic = Scaffolding.fromFile(new File("schematics/my_schematic.schematic"));
10+
}
11+
12+
public void method2() {
13+
Schematic schematic = new SpongeSchematic();
14+
schematic.read(new FileInputStream(new File("schematics/my_schematic.schematic")));
15+
}
16+
```
17+
```java
18+
// Place a schematic at a location.
19+
Instance instance = player.getInstance();
20+
Pos position = player.getPosition();
21+
schematic.build(instance, position).thenRun(() -> player.sendMessage("Schematic placed!"));
22+
```
23+
```java
24+
// Write a schematic (SOONtm)
25+
Region region = new Region(new Pos(0, 0, 0), new Pos(10, 10, 10));
26+
Schematic schematic = new SpongeSchematic();
27+
schematic.write(new FileOutputStream("schematics/my_schematic.schematic"), region);
28+
```

maze.schematic

-6.71 KB
Binary file not shown.

schematic.schematic

-301 KB
Binary file not shown.

src/main/java/net/crystalgames/scaffolding/Scaffolding.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ public class Scaffolding {
2424
Pair<String, NBT> pair = reader.readNamed();
2525
NBTCompound nbtTag = (NBTCompound) pair.getSecond();
2626

27-
if (nbtTag.contains("Blocks")) return new MCEditSchematic(nbtTag);
28-
else if (nbtTag.contains("Palette")) return new SpongeSchematic(nbtTag);
29-
else return null;
27+
Schematic schematic = null;
28+
if (nbtTag.contains("Blocks")) schematic = new MCEditSchematic();
29+
else if (nbtTag.contains("Palette")) schematic = new SpongeSchematic();
30+
31+
if (schematic != null) schematic.read(nbtTag);
32+
return schematic;
3033
}
3134

3235
/**

src/main/java/net/crystalgames/scaffolding/schematic/AbstractSchematic.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/net/crystalgames/scaffolding/schematic/Schematic.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,26 @@
33
import net.crystalgames.scaffolding.region.Region;
44
import net.minestom.server.coordinate.Pos;
55
import net.minestom.server.instance.Instance;
6+
import org.jglrxavpok.hephaistos.nbt.CompressedProcesser;
7+
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
68
import org.jglrxavpok.hephaistos.nbt.NBTException;
9+
import org.jglrxavpok.hephaistos.nbt.NBTReader;
710

811
import java.io.IOException;
12+
import java.io.InputStream;
13+
import java.io.OutputStream;
914
import java.util.concurrent.CompletableFuture;
1015

1116
public interface Schematic {
1217

13-
void read() throws NBTException;
14-
void write(Region region) throws IOException;
18+
default void read(InputStream inputStream) throws IOException, NBTException {
19+
NBTReader reader = new NBTReader(inputStream, CompressedProcesser.GZIP);
20+
read((NBTCompound) reader.readNamed().getSecond());
21+
reader.close();
22+
inputStream.close();
23+
}
24+
void read(NBTCompound nbtTag) throws NBTException;
25+
void write(OutputStream outputStream, Region region) throws IOException;
1526
CompletableFuture<Region> build(Instance instance, Pos position);
1627

1728
}

src/main/java/net/crystalgames/scaffolding/schematic/impl/MCEditSchematic.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.crystalgames.scaffolding.schematic.impl;
22

33
import net.crystalgames.scaffolding.region.Region;
4-
import net.crystalgames.scaffolding.schematic.AbstractSchematic;
4+
import net.crystalgames.scaffolding.schematic.Schematic;
55
import net.minestom.server.coordinate.Pos;
66
import net.minestom.server.instance.Instance;
77
import net.minestom.server.instance.batch.AbsoluteBlockBatch;
@@ -11,15 +11,14 @@
1111
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
1212
import org.jglrxavpok.hephaistos.nbt.NBTException;
1313

14-
import java.io.IOException;
15-
import java.io.InputStream;
14+
import java.io.OutputStream;
1615
import java.util.ArrayList;
1716
import java.util.List;
1817
import java.util.Objects;
1918
import java.util.concurrent.CompletableFuture;
2019

2120
// https://github.com/EngineHub/WorldEdit/blob/version/5.x/src/main/java/com/sk89q/worldedit/schematic/MCEditSchematicFormat.java
22-
public class MCEditSchematic extends AbstractSchematic {
21+
public class MCEditSchematic implements Schematic {
2322

2423
private final List<Region.Block> regionBlocks = new ArrayList<>();
2524

@@ -30,26 +29,8 @@ public class MCEditSchematic extends AbstractSchematic {
3029

3130
private boolean read = false;
3231

33-
/**
34-
* Creates an MCEdit schematic from an input stream.
35-
* @param inputStream the input stream
36-
* @throws IOException if the input stream is invalid
37-
* @throws NBTException if the schematic is invalid
38-
*/
39-
public MCEditSchematic(InputStream inputStream) throws IOException, NBTException {
40-
super(inputStream);
41-
}
42-
43-
/**
44-
* Creates an MCEdit schematic from NBT.
45-
* @param nbtTag the NBT tag
46-
*/
47-
public MCEditSchematic(NBTCompound nbtTag) {
48-
super(nbtTag);
49-
}
50-
5132
@Override
52-
public void read() throws NBTException {
33+
public void read(NBTCompound nbtTag) throws NBTException {
5334
if (!nbtTag.containsKey("Blocks")) throw new NBTException("Invalid Schematic: No Blocks");
5435

5536
readSizes(nbtTag);
@@ -113,7 +94,7 @@ public void readBlocks() {
11394
}
11495

11596
@Override
116-
public void write(Region region) {
97+
public void write(OutputStream outputStream, Region region) {
11798
// TODO: Complete
11899
}
119100

src/main/java/net/crystalgames/scaffolding/schematic/impl/SpongeSchematic.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.crystalgames.scaffolding.schematic.impl;
22

33
import net.crystalgames.scaffolding.region.Region;
4-
import net.crystalgames.scaffolding.schematic.AbstractSchematic;
4+
import net.crystalgames.scaffolding.schematic.Schematic;
55
import net.minestom.server.coordinate.Pos;
66
import net.minestom.server.instance.Instance;
77
import net.minestom.server.instance.batch.AbsoluteBlockBatch;
@@ -11,13 +11,12 @@
1111
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
1212
import org.jglrxavpok.hephaistos.nbt.NBTException;
1313

14-
import java.io.IOException;
15-
import java.io.InputStream;
14+
import java.io.OutputStream;
1615
import java.util.*;
1716
import java.util.concurrent.CompletableFuture;
1817

1918
// https://github.com/EngineHub/WorldEdit/blob/303f5a76b2df70d63480f2126c9ef4b228eb3c59/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java#L261-L297
20-
public class SpongeSchematic extends AbstractSchematic {
19+
public class SpongeSchematic implements Schematic {
2120

2221
private final List<Region.Block> regionBlocks = new ArrayList<>();
2322

@@ -29,26 +28,8 @@ public class SpongeSchematic extends AbstractSchematic {
2928

3029
private boolean read = false;
3130

32-
/**
33-
* Creates a Sponge schematic from an input stream.
34-
* @param inputStream the input stream
35-
* @throws IOException if the input stream is invalid
36-
* @throws NBTException if the schematic is invalid
37-
*/
38-
public SpongeSchematic(InputStream inputStream) throws IOException, NBTException {
39-
super(inputStream);
40-
}
41-
42-
/**
43-
* Creates a Sponge schematic from NBT.
44-
* @param nbtTag the NBT tag
45-
*/
46-
public SpongeSchematic(NBTCompound nbtTag) {
47-
super(nbtTag);
48-
}
49-
5031
@Override
51-
public void read() throws NBTException {
32+
public void read(NBTCompound nbtTag) throws NBTException {
5233
readSizes(nbtTag);
5334
readBlockPalette(nbtTag);
5435
readBlocks();
@@ -132,7 +113,7 @@ private void readBlocks() throws NBTException {
132113
}
133114

134115
@Override
135-
public void write(Region region) {
116+
public void write(OutputStream outputStream, Region region) {
136117
// TODO: Complete
137118
}
138119

src/test/java/dev/sllcoding/scaffolding/test/commands/TestCommand.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ public TestCommand() {
2222
Instance instance = player.getInstance();
2323
Pos position = player.getPosition();
2424

25-
schematic.read();
26-
2725
schematic.build(instance, position).thenRun(() -> player.sendMessage("Done!"));
2826
} catch (Exception e) {
2927
e.printStackTrace();

0 commit comments

Comments
 (0)