Full (untested) implementation
Dieser Commit ist enthalten in:
Ursprung
4a9a678a63
Commit
8ac38aff31
43
SpigotCore_8/src/de/steamwar/sql/IDConverter.java
Normale Datei
43
SpigotCore_8/src/de/steamwar/sql/IDConverter.java
Normale Datei
@ -0,0 +1,43 @@
|
|||||||
|
package de.steamwar.sql;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
class IDConverter {
|
||||||
|
private IDConverter(){}
|
||||||
|
|
||||||
|
static Map<String, BlockTypeID> getMap(){
|
||||||
|
Map<String, BlockTypeID> ids = new HashMap<>();
|
||||||
|
YamlConfiguration legacy = YamlConfiguration.loadConfiguration(new InputStreamReader(Objects.requireNonNull(IDConverter.class.getClassLoader().getResourceAsStream("legacy.yml"))));
|
||||||
|
for(String blockNum : legacy.getKeys(false)){
|
||||||
|
String[] block = blockNum.split(":");
|
||||||
|
String blockString = legacy.getString(blockNum);
|
||||||
|
ids.put(blockString, new BlockTypeID(Integer.parseInt(block[0]), Byte.parseByte(block[1])));
|
||||||
|
if(blockString.contains("["))
|
||||||
|
ids.put(blockString.split("\\[")[0], new BlockTypeID(Integer.parseInt(block[0]), (byte)0));
|
||||||
|
}
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
static class BlockTypeID{
|
||||||
|
private final int blockId;
|
||||||
|
private final byte dataId;
|
||||||
|
|
||||||
|
private BlockTypeID(int blockId, byte dataId) {
|
||||||
|
this.blockId = blockId;
|
||||||
|
this.dataId = dataId;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getBlockId() {
|
||||||
|
return blockId;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte getDataId() {
|
||||||
|
return dataId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,6 @@ import com.sk89q.worldedit.regions.CuboidRegion;
|
|||||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
import com.sk89q.worldedit.session.ClipboardHolder;
|
||||||
import com.sk89q.worldedit.world.registry.WorldData;
|
import com.sk89q.worldedit.world.registry.WorldData;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@ -71,6 +70,7 @@ class Schematic_8 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class SpongeSchematicReader implements ClipboardReader {
|
public static class SpongeSchematicReader implements ClipboardReader {
|
||||||
|
|
||||||
private final NBTInputStream inputStream;
|
private final NBTInputStream inputStream;
|
||||||
private int schematicVersion = -1;
|
private int schematicVersion = -1;
|
||||||
|
|
||||||
@ -105,6 +105,8 @@ class Schematic_8 {
|
|||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private BlockArrayClipboard readSchematic(CompoundTag schematicTag) throws IOException {
|
private BlockArrayClipboard readSchematic(CompoundTag schematicTag) throws IOException {
|
||||||
|
final Map<String, IDConverter.BlockTypeID> ids = IDConverter.getMap();
|
||||||
|
|
||||||
Map<String, Tag> schematic = schematicTag.getValue();
|
Map<String, Tag> schematic = schematicTag.getValue();
|
||||||
int width = (requireTag(schematic, "Width", ShortTag.class)).getValue();
|
int width = (requireTag(schematic, "Width", ShortTag.class)).getValue();
|
||||||
int height = (requireTag(schematic, "Height", ShortTag.class)).getValue();
|
int height = (requireTag(schematic, "Height", ShortTag.class)).getValue();
|
||||||
@ -152,14 +154,16 @@ class Schematic_8 {
|
|||||||
String palettePart = (String)iterator.next();
|
String palettePart = (String)iterator.next();
|
||||||
id = requireTag(paletteObject, palettePart, IntTag.class).getValue();
|
id = requireTag(paletteObject, palettePart, IntTag.class).getValue();
|
||||||
|
|
||||||
String matName = palettePart.split(":")[1].split("\\[")[0];
|
IDConverter.BlockTypeID blockID = ids.get(palettePart);
|
||||||
Material material = Material.getMaterial(matName);
|
if(blockID == null){
|
||||||
if(material == null){
|
blockID = ids.get(palettePart.split("\\[")[0]);
|
||||||
state = new BaseBlock(0); //AIR
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
state = new BaseBlock(material.getId());
|
if(blockID == null){
|
||||||
|
state = new BaseBlock(0); //AIR
|
||||||
|
}else{
|
||||||
|
state = new BaseBlock(blockID.getBlockId(), blockID.getDataId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] blocks = requireTag(schematic, "BlockData", ByteArrayTag.class).getValue();
|
byte[] blocks = requireTag(schematic, "BlockData", ByteArrayTag.class).getValue();
|
||||||
|
1747
SpigotCore_8/src/legacy.yml
Normale Datei
1747
SpigotCore_8/src/legacy.yml
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
In neuem Issue referenzieren
Einen Benutzer sperren