Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-11-07 20:10:06 +01:00
Update SpongeSchematicReader.java
Dieser Commit ist enthalten in:
Ursprung
88b6d60f8e
Commit
23e0b0ef02
@ -60,6 +60,7 @@ import net.jpountz.lz4.LZ4BlockOutputStream;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.DataInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -228,6 +229,17 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
|||||||
});
|
});
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BlockState getBlockState(int id) {
|
||||||
|
return BlockTypes.states[palette[id]];
|
||||||
|
}
|
||||||
|
|
||||||
|
private BiomeType getBiomeType(FaweInputStream fis) throws IOException {
|
||||||
|
char biomeId = biomePalette[fis.readVarInt()];
|
||||||
|
BiomeType biome = BiomeTypes.get(biomeId);
|
||||||
|
return biome;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Clipboard read(UUID uuid, Function<BlockVector3, Clipboard> createOutput) throws IOException {
|
public Clipboard read(UUID uuid, Function<BlockVector3, Clipboard> createOutput) throws IOException {
|
||||||
StreamDelegate root = createDelegate();
|
StreamDelegate root = createDelegate();
|
||||||
@ -236,32 +248,58 @@ public class SpongeSchematicReader extends NBTSchematicReader {
|
|||||||
Clipboard clipboard = createOutput.apply(dimensions);
|
Clipboard clipboard = createOutput.apply(dimensions);
|
||||||
|
|
||||||
BlockVector3 origin = min;
|
BlockVector3 origin = min;
|
||||||
CuboidRegion region;
|
|
||||||
if (offsetX != Integer.MIN_VALUE && offsetY != Integer.MIN_VALUE && offsetZ != Integer.MIN_VALUE) {
|
if (offsetX != Integer.MIN_VALUE && offsetY != Integer.MIN_VALUE && offsetZ != Integer.MIN_VALUE) {
|
||||||
origin = origin.subtract(BlockVector3.at(offsetX, offsetY, offsetZ));
|
origin = origin.subtract(BlockVector3.at(offsetX, offsetY, offsetZ));
|
||||||
}
|
}
|
||||||
region = new CuboidRegion(min, min.add(width, height, length).subtract(BlockVector3.ONE));
|
|
||||||
if (blocksOut.getSize() != 0) {
|
if (blocksOut.getSize() != 0) {
|
||||||
try (FaweInputStream fis = new FaweInputStream(new LZ4BlockInputStream(new FastByteArraysInputStream(blocksOut.toByteArrays())))) {
|
try (FaweInputStream fis = new FaweInputStream(new LZ4BlockInputStream(new FastByteArraysInputStream(blocksOut.toByteArrays())))) {
|
||||||
|
if (clipboard instanceof LinearClipboard) {
|
||||||
|
LinearClipboard linear = (LinearClipboard) clipboard;
|
||||||
int volume = width * height * length;
|
int volume = width * height * length;
|
||||||
if (palette.length < 128) {
|
if (palette.length < 128) {
|
||||||
for (int index = 0; index < volume; index++) {
|
for (int index = 0; index < volume; index++) {
|
||||||
BlockState state = BlockTypes.states[palette[fis.read()]];
|
linear.setBlock(index, getBlockState(fis.read()));
|
||||||
clipboard.setBlock(index, state);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int index = 0; index < volume; index++) {
|
for (int index = 0; index < volume; index++) {
|
||||||
BlockState state = BlockTypes.states[palette[fis.readVarInt()]];
|
linear.setBlock(index, getBlockState(fis.readVarInt()));
|
||||||
clipboard.setBlock(index, state);
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (palette.length < 128) {
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
for (int z = 0; z < length; z++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
clipboard.setBlock(x, y, z, getBlockState(fis.read()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
for (int z = 0; z < length; z++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
clipboard.setBlock(x, y, z, getBlockState(fis.readVarInt()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (biomesOut.getSize() != 0) {
|
if (biomesOut.getSize() != 0) {
|
||||||
try (FaweInputStream fis = new FaweInputStream(new LZ4BlockInputStream(new FastByteArraysInputStream(biomesOut.toByteArrays())))) {
|
try (FaweInputStream fis = new FaweInputStream(new LZ4BlockInputStream(new FastByteArraysInputStream(biomesOut.toByteArrays())))) {
|
||||||
|
if (clipboard instanceof LinearClipboard) {
|
||||||
|
LinearClipboard linear = (LinearClipboard) clipboard;
|
||||||
int volume = width * length;
|
int volume = width * length;
|
||||||
for (int index = 0; index < volume; index++) {
|
for (int index = 0; index < volume; index++) {
|
||||||
clipboard.setBiome(index, BiomeTypes.get(fis.read()));
|
linear.setBiome(index, getBiomeType(fis));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int z = 0; z < length; z++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
clipboard.setBiome(x, 0, z, getBiomeType(fis));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren