mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 10:43:14 +00:00
Conversion support for EWG and Schematics
This commit is contained in:
parent
a33cd35ae8
commit
b875a4898b
@ -5,6 +5,7 @@ import java.io.FileInputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.EnumSet;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -28,6 +29,7 @@ public class StructureObject implements Serializable
|
|||||||
FileInputStream fin = new FileInputStream(so);
|
FileInputStream fin = new FileInputStream(so);
|
||||||
ObjectInputStream in = new ObjectInputStream(fin);
|
ObjectInputStream in = new ObjectInputStream(fin);
|
||||||
StructureObject o = (StructureObject) in.readObject();
|
StructureObject o = (StructureObject) in.readObject();
|
||||||
|
in.close();
|
||||||
int maxX = 0;
|
int maxX = 0;
|
||||||
int maxY = 0;
|
int maxY = 0;
|
||||||
int maxZ = 0;
|
int maxZ = 0;
|
||||||
@ -64,18 +66,17 @@ public class StructureObject implements Serializable
|
|||||||
|
|
||||||
if(bdx != null)
|
if(bdx != null)
|
||||||
{
|
{
|
||||||
iob.getBlocks().put(new BlockVector(i.x, i.y, i.z), FastBlockData.of(bdx));
|
iob.getBlocks().put(new BlockVector(i.x, -i.y, i.z), FastBlockData.of(bdx));
|
||||||
Iris.info("Mapped " + i.x + " " + i.y + " " + i.z + " to " + bdx.getAsString(true));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return iob;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static final FastBlockData map(int id, int dat)
|
private static final FastBlockData map(int id, int dat)
|
||||||
{
|
{
|
||||||
for(Material i : Material.values())
|
for(Material i : EnumSet.allOf(Material.class))
|
||||||
{
|
{
|
||||||
if(!i.isLegacy())
|
if(!i.isLegacy())
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@ import org.bukkit.event.HandlerList;
|
|||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.minelazz.epicworldgenerator.structures.StructureObject;
|
||||||
import com.volmit.iris.command.CommandIris;
|
import com.volmit.iris.command.CommandIris;
|
||||||
import com.volmit.iris.command.PermissionIris;
|
import com.volmit.iris.command.PermissionIris;
|
||||||
import com.volmit.iris.gen.IrisTerrainProvider;
|
import com.volmit.iris.gen.IrisTerrainProvider;
|
||||||
@ -26,6 +27,7 @@ import com.volmit.iris.gen.scaffold.TerrainTarget;
|
|||||||
import com.volmit.iris.link.CitizensLink;
|
import com.volmit.iris.link.CitizensLink;
|
||||||
import com.volmit.iris.link.MultiverseCoreLink;
|
import com.volmit.iris.link.MultiverseCoreLink;
|
||||||
import com.volmit.iris.link.MythicMobsLink;
|
import com.volmit.iris.link.MythicMobsLink;
|
||||||
|
import com.volmit.iris.manager.ConversionManager;
|
||||||
import com.volmit.iris.manager.EditManager;
|
import com.volmit.iris.manager.EditManager;
|
||||||
import com.volmit.iris.manager.IrisBoardManager;
|
import com.volmit.iris.manager.IrisBoardManager;
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
import com.volmit.iris.manager.IrisDataManager;
|
||||||
@ -58,6 +60,7 @@ public class Iris extends MortarPlugin
|
|||||||
public static Iris instance;
|
public static Iris instance;
|
||||||
public static IrisDataManager globaldata;
|
public static IrisDataManager globaldata;
|
||||||
public static ProjectManager proj;
|
public static ProjectManager proj;
|
||||||
|
public static ConversionManager convert;
|
||||||
public static IrisHotloadManager hotloader;
|
public static IrisHotloadManager hotloader;
|
||||||
public static WandManager wand;
|
public static WandManager wand;
|
||||||
public static StructureManager struct;
|
public static StructureManager struct;
|
||||||
@ -158,6 +161,7 @@ public class Iris extends MortarPlugin
|
|||||||
lock = new IrisLock("Iris");
|
lock = new IrisLock("Iris");
|
||||||
proj = new ProjectManager();
|
proj = new ProjectManager();
|
||||||
hotloader = new IrisHotloadManager();
|
hotloader = new IrisHotloadManager();
|
||||||
|
convert = new ConversionManager();
|
||||||
globaldata = new IrisDataManager(getDataFolder());
|
globaldata = new IrisDataManager(getDataFolder());
|
||||||
wand = new WandManager();
|
wand = new WandManager();
|
||||||
struct = new StructureManager();
|
struct = new StructureManager();
|
||||||
@ -171,6 +175,15 @@ public class Iris extends MortarPlugin
|
|||||||
J.sr(this::tickQueue, 0);
|
J.sr(this::tickQueue, 0);
|
||||||
PaperLib.suggestPaper(this);
|
PaperLib.suggestPaper(this);
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StructureObject.convert(getDataFile("rock.ewg"));
|
||||||
|
}
|
||||||
|
catch(ClassNotFoundException | IOException e)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sq(Runnable r)
|
public static void sq(Runnable r)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.volmit.iris.command;
|
package com.volmit.iris.command;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.gen.v2.TestGen;
|
|
||||||
import com.volmit.iris.util.Command;
|
import com.volmit.iris.util.Command;
|
||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
@ -59,11 +58,11 @@ public class CommandIris extends MortarCommand
|
|||||||
@Override
|
@Override
|
||||||
public boolean handle(MortarSender sender, String[] args)
|
public boolean handle(MortarSender sender, String[] args)
|
||||||
{
|
{
|
||||||
if(args.length == 1 && args[0].equalsIgnoreCase("test!"))
|
// if(args.length == 1 && args[0].equalsIgnoreCase("test!"))
|
||||||
{
|
// {
|
||||||
TestGen.gen(sender.player());
|
// TestGen.gen(sender.player());
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
|
|
||||||
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
|
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
|
||||||
printHelp(sender);
|
printHelp(sender);
|
||||||
|
@ -50,6 +50,9 @@ public class CommandIrisStudio extends MortarCommand
|
|||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioTP tp;
|
private CommandIrisStudioTP tp;
|
||||||
|
|
||||||
|
@Command
|
||||||
|
private CommandIrisStudioConvert convert;
|
||||||
|
|
||||||
public CommandIrisStudio()
|
public CommandIrisStudio()
|
||||||
{
|
{
|
||||||
super("studio", "std");
|
super("studio", "std");
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.volmit.iris.command;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.IrisSettings;
|
||||||
|
import com.volmit.iris.util.MortarCommand;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
|
public class CommandIrisStudioConvert extends MortarCommand
|
||||||
|
{
|
||||||
|
public CommandIrisStudioConvert()
|
||||||
|
{
|
||||||
|
super("convert", "cvt");
|
||||||
|
requiresPermission(Iris.perm.studio);
|
||||||
|
setDescription("Convert .ewg schematics into Iris (.iob) files");
|
||||||
|
setCategory("Studio");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handle(MortarSender sender, String[] args)
|
||||||
|
{
|
||||||
|
if(!IrisSettings.get().isStudio())
|
||||||
|
{
|
||||||
|
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Iris.convert.check(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getArgsUsage()
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,6 @@ import java.util.function.Function;
|
|||||||
|
|
||||||
import com.volmit.iris.gen.v2.scaffold.Significance;
|
import com.volmit.iris.gen.v2.scaffold.Significance;
|
||||||
import com.volmit.iris.gen.v2.scaffold.hunk.Hunk;
|
import com.volmit.iris.gen.v2.scaffold.hunk.Hunk;
|
||||||
import com.volmit.iris.gen.v2.scaffold.multicore.BurstExecutor;
|
|
||||||
import com.volmit.iris.gen.v2.scaffold.stream.AddingStream;
|
import com.volmit.iris.gen.v2.scaffold.stream.AddingStream;
|
||||||
import com.volmit.iris.gen.v2.scaffold.stream.AwareConversionStream2D;
|
import com.volmit.iris.gen.v2.scaffold.stream.AwareConversionStream2D;
|
||||||
import com.volmit.iris.gen.v2.scaffold.stream.AwareConversionStream3D;
|
import com.volmit.iris.gen.v2.scaffold.stream.AwareConversionStream3D;
|
||||||
|
166
src/main/java/com/volmit/iris/manager/ConversionManager.java
Normal file
166
src/main/java/com/volmit/iris/manager/ConversionManager.java
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
package com.volmit.iris.manager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
import com.minelazz.epicworldgenerator.structures.StructureObject;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
|
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||||
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||||
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||||
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
|
||||||
|
import com.sk89q.worldedit.math.BlockVector3;
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.object.IrisObject;
|
||||||
|
import com.volmit.iris.util.Converter;
|
||||||
|
import com.volmit.iris.util.FastBlockData;
|
||||||
|
import com.volmit.iris.util.J;
|
||||||
|
import com.volmit.iris.util.KList;
|
||||||
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
|
||||||
|
public class ConversionManager
|
||||||
|
{
|
||||||
|
private KList<Converter> converters;
|
||||||
|
private File folder;
|
||||||
|
|
||||||
|
public ConversionManager()
|
||||||
|
{
|
||||||
|
folder = Iris.instance.getDataFolder("convert");
|
||||||
|
converters = new KList<>();
|
||||||
|
|
||||||
|
J.s(() ->
|
||||||
|
{
|
||||||
|
if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit"))
|
||||||
|
{
|
||||||
|
converters.add(new Converter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String getOutExtension()
|
||||||
|
{
|
||||||
|
return "iob";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getInExtension()
|
||||||
|
{
|
||||||
|
return "schem";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void convert(File in, File out)
|
||||||
|
{
|
||||||
|
convertSchematic(in, out);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
converters.add(new Converter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String getOutExtension()
|
||||||
|
{
|
||||||
|
return "iob";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getInExtension()
|
||||||
|
{
|
||||||
|
return "schematic";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void convert(File in, File out)
|
||||||
|
{
|
||||||
|
convertSchematic(in, out);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 5);
|
||||||
|
|
||||||
|
converters.add(new Converter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String getOutExtension()
|
||||||
|
{
|
||||||
|
return "iob";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getInExtension()
|
||||||
|
{
|
||||||
|
return "ewg";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void convert(File in, File out)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StructureObject.convert(in).write(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(ClassNotFoundException | IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void convertSchematic(File in, File out)
|
||||||
|
{
|
||||||
|
ClipboardFormat format = ClipboardFormats.findByFile(in);
|
||||||
|
try(ClipboardReader reader = format.getReader(new FileInputStream(in)))
|
||||||
|
{
|
||||||
|
Clipboard clipboard = reader.read();
|
||||||
|
BlockVector3 size = clipboard.getMaximumPoint().subtract(clipboard.getMinimumPoint());
|
||||||
|
IrisObject o = new IrisObject(size.getBlockX() + 1, size.getBlockY() + 1, size.getBlockZ() + 1);
|
||||||
|
|
||||||
|
for(int i = clipboard.getMinimumPoint().getBlockX(); i <= clipboard.getMaximumPoint().getBlockX(); i++)
|
||||||
|
{
|
||||||
|
for(int j = clipboard.getMinimumPoint().getBlockY(); j <= clipboard.getMaximumPoint().getBlockY(); j++)
|
||||||
|
{
|
||||||
|
for(int k = clipboard.getMinimumPoint().getBlockZ(); k <= clipboard.getMaximumPoint().getBlockZ(); k++)
|
||||||
|
{
|
||||||
|
o.setUnsigned(i - clipboard.getMinimumPoint().getBlockX(), j - clipboard.getMinimumPoint().getBlockY(), k - clipboard.getMinimumPoint().getBlockZ(), FastBlockData.of(BukkitAdapter.adapt(clipboard.getFullBlock(BlockVector3.at(i, j, k)))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
o.write(out);
|
||||||
|
}
|
||||||
|
catch(FileNotFoundException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch(IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void check(MortarSender s)
|
||||||
|
{
|
||||||
|
int m = 0;
|
||||||
|
Iris.instance.getDataFolder("convert");
|
||||||
|
|
||||||
|
for(File i : folder.listFiles())
|
||||||
|
{
|
||||||
|
for(Converter j : converters)
|
||||||
|
{
|
||||||
|
if(i.getName().endsWith("." + j.getInExtension()))
|
||||||
|
{
|
||||||
|
File out = new File(folder, i.getName().replaceAll("\\Q." + j.getInExtension() + "\\E", "." + j.getOutExtension()));
|
||||||
|
m++;
|
||||||
|
j.convert(i, out);
|
||||||
|
s.sendMessage("Converted " + i.getName() + " -> " + out.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s.sendMessage("Converted " + m + " File" + (m == 1 ? "" : "s"));
|
||||||
|
}
|
||||||
|
}
|
12
src/main/java/com/volmit/iris/util/Converter.java
Normal file
12
src/main/java/com/volmit/iris/util/Converter.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package com.volmit.iris.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public interface Converter
|
||||||
|
{
|
||||||
|
public String getInExtension();
|
||||||
|
|
||||||
|
public String getOutExtension();
|
||||||
|
|
||||||
|
public void convert(File in, File out);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user