Works, but somehow i broke parallax

This commit is contained in:
Daniel Mills 2020-11-11 20:58:47 -05:00
parent 4c44957764
commit bf9c4c602b
29 changed files with 413 additions and 640 deletions

View File

@ -31,7 +31,6 @@ public class Iris extends VolmitPlugin
{ {
public static KList<GroupedExecutor> executors = new KList<>(); public static KList<GroupedExecutor> executors = new KList<>();
public static Iris instance; public static Iris instance;
public static IrisDataManager globaldata;
public static ProjectManager proj; public static ProjectManager proj;
public static ConversionManager convert; public static ConversionManager convert;
public static IrisHotloadManager hotloader; public static IrisHotloadManager hotloader;
@ -154,7 +153,6 @@ public class Iris extends VolmitPlugin
proj = new ProjectManager(); proj = new ProjectManager();
hotloader = new IrisHotloadManager(); hotloader = new IrisHotloadManager();
convert = new ConversionManager(); convert = new ConversionManager();
globaldata = new IrisDataManager(getDataFolder());
wand = new WandManager(); wand = new WandManager();
struct = new StructureManager(); struct = new StructureManager();
board = new IrisBoardManager(); board = new IrisBoardManager();
@ -194,6 +192,7 @@ public class Iris extends VolmitPlugin
board.disable(); board.disable();
Bukkit.getScheduler().cancelTasks(this); Bukkit.getScheduler().cancelTasks(this);
HandlerList.unregisterAll((Plugin) this); HandlerList.unregisterAll((Plugin) this);
IrisDataManager.managers.clear();
super.onDisable(); super.onDisable();
} }

View File

@ -80,6 +80,8 @@ public class IrisEngine extends BlockPopulator implements Engine
@Override @Override
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) { public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) {
try
{
Hunk<Biome> biomes = vbiomes; Hunk<Biome> biomes = vbiomes;
Hunk<BlockData> blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t)); Hunk<BlockData> blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t));
@ -101,6 +103,11 @@ public class IrisEngine extends BlockPopulator implements Engine
getFramework().recycle(); getFramework().recycle();
} }
catch(Throwable e)
{
fail("Failed to generate " + x + ", " + z, e);
}
}
@Override @Override
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk c) public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk c)

View File

@ -51,6 +51,8 @@ public class IrisEngineCompound implements EngineCompound {
Iris.info("Initializing Engine Composite for " + world.getName()); Iris.info("Initializing Engine Composite for " + world.getName());
this.world = world; this.world = world;
engineMetadata = EngineData.load(getEngineMetadataFile()); engineMetadata = EngineData.load(getEngineMetadataFile());
engineMetadata.setDimension(rootDimension.getLoadKey());
engineMetadata.setLastVersion(Iris.instance.getDescription().getVersion());
saveEngineMetadata(); saveEngineMetadata();
populators = new KList<>(); populators = new KList<>();
@ -83,7 +85,7 @@ public class IrisEngineCompound implements EngineCompound {
{ {
IrisDimensionIndex index = rootDimension.getDimensionalComposite().get(i); IrisDimensionIndex index = rootDimension.getDimensionalComposite().get(i);
IrisDimension dimension = data.getDimensionLoader().load(index.getDimension()); IrisDimension dimension = data.getDimensionLoader().load(index.getDimension());
engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy().preferFolder(rootDimension.getLoadKey()), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i); engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy(), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i);
engines[i].setMinHeight(buf); engines[i].setMinHeight(buf);
buf += engines[i].getHeight(); buf += engines[i].getHeight();
} }

View File

@ -1,35 +1,20 @@
package com.volmit.iris.manager; package com.volmit.iris.manager;
import java.io.File; import com.volmit.iris.Iris;
import com.volmit.iris.object.*;
import org.bukkit.World.Environment; import com.volmit.iris.util.KMap;
import org.bukkit.block.Biome;
import com.google.gson.Gson;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDecorator;
import com.volmit.iris.object.IrisBlockData;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisEntity;
import com.volmit.iris.object.IrisGenerator;
import com.volmit.iris.object.IrisLootTable;
import com.volmit.iris.object.IrisNoiseGenerator;
import com.volmit.iris.object.IrisObjectPlacement;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.util.IO;
import com.volmit.iris.util.JSONObject;
import com.volmit.iris.util.ObjectResourceLoader; import com.volmit.iris.util.ObjectResourceLoader;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.ResourceLoader; import com.volmit.iris.util.ResourceLoader;
import lombok.Data; import lombok.Data;
import java.io.File;
import java.util.function.Function;
@Data @Data
public class IrisDataManager public class IrisDataManager
{ {
private File dataFolder; public static final KMap<Integer, IrisDataManager> managers = new KMap<>();
private File packs;
private boolean prod;
private ResourceLoader<IrisBiome> biomeLoader; private ResourceLoader<IrisBiome> biomeLoader;
private ResourceLoader<IrisLootTable> lootLoader; private ResourceLoader<IrisLootTable> lootLoader;
private ResourceLoader<IrisRegion> regionLoader; private ResourceLoader<IrisRegion> regionLoader;
@ -39,34 +24,64 @@ public class IrisDataManager
private ResourceLoader<IrisEntity> entityLoader; private ResourceLoader<IrisEntity> entityLoader;
private ResourceLoader<IrisBlockData> blockLoader; private ResourceLoader<IrisBlockData> blockLoader;
private ObjectResourceLoader objectLoader; private ObjectResourceLoader objectLoader;
private boolean closed;
private final File dataFolder;
private final int id;
public IrisDataManager(File dataFolder) public IrisDataManager(File dataFolder)
{ {
this(dataFolder, false); this(dataFolder, false);
} }
public IrisDataManager(File dataFolder, boolean v2) public IrisDataManager(File dataFolder, boolean oneshot)
{ {
this.dataFolder = dataFolder; this.dataFolder = dataFolder;
this.packs = new File(dataFolder, ProjectManager.WORKSPACE_NAME); this.id = RNG.r.imax();
boolean pr = false; closed = false;
if(!packs.exists())
{
if(v2)
{
pr = true;
packs = new File(dataFolder, "iris/pack");
}
else if(new File(dataFolder, "iris").exists())
{
pr = true;
packs = new File(dataFolder, "iris");
}
}
hotloaded(); hotloaded();
prod = pr;
if(!oneshot)
{
managers.put(id, this);
}
}
public void close()
{
closed = true;
managers.remove(id);
dump();
this.lootLoader = null;
this.entityLoader = null;
this.regionLoader = null;
this.biomeLoader = null;
this.dimensionLoader = null;
this.structureLoader = null;
this.generatorLoader = null;
this.blockLoader = null;
this.objectLoader = null;
}
public static void dumpManagers()
{
for(IrisDataManager i : managers.v())
{
Iris.warn(i.getId() + " @ " + i.getDataFolder().getAbsolutePath());
printData(i.lootLoader);
printData(i.entityLoader);
printData(i.regionLoader);
printData(i.biomeLoader);
printData(i.dimensionLoader);
printData(i.structureLoader);
printData(i.generatorLoader);
printData(i.blockLoader);
printData(i.objectLoader);
}
}
private static void printData(ResourceLoader<?> rl)
{
Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().size() + " Folders=" + rl.getFolders().size());
} }
public IrisDataManager copy() { public IrisDataManager copy() {
@ -75,34 +90,34 @@ public class IrisDataManager
public void hotloaded() public void hotloaded()
{ {
if(prod) if(closed)
{ {
return; return;
} }
File packs = this.packs.getName().equals(ProjectManager.WORKSPACE_NAME) ? this.packs : dataFolder; File packs = dataFolder;
packs.mkdirs(); packs.mkdirs();
this.lootLoader = new ResourceLoader<>(packs, "loot", "Loot", IrisLootTable.class); this.lootLoader = new ResourceLoader<>(packs, this, "loot", "Loot", IrisLootTable.class);
this.entityLoader = new ResourceLoader<>(packs, "entities", "Entity", IrisEntity.class); this.entityLoader = new ResourceLoader<>(packs,this, "entities", "Entity", IrisEntity.class);
this.regionLoader = new ResourceLoader<>(packs, "regions", "Region", IrisRegion.class); this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
this.biomeLoader = new ResourceLoader<>(packs, "biomes", "Biome", IrisBiome.class); this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
this.dimensionLoader = new ResourceLoader<>(packs, "dimensions", "Dimension", IrisDimension.class); this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.class);
this.structureLoader = new ResourceLoader<>(packs, "structures", "Structure", IrisStructure.class); this.structureLoader = new ResourceLoader<>(packs, this, "structures", "Structure", IrisStructure.class);
this.generatorLoader = new ResourceLoader<>(packs, "generators", "Generator", IrisGenerator.class); this.generatorLoader = new ResourceLoader<>(packs, this, "generators", "Generator", IrisGenerator.class);
this.blockLoader = new ResourceLoader<>(packs, "blocks", "Block", IrisBlockData.class); this.blockLoader = new ResourceLoader<>(packs,this, "blocks", "Block", IrisBlockData.class);
this.objectLoader = new ObjectResourceLoader(packs, "objects", "Object"); this.objectLoader = new ObjectResourceLoader(packs, this, "objects", "Object");
if(packs.getName().equals(ProjectManager.WORKSPACE_NAME))
{
writeExamples();
}
} }
public void dump() public void dump()
{ {
if(closed)
{
return;
}
biomeLoader.clearCache(); biomeLoader.clearCache();
blockLoader.clearCache(); blockLoader.clearCache();
lootLoader.clearCache(); lootLoader.clearCache();
objectLoader.clearCache();
regionLoader.clearCache(); regionLoader.clearCache();
dimensionLoader.clearCache(); dimensionLoader.clearCache();
entityLoader.clearCache(); entityLoader.clearCache();
@ -110,95 +125,13 @@ public class IrisDataManager
structureLoader.clearCache(); structureLoader.clearCache();
} }
private void writeExamples()
{
File examples = new File(dataFolder, "example");
examples.mkdirs();
String biomes = "";
String envs = "";
for(Biome i : Biome.values())
{
biomes += i.name() + "\n";
}
for(Environment i : Environment.values())
{
envs += i.name() + "\n";
}
try
{
new File(examples, "example-pack/regions").mkdirs();
new File(examples, "example-pack/biomes").mkdirs();
new File(examples, "example-pack/dimensions").mkdirs();
new File(examples, "example-pack/generators").mkdirs();
IO.writeAll(new File(examples, "biome-list.txt"), biomes);
IO.writeAll(new File(examples, "environment-list.txt"), envs);
IrisGenerator gen = new IrisGenerator();
IrisNoiseGenerator n = new IrisNoiseGenerator();
n.setSeed(1000);
IrisNoiseGenerator nf = new IrisNoiseGenerator();
nf.setOctaves(3);
nf.setOpacity(16);
nf.setZoom(24);
nf.setSeed(44);
n.getFracture().add(nf);
IrisNoiseGenerator nf2 = new IrisNoiseGenerator();
nf2.setOctaves(8);
nf2.setOpacity(24);
nf2.setZoom(64);
nf2.setSeed(55);
n.getFracture().add(nf2);
gen.getComposite().add(n);
IrisDimension dim = new IrisDimension();
IrisRegion region = new IrisRegion();
region.getLandBiomes().add("plains");
region.getLandBiomes().add("desert");
region.getLandBiomes().add("forest");
region.getLandBiomes().add("mountains");
region.getSeaBiomes().add("ocean");
region.getShoreBiomes().add("beach");
IrisObjectPlacement o = new IrisObjectPlacement();
o.getPlace().add("schematic1");
o.getPlace().add("schematic2");
IrisBiome biome = new IrisBiome();
biome.getChildren().add("another_biome");
biome.getDecorators().add(new IrisDecorator());
biome.getObjects().add(o);
IO.writeAll(new File(examples, "example-pack/biomes/example-biome.json"), new JSONObject(new Gson().toJson(biome)).toString(4));
IO.writeAll(new File(examples, "example-pack/regions/example-region.json"), new JSONObject(new Gson().toJson(region)).toString(4));
IO.writeAll(new File(examples, "example-pack/dimensions/example-dimension.json"), new JSONObject(new Gson().toJson(dim)).toString(4));
IO.writeAll(new File(examples, "example-pack/generators/example-generator.json"), new JSONObject(new Gson().toJson(gen)).toString(4));
}
catch(Throwable e)
{
}
}
public IrisDataManager preferFolder(String name)
{
biomeLoader.preferFolder(name);
blockLoader.preferFolder(name);
lootLoader.preferFolder(name);
regionLoader.preferFolder(name);
entityLoader.preferFolder(name);
dimensionLoader.preferFolder(name);
generatorLoader.preferFolder(name);
structureLoader.preferFolder(name);
return this;
}
public void clearLists() public void clearLists()
{ {
if(closed)
{
return;
}
lootLoader.clearList(); lootLoader.clearList();
blockLoader.clearList(); blockLoader.clearList();
entityLoader.clearList(); entityLoader.clearList();
@ -207,5 +140,77 @@ public class IrisDataManager
dimensionLoader.clearList(); dimensionLoader.clearList();
generatorLoader.clearList(); generatorLoader.clearList();
structureLoader.clearList(); structureLoader.clearList();
objectLoader.clearList();
}
public static IrisObject loadAnyObject(String key)
{
return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false));
}
public static IrisBiome loadAnyBiome(String key)
{
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
}
public static IrisStructure loadAnyStructure(String key)
{
return loadAny(key, (dm) -> dm.getStructureLoader().load(key, false));
}
public static IrisEntity loadAnyEntity(String key)
{
return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false));
}
public static IrisLootTable loadAnyLootTable(String key)
{
return loadAny(key, (dm) -> dm.getLootLoader().load(key, false));
}
public static IrisBlockData loadAnyBlock(String key)
{
return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false));
}
public static IrisRegion loadAnyRegion(String key)
{
return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false));
}
public static IrisDimension loadAnyDimension(String key)
{
return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false));
}
public static IrisGenerator loadAnyGenerator(String key)
{
return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false));
}
public static <T extends IrisRegistrant> T loadAny(String key, Function<IrisDataManager, T> v) {
try
{
for(File i : Iris.instance.getDataFolder("packs").listFiles())
{
if(i.isDirectory())
{
IrisDataManager dm = new IrisDataManager(i, true);
T t = v.apply(dm);
if(t != null)
{
return t;
}
}
}
}
catch(Throwable e)
{
e.printStackTrace();
}
return null;
} }
} }

