reworked container access (never throw, multi-field access, return values, operator), added package storage

This commit is contained in:
gnembon committed 2019-10-13 02:54:18 -03:00
1 parent 8b531834d0
commit 701a717135
12 files changed
+369 -114

No files matched your search

@@ -1,9 +1,15 @@
package carpet.script.bundled;
import carpet.CarpetServer;
import net.minecraft.nbt.EndTag;
import net.minecraft.nbt.PositionTracker;
import net.minecraft.nbt.Tag;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Locale;
@@ -42,4 +48,76 @@ public class FileModule implements ModuleInterface
{
return code;
}
@Override
public boolean isInternal()
{
return false;
}
//copied private method from net.minecraft.nbt.NbtIo.read()
private static Tag read(File file)
{
try (DataInputStream dataInput_1 = new DataInputStream(new FileInputStream(file)))
{
byte byte_1 = dataInput_1.readByte();
if (byte_1 == 0)
{
return new EndTag();
}
else
{
dataInput_1.readUTF();
Tag tag_1 = Tag.createTag(byte_1);
tag_1.read(dataInput_1, 0, PositionTracker.DEFAULT);
return tag_1;
}
}
catch (IOException ignored)
{
}
return null;
}
//copied private method from net.minecraft.nbt.NbtIo.write() and client method safe_write
private static void write(Tag tag_1, File file)
{
File file_2 = new File(file.getAbsolutePath() + "_tmp");
if (file_2.exists()) file_2.delete();
try(DataOutputStream dataOutputStream_1 = new DataOutputStream(new FileOutputStream(file_2)))
{
dataOutputStream_1.writeByte(tag_1.getType());
if (tag_1.getType() != 0)
{
dataOutputStream_1.writeUTF("");
tag_1.write(dataOutputStream_1);
}
}
catch (IOException e)
{
return;
}
if (file.exists()) file.delete();
if (!file.exists()) file_2.renameTo(file);
}
@Override
public Tag getData(String file)
{
File dataFile =CarpetServer.minecraft_server.getLevelStorage().resolveFile(
CarpetServer.minecraft_server.getLevelName(), "scripts/"+name+".data"+(file==null?"":"."+file)+".nbt");
if (!(dataFile.isFile()))
return null;
return read(dataFile);
}
@Override
public void saveData(String file, Tag globalState)
{
File dataFile =CarpetServer.minecraft_server.getLevelStorage().resolveFile(
CarpetServer.minecraft_server.getLevelName(), "scripts/"+name+".data"+(file==null?"":"."+file)+".nbt");
write(globalState, dataFile);
}
}
@@ -1,7 +1,12 @@
package carpet.script.bundled;
import net.minecraft.nbt.Tag;
public interface ModuleInterface
{
String getName();
String getCode();
default boolean isInternal() {return true; }
default Tag getData(String file) {return null; }
default void saveData(String file, Tag globalState) {}
}