mirror of
https://github.com/ViaVersion/ViaNBT.git
synced 2024-10-02 04:37:34 +02:00
Added TagBuilder.
This commit is contained in:
parent
688638b1f2
commit
0d87f2c39d
140
src/main/java/me/steveice10/opennbt/TagBuilder.java
Normal file
140
src/main/java/me/steveice10/opennbt/TagBuilder.java
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
package me.steveice10.opennbt;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import me.steveice10.opennbt.stream.NBTOutputStream;
|
||||||
|
import me.steveice10.opennbt.tag.ByteArrayTag;
|
||||||
|
import me.steveice10.opennbt.tag.ByteTag;
|
||||||
|
import me.steveice10.opennbt.tag.CompoundTag;
|
||||||
|
import me.steveice10.opennbt.tag.DoubleTag;
|
||||||
|
import me.steveice10.opennbt.tag.EndTag;
|
||||||
|
import me.steveice10.opennbt.tag.FloatTag;
|
||||||
|
import me.steveice10.opennbt.tag.IntArrayTag;
|
||||||
|
import me.steveice10.opennbt.tag.IntTag;
|
||||||
|
import me.steveice10.opennbt.tag.ListTag;
|
||||||
|
import me.steveice10.opennbt.tag.LongTag;
|
||||||
|
import me.steveice10.opennbt.tag.ShortTag;
|
||||||
|
import me.steveice10.opennbt.tag.StringTag;
|
||||||
|
import me.steveice10.opennbt.tag.Tag;
|
||||||
|
|
||||||
|
public class TagBuilder {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private List<Tag> tags = new ArrayList<Tag>();
|
||||||
|
|
||||||
|
public TagBuilder() {
|
||||||
|
this("");
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, byte b[]) {
|
||||||
|
this.tags.add(new ByteArrayTag(name, b));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, byte b) {
|
||||||
|
this.tags.add(new ByteTag(name, b));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(CompoundTag compound) {
|
||||||
|
this.tags.add(compound);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, double d) {
|
||||||
|
this.tags.add(new DoubleTag(name, d));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(EndTag tag) {
|
||||||
|
this.tags.add(tag);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, float f) {
|
||||||
|
this.tags.add(new FloatTag(name, f));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, int i[]) {
|
||||||
|
this.tags.add(new IntArrayTag(name, i));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, int i) {
|
||||||
|
this.tags.add(new IntTag(name, i));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends Tag> TagBuilder append(String name, Class<T> clazz, List<T> l) {
|
||||||
|
this.tags.add(new ListTag<T>(name, clazz, l));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, long l) {
|
||||||
|
this.tags.add(new LongTag(name, l));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, short s) {
|
||||||
|
this.tags.add(new ShortTag(name, s));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(String name, String s) {
|
||||||
|
this.tags.add(new StringTag(name, s));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagBuilder append(TagBuilder builder) {
|
||||||
|
this.tags.add(builder.toCompoundTag());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompoundTag toCompoundTag() {
|
||||||
|
Map<String, Tag> tagMap = new HashMap<String, Tag>();
|
||||||
|
for(Tag tag : this.tags) {
|
||||||
|
tagMap.put(tag.getName(), tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new CompoundTag(this.name, tagMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Tag> toList() {
|
||||||
|
return new ArrayList<Tag>(this.tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public NBTOutputStream toOutputStream(String file) {
|
||||||
|
File nbt = new File(file);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if(!nbt.exists()) {
|
||||||
|
if(nbt.getParentFile() != null) nbt.getParentFile().mkdirs();
|
||||||
|
nbt.createNewFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
NBTOutputStream out = new NBTOutputStream(new FileOutputStream(nbt));
|
||||||
|
for(Tag tag : this.tags) {
|
||||||
|
out.writeTag(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
} catch(IOException e) {
|
||||||
|
System.out.println("Failed to create NBTOutputStream for file \"" + file + "\" from a TagBuilder.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package me.steveice10.opennbt.utils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class DoubleIntHashMap<T> extends HashMap<Integer, T> {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public DoubleIntHashMap() {
|
||||||
|
super(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DoubleIntHashMap(int capacity) {
|
||||||
|
super(capacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T put(int key1, int key2, T value) {
|
||||||
|
int key = key(key1, key2);
|
||||||
|
return super.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T get(int key1, int key2) {
|
||||||
|
int key = key(key1, key2);
|
||||||
|
return super.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsKey(int key1, int key2) {
|
||||||
|
int key = key(key1, key2);
|
||||||
|
return super.containsKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T remove(int key1, int key2) {
|
||||||
|
int key = key(key1, key2);
|
||||||
|
return super.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final int key(int x, int z) {
|
||||||
|
return (x & 0xF) << 11 | (z & 0xF) << 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user