View File

@ -1,16 +1,15 @@
package com.volmit.iris.manager; package com.volmit.iris.manager;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings; import com.volmit.iris.IrisSettings;
import com.volmit.iris.generator.legacy.scaffold.IrisContext; import com.volmit.iris.generator.legacy.scaffold.IrisContext;
import com.volmit.iris.util.ChronoLatch; import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.FolderWatcher; import com.volmit.iris.util.FolderWatcher;
import com.volmit.iris.util.J; import com.volmit.iris.util.J;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.io.File;
public class IrisHotloadManager public class IrisHotloadManager
{ {
@ -160,7 +159,6 @@ public class IrisHotloadManager
} }
Bukkit.getConsoleSender().sendMessage(Iris.instance.getTag("Studio") + m); Bukkit.getConsoleSender().sendMessage(Iris.instance.getTag("Studio") + m);
Iris.globaldata.hotloaded();
ch.onHotloaded(); ch.onHotloaded();
busy = false; busy = false;
}); });

View File

@ -33,12 +33,6 @@ public class IrisProject
this.name = path.getName(); this.name = path.getName();
} }
private static void flush()
{
Iris.globaldata.dump();
Iris.globaldata.preferFolder(null);
}
public boolean isOpen() public boolean isOpen()
{ {
return activeProvider != null; return activeProvider != null;
@ -58,13 +52,12 @@ public class IrisProject
close(); close();
} }
flush(); IrisDimension d = IrisDataManager.loadAnyDimension(getName());
IrisDimension d = Iris.globaldata.getDimensionLoader().load(getName());
J.attemptAsync(() -> J.attemptAsync(() ->
{ {
try try
{ {
File f = d.getLoadFile().getParentFile().getParentFile(); File f = d.getLoader().getDataFolder();
for(File i : f.listFiles()) for(File i : f.listFiles())
{ {
@ -98,7 +91,6 @@ public class IrisProject
return; return;
} }
Iris.globaldata.dump();
String wfp = "iris/" + UUID.randomUUID(); String wfp = "iris/" + UUID.randomUUID();
WorldCreator c = new IrisWorldCreator().dimension(getName()) WorldCreator c = new IrisWorldCreator().dimension(getName())
@ -184,7 +176,6 @@ public class IrisProject
File folder = activeProvider.getTarget().getWorld().getWorldFolder(); File folder = activeProvider.getTarget().getWorld().getWorldFolder();
Iris.linkMultiverseCore.removeFromConfig(activeProvider.getTarget().getWorld().getName()); Iris.linkMultiverseCore.removeFromConfig(activeProvider.getTarget().getWorld().getName());
Bukkit.unloadWorld(activeProvider.getTarget().getWorld().getName(), false); Bukkit.unloadWorld(activeProvider.getTarget().getWorld().getName(), false);
flush();
J.attemptAsync(() -> IO.delete(folder)); J.attemptAsync(() -> IO.delete(folder));
activeProvider = null; activeProvider = null;
} }
@ -230,7 +221,6 @@ public class IrisProject
public JSONObject createCodeWorkspaceConfig() public JSONObject createCodeWorkspaceConfig()
{ {
Iris.globaldata.clearLists();
JSONObject ws = new JSONObject(); JSONObject ws = new JSONObject();
JSONArray folders = new JSONArray(); JSONArray folders = new JSONArray();
JSONObject folder = new JSONObject(); JSONObject folder = new JSONObject();
@ -260,18 +250,16 @@ public class IrisProject
jc.put("editor.suggest.insertMode", "replace"); jc.put("editor.suggest.insertMode", "replace");
settings.put("[json]", jc); settings.put("[json]", jc);
settings.put("json.maxItemsComputed", 15000); settings.put("json.maxItemsComputed", 15000);
String gg = Iris.globaldata.getBiomeLoader().getPreferredFolder();
Iris.globaldata.preferFolder(getName());
JSONArray schemas = new JSONArray(); JSONArray schemas = new JSONArray();
schemas.put(getSchemaEntry(IrisDimension.class, Iris.globaldata, "/dimensions/*.json")); IrisDataManager dm = new IrisDataManager(getPath());
schemas.put(getSchemaEntry(IrisEntity.class, Iris.globaldata, "/entities/*.json")); schemas.put(getSchemaEntry(IrisDimension.class, dm, "/dimensions/*.json"));
schemas.put(getSchemaEntry(IrisBiome.class, Iris.globaldata, "/biomes/*.json")); schemas.put(getSchemaEntry(IrisEntity.class, dm, "/entities/*.json"));
schemas.put(getSchemaEntry(IrisRegion.class, Iris.globaldata, "/regions/*.json")); schemas.put(getSchemaEntry(IrisBiome.class, dm, "/biomes/*.json"));
schemas.put(getSchemaEntry(IrisGenerator.class, Iris.globaldata, "/generators/*.json")); schemas.put(getSchemaEntry(IrisRegion.class, dm, "/regions/*.json"));
schemas.put(getSchemaEntry(IrisStructure.class, Iris.globaldata, "/structures/*.json")); schemas.put(getSchemaEntry(IrisGenerator.class,dm, "/generators/*.json"));
schemas.put(getSchemaEntry(IrisBlockData.class, Iris.globaldata, "/blocks/*.json")); schemas.put(getSchemaEntry(IrisStructure.class, dm, "/structures/*.json"));
schemas.put(getSchemaEntry(IrisLootTable.class, Iris.globaldata, "/loot/*.json")); schemas.put(getSchemaEntry(IrisBlockData.class, dm, "/blocks/*.json"));
Iris.globaldata.preferFolder(gg); schemas.put(getSchemaEntry(IrisLootTable.class, dm, "/loot/*.json"));
settings.put("json.schemas", schemas); settings.put("json.schemas", schemas);
ws.put("settings", settings); ws.put("settings", settings);
@ -291,10 +279,9 @@ public class IrisProject
public File compilePackage(MortarSender sender, boolean obfuscate, boolean minify) public File compilePackage(MortarSender sender, boolean obfuscate, boolean minify)
{ {
String dim = getName(); String dim = getName();
Iris.globaldata.dump();
Iris.globaldata.preferFolder(null);
String dimm = dim; String dimm = dim;
IrisDimension dimension = Iris.globaldata.getDimensionLoader().load(dimm); IrisDataManager dm = new IrisDataManager(path);
IrisDimension dimension = dm.getDimensionLoader().load(dimm);
File folder = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey()); File folder = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey());
folder.mkdirs(); folder.mkdirs();
Iris.info("Packaging Dimension " + dimension.getName() + " " + (obfuscate ? "(Obfuscated)" : "")); Iris.info("Packaging Dimension " + dimension.getName() + " " + (obfuscate ? "(Obfuscated)" : ""));
@ -305,34 +292,32 @@ public class IrisProject
KSet<IrisGenerator> generators = new KSet<>(); KSet<IrisGenerator> generators = new KSet<>();
KSet<IrisLootTable> loot = new KSet<>(); KSet<IrisLootTable> loot = new KSet<>();
KSet<IrisBlockData> blocks = new KSet<>(); KSet<IrisBlockData> blocks = new KSet<>();
Iris.globaldata.preferFolder(dim);
for(String i : Iris.globaldata.getBlockLoader().getPreferredKeys()) for(String i : dm.getDimensionLoader().getPossibleKeys())
{ {
blocks.add(Iris.globaldata.getBlockLoader().load(i)); blocks.add(dm.getBlockLoader().load(i));
} }
Iris.globaldata.preferFolder(null); dimension.getRegions().forEach((i) -> regions.add(dm.getRegionLoader().load(i)));
dimension.getRegions().forEach((i) -> regions.add(Iris.globaldata.getRegionLoader().load(i))); dimension.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)));
dimension.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)));
regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null))); regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null)));
biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null)))); biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null))));
regions.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null)))); regions.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null))));
biomes.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null)))); biomes.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null))));
regions.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)))); regions.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))));
biomes.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)))); biomes.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))));
structures.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)))); structures.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))));
structures.forEach((b) -> b.getTiles().forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i))))); structures.forEach((b) -> b.getTiles().forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)))));
structures.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); structures.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))))); structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))));
biomes.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); biomes.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))); dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
structures.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); structures.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))))); structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))));
biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))); dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
KMap<String, String> renameObjects = new KMap<>(); KMap<String, String> renameObjects = new KMap<>();
String a = ""; String a = "";
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
@ -423,7 +408,7 @@ public class IrisProject
{ {
try try
{ {
File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0)); File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0));
IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); IO.copyFile(f, new File(folder, "objects/" + k + ".iob"));
gb.append(IO.hash(f)); gb.append(IO.hash(f));
ggg.set(ggg.get() + 1); ggg.set(ggg.get() + 1);
@ -446,7 +431,7 @@ public class IrisProject
{ {
try try
{ {
File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0)); File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0));
IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); IO.copyFile(f, new File(folder, "objects/" + k + ".iob"));
gb.append(IO.hash(f)); gb.append(IO.hash(f));
ggg.set(ggg.get() + 1); ggg.set(ggg.get() + 1);
@ -469,7 +454,7 @@ public class IrisProject
{ {
try try
{ {
File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0)); File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0));
IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); IO.copyFile(f, new File(folder, "objects/" + k + ".iob"));
gb.append(IO.hash(f)); gb.append(IO.hash(f));
ggg.set(ggg.get() + 1); ggg.set(ggg.get() + 1);

View File

@ -1,28 +1,19 @@
package com.volmit.iris.manager; package com.volmit.iris.manager;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.UUID;
import org.zeroturnaround.zip.ZipUtil;
import org.zeroturnaround.zip.commons.FileUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException; import com.google.gson.JsonSyntaxException;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings; import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.Form; import com.volmit.iris.util.*;
import com.volmit.iris.util.IO;
import com.volmit.iris.util.J;
import com.volmit.iris.util.JSONArray;
import com.volmit.iris.util.JSONException;
import com.volmit.iris.util.JSONObject;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.MortarSender;
import lombok.Data; import lombok.Data;
import org.zeroturnaround.zip.ZipUtil;
import org.zeroturnaround.zip.commons.FileUtils;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.UUID;
@Data @Data
public class ProjectManager public class ProjectManager
@ -64,7 +55,8 @@ public class ProjectManager
{ {
sender.sendMessage("Looking for Package: " + type); sender.sendMessage("Looking for Package: " + type);
File iris = new File(folder, "iris"); File iris = new File(folder, "iris");
IrisDimension dim = Iris.globaldata.getDimensionLoader().load(type); File irispack = new File(folder, "iris/pack");
IrisDimension dim = IrisDataManager.loadAnyDimension(type);
if(dim == null) if(dim == null)
{ {
@ -73,7 +65,7 @@ public class ProjectManager
if(i.isFile() && i.getName().equals(type + ".iris")) if(i.isFile() && i.getName().equals(type + ".iris"))
{ {
sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder"); sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder");
ZipUtil.unpack(i, iris); ZipUtil.unpack(i, irispack);
break; break;
} }
} }
@ -86,7 +78,7 @@ public class ProjectManager
try try
{ {
FileUtils.copyDirectory(f, iris); FileUtils.copyDirectory(f, irispack);
} }
catch(IOException e) catch(IOException e)
@ -95,12 +87,10 @@ public class ProjectManager
} }
} }
File dimf = new File(iris, "dimensions/" + type + ".json"); File dimf = new File(irispack, "dimensions/" + type + ".json");
if(!dimf.exists() || !dimf.isFile()) if(!dimf.exists() || !dimf.isFile())
{ {
Iris.globaldata.dump();
Iris.globaldata.preferFolder(null);
Iris.proj.downloadSearch(sender, type, false); Iris.proj.downloadSearch(sender, type, false);
File downloaded = Iris.proj.getWorkspaceFolder(type); File downloaded = Iris.proj.getWorkspaceFolder(type);
@ -110,7 +100,7 @@ public class ProjectManager
{ {
try try
{ {
FileUtils.copyFile(i, new File(iris, i.getName())); FileUtils.copyFile(i, new File(irispack, i.getName()));
} }
catch(IOException e) catch(IOException e)
@ -123,7 +113,7 @@ public class ProjectManager
{ {
try try
{ {
FileUtils.copyDirectory(i, new File(iris, i.getName())); FileUtils.copyDirectory(i, new File(irispack, i.getName()));
} }
catch(IOException e) catch(IOException e)
@ -142,7 +132,7 @@ public class ProjectManager
return null; return null;
} }
IrisDataManager dm = new IrisDataManager(folder); IrisDataManager dm = new IrisDataManager(irispack);
dim = dm.getDimensionLoader().load(type); dim = dm.getDimensionLoader().load(type);
if(dim == null) if(dim == null)
@ -236,10 +226,7 @@ public class ProjectManager
IO.delete(packEntry); IO.delete(packEntry);
} }
Iris.globaldata.dump(); if(IrisDataManager.loadAnyDimension(key) != null)
Iris.globaldata.preferFolder(null);
if(Iris.globaldata.getDimensionLoader().load(key) != null)
{ {
sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!"); sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!");
return; return;
@ -263,8 +250,6 @@ public class ProjectManager
} }
sender.sendMessage("Successfully Aquired " + d.getName()); sender.sendMessage("Successfully Aquired " + d.getName());
Iris.globaldata.dump();
Iris.globaldata.preferFolder(null);
} }
public KMap<String, String> getListing(boolean cached) public KMap<String, String> getListing(boolean cached)

View File

@ -1,36 +1,14 @@
package com.volmit.iris.manager; package com.volmit.iris.manager;
import java.awt.GraphicsEnvironment; import com.volmit.iris.Iris;
import java.lang.reflect.Field; import com.volmit.iris.util.*;
import java.lang.reflect.Modifier;
import java.util.List;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import com.volmit.iris.Iris; import java.awt.*;
import com.volmit.iris.util.ArrayType; import java.lang.reflect.Field;
import com.volmit.iris.util.B; import java.lang.reflect.Modifier;
import com.volmit.iris.util.Desc; import java.util.List;
import com.volmit.iris.util.JSONArray;
import com.volmit.iris.util.JSONObject;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.MaxNumber;
import com.volmit.iris.util.MinNumber;
import com.volmit.iris.util.RegistryListBiome;
import com.volmit.iris.util.RegistryListBlockType;
import com.volmit.iris.util.RegistryListDimension;
import com.volmit.iris.util.RegistryListEntity;
import com.volmit.iris.util.RegistryListFont;
import com.volmit.iris.util.RegistryListGenerator;
import com.volmit.iris.util.RegistryListItemType;
import com.volmit.iris.util.RegistryListLoot;
import com.volmit.iris.util.RegistryListMythical;
import com.volmit.iris.util.RegistryListObject;
import com.volmit.iris.util.RegistryListRegion;
import com.volmit.iris.util.RegistryListStructure;
import com.volmit.iris.util.Required;
public class SchemaBuilder public class SchemaBuilder
{ {
@ -198,7 +176,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getBiomeLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getBiomeLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -233,7 +211,7 @@ public class SchemaBuilder
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
JSONArray ja = new JSONArray(); JSONArray ja = new JSONArray();
for(String i : data.getBlockLoader().getPreferredKeys()) for(String i : data.getBlockLoader().getPossibleKeys())
{ {
ja.put(i); ja.put(i);
} }
@ -277,7 +255,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getEntityLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getEntityLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -311,7 +289,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getLootLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getLootLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -327,7 +305,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getDimensionLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getDimensionLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -344,7 +322,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getGeneratorLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getGeneratorLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -361,7 +339,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getObjectLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getObjectLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -378,7 +356,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getRegionLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getRegionLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -395,7 +373,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getStructureLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getStructureLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -560,7 +538,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getBiomeLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getBiomeLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -605,7 +583,7 @@ public class SchemaBuilder
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
JSONArray ja = new JSONArray(); JSONArray ja = new JSONArray();
for(String i : data.getBlockLoader().getPreferredKeys()) for(String i : data.getBlockLoader().getPossibleKeys())
{ {
ja.put(i); ja.put(i);
} }
@ -651,7 +629,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getEntityLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getEntityLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -687,7 +665,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getLootLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getLootLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -705,7 +683,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getDimensionLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getDimensionLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -723,7 +701,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getGeneratorLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getGeneratorLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -741,7 +719,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getObjectLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getObjectLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -759,7 +737,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getRegionLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getRegionLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }
@ -777,7 +755,7 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", new JSONArray(data.getStructureLoader().getPreferredKeys())); j.put("enum", new JSONArray(data.getStructureLoader().getPossibleKeys()));
definitions.put(key, j); definitions.put(key, j);
} }

View File

@ -41,6 +41,9 @@ public class CommandIris extends MortarCommand
@Command @Command
private CommandIrisLMM lmm; private CommandIrisLMM lmm;
@Command
private CommandIrisIDM idm;
@Command @Command
private CommandIrisRegen regen; private CommandIrisRegen regen;

View File

@ -0,0 +1,43 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisIDM extends MortarCommand
{
public CommandIrisIDM()
{
super("idm");
setDescription("Diagnostics for Iris Data Managers");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
sender.sendMessage("Use this in the console.");
return true;
}
sender.sendMessage("Total Managers: " + IrisDataManager.managers.size());
IrisDataManager.dumpManagers();
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@ -1,22 +1,22 @@
package com.volmit.iris.manager.command; package com.volmit.iris.manager.command;
import java.io.File; import com.volmit.iris.Iris;
import java.util.Set; import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.manager.ProjectManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.KList; import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris; import java.io.File;
import com.volmit.iris.IrisSettings; import java.util.Set;
import com.volmit.iris.manager.ProjectManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObjectPaste extends MortarCommand public class CommandIrisObjectPaste extends MortarCommand
{ {
@ -54,7 +54,16 @@ public class CommandIrisObjectPaste extends MortarCommand
} }
Player p = sender.player(); Player p = sender.player();
File file = Iris.globaldata.getObjectLoader().findFile(args[0]); IrisObject obj = IrisDataManager.loadAnyObject(args[0]);
if(obj == null)
{
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
return true;
}
File file = obj.getLoadFile();
boolean intoWand = false; boolean intoWand = false;
for(String i : args) for(String i : args)
@ -68,11 +77,12 @@ public class CommandIrisObjectPaste extends MortarCommand
if(file == null || !file.exists()) if(file == null || !file.exists())
{ {
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder"); sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
return true;
} }
ItemStack wand = sender.player().getInventory().getItemInMainHand(); ItemStack wand = sender.player().getInventory().getItemInMainHand();
IrisObject o = Iris.globaldata.getObjectLoader().load(args[0]); IrisObject o = IrisDataManager.loadAnyObject(args[0]);
if(o == null) if(o == null)
{ {
sender.sendMessage("Error, cant find"); sender.sendMessage("Error, cant find");

View File

@ -1,5 +1,6 @@
package com.volmit.iris.manager.command; package com.volmit.iris.manager.command;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.KList; import com.volmit.iris.util.KList;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -47,7 +48,7 @@ public class CommandIrisStructureOpen extends MortarCommand
Player p = sender.player(); Player p = sender.player();
IrisStructure structure = Iris.globaldata.getStructureLoader().load(args[0]); IrisStructure structure = IrisDataManager.loadAnyStructure(args[0]);
if(structure == null) if(structure == null)
{ {

View File

@ -30,9 +30,6 @@ public class CommandIrisStudio extends MortarCommand
@Command @Command
private CommandIrisStudioMap map; private CommandIrisStudioMap map;
@Command
private CommandIrisStudioList list;
@Command @Command
private CommandIrisStudioGoto got0; private CommandIrisStudioGoto got0;

View File

@ -1,6 +1,7 @@
package com.volmit.iris.manager.command; package com.volmit.iris.manager.command;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisRegion; import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.scaffold.IrisWorlds; import com.volmit.iris.scaffold.IrisWorlds;
@ -24,7 +25,7 @@ public class CommandIrisStudioGoto extends MortarCommand
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) { public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
if(args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld())) if(args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld()))
{ {
list.add(IrisWorlds.access(sender.player().getWorld()).getData().getBiomeLoader().getPreferredKeys()); list.add(IrisWorlds.access(sender.player().getWorld()).getData().getBiomeLoader().getPossibleKeys());
} }
} }
@ -51,8 +52,8 @@ public class CommandIrisStudioGoto extends MortarCommand
} }
IrisAccess g = IrisWorlds.access(world); IrisAccess g = IrisWorlds.access(world);
IrisBiome b = Iris.globaldata.getBiomeLoader().load(args[0], false); IrisBiome b = IrisDataManager.loadAnyBiome(args[0]);
IrisRegion r = Iris.globaldata.getRegionLoader().load(args[0], false); IrisRegion r = IrisDataManager.loadAnyRegion(args[0]);
if(b != null) if(b != null)
{ {
@ -75,7 +76,7 @@ public class CommandIrisStudioGoto extends MortarCommand
else if(r != null) else if(r != null)
{ {
J.a(() -> { J.a(() -> {
Location l = g.lookForRegion(r, 10000, (v) -> sender.sendMessage("Looking for " + C.BOLD + C.WHITE + r.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places")); Location l = g.lookForRegion(r, 60000, (v) -> sender.sendMessage(C.BOLD +""+ C.WHITE + r.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places"));
if(l == null) if(l == null)
{ {

View File

@ -1,67 +0,0 @@
package com.volmit.iris.manager.command;
import java.io.File;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioList extends MortarCommand
{
public CommandIrisStudioList()
{
super("list", "l");
requiresPermission(Iris.perm.studio);
setDescription("List projects that can be opened.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@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;
}
int m = 0;
for(File i : Iris.globaldata.getDimensionLoader().getFolders())
{
for(File j : i.listFiles())
{
if(j.isFile() && j.getName().endsWith(".json"))
{
try
{
m++;
IrisDimension d = Iris.globaldata.getDimensionLoader().load(j.getName().replaceAll("\\Q.json\\E", ""));
sender.sendMessage("- " + d.getLoadKey() + " (" + d.getName() + ")");
}
catch(Throwable e)
{
}
}
}
}
sender.sendMessage("Found " + m + " project" + (m == 1 ? "" : "s"));
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@ -1,62 +1,23 @@
package com.volmit.iris.manager.structure; package com.volmit.iris.manager.structure;
import java.io.File; import com.google.gson.Gson;
import java.util.Iterator; import com.volmit.iris.Iris;
import com.volmit.iris.generator.noise.CNG;
import org.bukkit.Bukkit; import com.volmit.iris.object.*;
import org.bukkit.Location; import com.volmit.iris.util.*;
import org.bukkit.Material; import lombok.Data;
import org.bukkit.Particle; import org.bukkit.*;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.*;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockCookEvent;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockFertilizeEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.util.BlockVector; import org.bukkit.util.BlockVector;
import com.google.gson.Gson; import java.io.File;
import com.volmit.iris.Iris; import java.util.Iterator;
import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.object.IrisStructureTile;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.object.StructureTileCondition;
import com.volmit.iris.object.TileResult;
import com.volmit.iris.util.B;
import com.volmit.iris.util.C;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.IO;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.J;
import com.volmit.iris.util.JSONObject;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.MaterialBlock;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.UIElement;
import com.volmit.iris.util.UIStaticDecorator;
import com.volmit.iris.util.UIWindow;
import com.volmit.iris.util.Window;
import com.volmit.iris.util.WindowResolution;
import lombok.Data;
@Data @Data
public class StructureTemplate implements Listener, IObjectPlacer public class StructureTemplate implements Listener, IObjectPlacer
@ -184,8 +145,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
for(String k : j.getObjects()) for(String k : j.getObjects())
{ {
int v = hijacked.getForceObjects().size() + 1; int v = hijacked.getForceObjects().size() + 1;
Iris.globaldata.dump(); IrisObject o = input.getLoader().getObjectLoader().load(k).copy();
IrisObject o = Iris.globaldata.getObjectLoader().load(k).copy();
String b = o.getLoadKey(); String b = o.getLoadKey();
o.setLoadKey(realType + "-" + v); o.setLoadKey(realType + "-" + v);
@ -574,7 +534,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
return; return;
} }
r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng, Iris.globaldata); r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng, r.getStructure().getLoader());
if(!quiet) if(!quiet)
{ {
center.getWorld().playSound(center, Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 1.6f); center.getWorld().playSound(center, Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 1.6f);

View File

@ -1,6 +1,5 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.manager.IrisDataManager;
@ -604,7 +603,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(String i : getChildren()) for(String i : getChildren())
{ {
realChildren.add(g != null ? g.getData().getBiomeLoader().load(i) : Iris.globaldata.getBiomeLoader().load(i)); realChildren.add(g.getData().getBiomeLoader().load(i));
} }
return realChildren; return realChildren;
@ -621,7 +620,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
{ {
for(String i : getChildren()) for(String i : getChildren())
{ {
IrisBiome b = g != null ? g.getData().getBiomeLoader().load(i) : Iris.globaldata.getBiomeLoader().load(i); IrisBiome b = g.getData().getBiomeLoader().load(i);
int l = limit; int l = limit;
m.addAll(b.getAllChildren(g, l)); m.addAll(b.getAllChildren(g, l));
} }

View File

@ -1,17 +1,8 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.scaffold.data.DataProvider; import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.util.DependsOn; import com.volmit.iris.util.*;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.IrisInterpolation;
import com.volmit.iris.util.MaxNumber;
import com.volmit.iris.util.MinNumber;
import com.volmit.iris.util.RegistryListGenerator;
import com.volmit.iris.util.Required;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -52,7 +43,7 @@ public class IrisBiomeGeneratorLink
{ {
return gen.aquire(() -> return gen.aquire(() ->
{ {
IrisGenerator gen = g != null ? g.getData().getGeneratorLoader().load(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator()); IrisGenerator gen = g.getData().getGeneratorLoader().load(getGenerator());
if(gen == null) if(gen == null)
{ {

View File

@ -1,6 +1,5 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.scaffold.engine.GeneratorAccess; import com.volmit.iris.scaffold.engine.GeneratorAccess;
@ -383,7 +382,7 @@ public class IrisDimension extends IrisRegistrant
for(String i : getRegions()) for(String i : getRegions())
{ {
r.add(g != null ? g.getData().getRegionLoader().load(i) : Iris.globaldata.getRegionLoader().load(i)); r.add(g.getData().getRegionLoader().load(i));
} }
return r; return r;

View File

@ -1,19 +1,9 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MaxNumber;
import com.volmit.iris.util.MinNumber;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.RegistryListObject;
import com.volmit.iris.util.Required;
import com.volmit.iris.scaffold.data.DataProvider; import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.util.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -152,7 +142,7 @@ public class IrisObjectPlacement
return null; return null;
} }
return (g == null ? Iris.globaldata : g.getData()).getObjectLoader().load(place.get(random.nextInt(place.size()))); return g.getData().getObjectLoader().load(place.get(random.nextInt(place.size())));
} }
public int getTriesForChunk(RNG random) public int getTriesForChunk(RNG random)

View File

@ -1,22 +1,9 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.*;
import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.IRare;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.KSet;
import com.volmit.iris.util.MaxNumber;
import com.volmit.iris.util.MinNumber;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.RegistryListBiome;
import com.volmit.iris.util.Required;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -400,7 +387,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
continue; continue;
} }
IrisBiome biome = (g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i); IrisBiome biome = g.getData().getBiomeLoader().load(i);
names.remove(i); names.remove(i);
if(biome == null) if(biome == null)
@ -460,7 +447,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
for(String i : getCaveBiomes()) for(String i : getCaveBiomes())
{ {
realCaveBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); realCaveBiomes.add(g.getData().getBiomeLoader().load(i));
} }
return realCaveBiomes; return realCaveBiomes;
@ -475,7 +462,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
for(String i : getLakeBiomes()) for(String i : getLakeBiomes())
{ {
realLakeBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); realLakeBiomes.add(g.getData().getBiomeLoader().load(i));
} }
return realLakeBiomes; return realLakeBiomes;
@ -490,7 +477,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
for(String i : getRiverBiomes()) for(String i : getRiverBiomes())
{ {
realRiverBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); realRiverBiomes.add(g.getData().getBiomeLoader().load(i));
} }
return realRiverBiomes; return realRiverBiomes;
@ -505,7 +492,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
for(String i : getShoreBiomes()) for(String i : getShoreBiomes())
{ {
realShoreBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); realShoreBiomes.add(g.getData().getBiomeLoader().load(i));
} }
return realShoreBiomes; return realShoreBiomes;
@ -520,7 +507,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
for(String i : getSeaBiomes()) for(String i : getSeaBiomes())
{ {
realSeaBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); realSeaBiomes.add(g.getData().getBiomeLoader().load(i));
} }
return realSeaBiomes; return realSeaBiomes;
@ -535,7 +522,7 @@ public class IrisRegion extends IrisRegistrant implements IRare
for(String i : getLandBiomes()) for(String i : getLandBiomes())
{ {
realLandBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); realLandBiomes.add(g.getData().getBiomeLoader().load(i));
} }
return realLandBiomes; return realLandBiomes;

View File

@ -1,12 +1,15 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import java.io.File; import com.volmit.iris.manager.IrisDataManager;
import lombok.Data; import lombok.Data;
import java.io.File;
@Data @Data
public class IrisRegistrant public class IrisRegistrant
{ {
private transient IrisDataManager loader;
private transient String loadKey; private transient String loadKey;
private transient File loadFile; private transient File loadFile;

View File

@ -1,6 +1,5 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.generator.noise.CellGenerator; import com.volmit.iris.generator.noise.CellGenerator;
import com.volmit.iris.scaffold.data.DataProvider; import com.volmit.iris.scaffold.data.DataProvider;
@ -84,7 +83,7 @@ public class IrisStructurePlacement
public IrisStructure getStructure(DataProvider g) public IrisStructure getStructure(DataProvider g)
{ {
return structure.aquire(() -> (g == null ? Iris.globaldata : g.getData()).getStructureLoader().load(getTileset())); return structure.aquire(() -> g.getData().getStructureLoader().load(getTileset()));
} }
public CellGenerator getChanceGenerator(RNG g) public CellGenerator getChanceGenerator(RNG g)

View File

@ -1,6 +1,6 @@
package com.volmit.iris.scaffold; package com.volmit.iris.scaffold;
import com.volmit.iris.Iris; import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator; import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
import org.bukkit.World; import org.bukkit.World;
@ -71,7 +71,7 @@ public class IrisWorldCreator
return World.Environment.NORMAL; return World.Environment.NORMAL;
} }
IrisDimension dim = Iris.globaldata.getDimensionLoader().load(dimensionName); IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName);
if(dim != null) if(dim != null)
{ {

View File

@ -58,7 +58,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
public void hotload() public void hotload()
{ {
Iris.globaldata.dump(); getData().dump();
initialized.lazySet(false); initialized.lazySet(false);
} }
@ -78,7 +78,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
for (File j : i.listFiles()) { for (File j : i.listFiles()) {
if (j.isFile() && j.getName().endsWith(".json")) { if (j.isFile() && j.getName().endsWith(".json")) {
hint = j.getName().replaceAll("\\Q.json\\E", ""); hint = j.getName().replaceAll("\\Q.json\\E", "");
break searching; Iris.error("Found v1 install. Please create a new world, this will cause chunks to change in your existing iris worlds!");
throw new RuntimeException();
} }
} }
} }
@ -97,14 +98,14 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
throw new RuntimeException("Cannot find iris dimension data for world: " + world.getName() + "! FAILED"); throw new RuntimeException("Cannot find iris dimension data for world: " + world.getName() + "! FAILED");
} }
dim = Iris.globaldata.preferFolder(hint).getDimensionLoader().load(hint); dim = IrisDataManager.loadAnyDimension(hint);
if (dim == null) { if (dim == null) {
throw new RuntimeException("Cannot find dimension: " + hint); throw new RuntimeException("Cannot find dimension: " + hint);
} }
if (production) { if (production) {
dim = new IrisDataManager(getDataFolder(world), true).preferFolder(dim.getLoadKey()).getDimensionLoader().load(dim.getLoadKey()); dim = new IrisDataManager(getDataFolder(world)).getDimensionLoader().load(dim.getLoadKey());
if (dim == null) { if (dim == null) {
throw new RuntimeException("Cannot find dimension: " + hint); throw new RuntimeException("Cannot find dimension: " + hint);
@ -119,9 +120,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
return; return;
} }
IrisDataManager data = production ? new IrisDataManager(getDataFolder(world)) : Iris.globaldata.copy();
IrisDimension dim = getDimension(world); IrisDimension dim = getDimension(world);
data.preferFolder(dim.getLoadKey()); IrisDataManager data = production ? new IrisDataManager(getDataFolder(world)) : dim.getLoader().copy();
compound = new IrisEngineCompound(world, dim, data, Iris.getThreadCount()); compound = new IrisEngineCompound(world, dim, data, Iris.getThreadCount());
initialized.set(true); initialized.set(true);
populators.clear(); populators.clear();

View File

@ -137,7 +137,7 @@ public interface IrisAccess extends Hotloadable, DataProvider {
public default Location lookForRegion(IrisRegion reg, long timeout, Consumer<Integer> triesc) public default Location lookForRegion(IrisRegion reg, long timeout, Consumer<Integer> triesc)
{ {
ChronoLatch cl = new ChronoLatch(250, false); ChronoLatch cl = new ChronoLatch(3000, false);
long s = M.ms(); long s = M.ms();
int cpus = 2+(Runtime.getRuntime().availableProcessors()/2); int cpus = 2+(Runtime.getRuntime().availableProcessors()/2);
KList<Engine> engines = new KList<>(); KList<Engine> engines = new KList<>();

View File

@ -1,16 +1,37 @@
package com.volmit.iris.scaffold.parallel; package com.volmit.iris.scaffold.parallel;
import com.volmit.iris.Iris;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class MultiBurst public class MultiBurst
{ {
public static MultiBurst burst = new MultiBurst(Runtime.getRuntime().availableProcessors()); public static MultiBurst burst = new MultiBurst(Runtime.getRuntime().availableProcessors());
private ExecutorService service; private ExecutorService service;
private int tid;
public MultiBurst(int tc) public MultiBurst(int tc)
{ {
service = Executors.newWorkStealingPool(tc); service = Executors.newFixedThreadPool(tc, new ThreadFactory()
{
@Override
public Thread newThread(Runnable r)
{
tid++;
Thread t = new Thread(r);
t.setName("Iris Generator " + tid);
t.setPriority(Thread.MAX_PRIORITY);
t.setUncaughtExceptionHandler((et, e) ->
{
Iris.info("Exception encountered in " + et.getName());
e.printStackTrace();
});
return t;
}
});
} }
public void burst(Runnable... r) public void burst(Runnable... r)

View File

@ -1,6 +1,7 @@
package com.volmit.iris.util; package com.volmit.iris.util;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisObject; import com.volmit.iris.object.IrisObject;
import java.io.File; import java.io.File;
@ -10,9 +11,9 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
private ChronoLatch useFlip = new ChronoLatch(2863); private ChronoLatch useFlip = new ChronoLatch(2863);
private KMap<String, Long> useCache = new KMap<>(); private KMap<String, Long> useCache = new KMap<>();
public ObjectResourceLoader(File root, String folderName, String resourceTypeName) public ObjectResourceLoader(File root, IrisDataManager idm, String folderName, String resourceTypeName)
{ {
super(root, folderName, resourceTypeName, IrisObject.class); super(root, idm, folderName, resourceTypeName, IrisObject.class);
} }
public int getSize() public int getSize()
@ -92,6 +93,8 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
loadCache.put(key, t); loadCache.put(key, t);
J.a(() -> Iris.verbose("Loading " + resourceTypeName + ": " + j.getPath())); J.a(() -> Iris.verbose("Loading " + resourceTypeName + ": " + j.getPath()));
t.setLoadKey(name); t.setLoadKey(name);
t.setLoader(manager);
t.setLoadFile(j);
lock.unlock(); lock.unlock();
return t; return t;
} }
@ -104,64 +107,6 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
} }
} }
public String[] getPreferredKeys()
{
if(preferredFolder == null || preferredFolder.isEmpty())
{
return getPossibleKeys();
}
if(possibleKeys != null)
{
return possibleKeys;
}
Iris.info("Building " + resourceTypeName + " Preference Lists");
KSet<String> m = new KSet<>();
for(File i : getFolders())
{
for(File j : i.listFiles())
{
if(!j.getPath().contains(preferredFolder))
{
continue;
}
if(j.isFile() && j.getName().endsWith(".iob"))
{
m.add(j.getName().replaceAll("\\Q.iob\\E", ""));
}
else if(j.isDirectory())
{
for(File k : j.listFiles())
{
if(k.isFile() && k.getName().endsWith(".iob"))
{
m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.iob\\E", ""));
}
else if(k.isDirectory())
{
for(File l : k.listFiles())
{
if(l.isFile() && l.getName().endsWith(".iob"))
{
m.add(j.getName() + "/" + k.getName() + "/" + l.getName().replaceAll("\\Q.iob\\E", ""));
}
}
}
}
}
}
}
KList<String> v = new KList<>(m);
possibleKeys = v.toArray(new String[v.size()]);
return possibleKeys;
}
public String[] getPossibleKeys() public String[] getPossibleKeys()
{ {
if(possibleKeys != null) if(possibleKeys != null)

View File

@ -1,13 +1,13 @@
package com.volmit.iris.util; package com.volmit.iris.util;
import java.io.File;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisRegistrant; import com.volmit.iris.object.IrisRegistrant;
import lombok.Data; import lombok.Data;
import java.io.File;
@Data @Data
public class ResourceLoader<T extends IrisRegistrant> public class ResourceLoader<T extends IrisRegistrant>
{ {
@ -20,13 +20,13 @@ public class ResourceLoader<T extends IrisRegistrant>
protected Class<? extends T> objectClass; protected Class<? extends T> objectClass;
protected String cname; protected String cname;
protected IrisLock lock; protected IrisLock lock;
protected String preferredFolder = null;
protected String[] possibleKeys = null; protected String[] possibleKeys = null;
protected String[] preferredKeys = null; protected IrisDataManager manager;
public ResourceLoader(File root, String folderName, String resourceTypeName, Class<? extends T> objectClass) public ResourceLoader(File root, IrisDataManager manager, String folderName, String resourceTypeName, Class<? extends T> objectClass)
{ {
lock = new IrisLock("Res"); lock = new IrisLock("Res");
this.manager = manager;
folderMapCache = new KMap<>(); folderMapCache = new KMap<>();
this.objectClass = objectClass; this.objectClass = objectClass;
cname = objectClass.getCanonicalName(); cname = objectClass.getCanonicalName();
@ -36,53 +36,6 @@ public class ResourceLoader<T extends IrisRegistrant>
loadCache = new KMap<>(); loadCache = new KMap<>();
} }
public String[] getPreferredKeys()
{
if(preferredFolder == null || preferredFolder.isEmpty())
{
return getPossibleKeys();
}
if(preferredKeys != null)
{
return preferredKeys;
}
Iris.info("Building " + resourceTypeName + " Preference Lists");
KSet<String> m = new KSet<>();
for(File i : getFolders())
{
for(File j : i.listFiles())
{
if(!j.getPath().contains(preferredFolder))
{
continue;
}
if(j.isFile() && j.getName().endsWith(".json"))
{
m.add(j.getName().replaceAll("\\Q.json\\E", ""));
}
else if(j.isDirectory())
{
for(File k : j.listFiles())
{
if(k.isFile() && k.getName().endsWith(".json"))
{
m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.json\\E", ""));
}
}
}
}
}
KList<String> v = new KList<>(m);
preferredKeys = v.toArray(new String[v.size()]);
return preferredKeys;
}
public String[] getPossibleKeys() public String[] getPossibleKeys()
{ {
if(possibleKeys != null) if(possibleKeys != null)
@ -134,6 +87,7 @@ public class ResourceLoader<T extends IrisRegistrant>
J.a(() -> Iris.verbose("Loading " + resourceTypeName + ": " + j.getPath())); J.a(() -> Iris.verbose("Loading " + resourceTypeName + ": " + j.getPath()));
t.setLoadKey(name); t.setLoadKey(name);
t.setLoadFile(j); t.setLoadFile(j);
t.setLoader(manager);
lock.unlock(); lock.unlock();
return t; return t;
} }
@ -205,31 +159,15 @@ public class ResourceLoader<T extends IrisRegistrant>
{ {
if(i.isDirectory()) if(i.isDirectory())
{ {
for(File j : i.listFiles()) if(i.getName().equals(folderName))
{ {
if(j.isDirectory() && j.getName().equals(folderName)) folderCache.add(i);
{
folderCache.add(j);
break; break;
} }
} }
} }
} }
if(preferredFolder != null)
{
for(File i : folderCache.copy())
{
if(i.getParentFile().getName().equals(preferredFolder) || i.getParentFile().getParentFile().getName().equals(preferredFolder))
{
folderCache.remove(i);
folderCache.add(0, i);
Iris.verbose("Prefering " + i.getPath() + " in the folder cache because we prefer " + preferredFolder);
}
}
}
}
lock.unlock(); lock.unlock();
return folderCache; return folderCache;
@ -290,12 +228,6 @@ public class ResourceLoader<T extends IrisRegistrant>
return loadCache.containsKey(next); return loadCache.containsKey(next);
} }
public void preferFolder(String name)
{
clearList();
preferredFolder = name;
}
public void clearList() public void clearList()
{ {
lock.lock(); lock.lock();