mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Eradicate the old structure system
This commit is contained in:
parent
93508d7514
commit
dd7a8bae16
@ -35,7 +35,6 @@ public class Iris extends VolmitPlugin
|
|||||||
public static ProjectManager proj;
|
public static ProjectManager proj;
|
||||||
public static ConversionManager convert;
|
public static ConversionManager convert;
|
||||||
public static WandManager wand;
|
public static WandManager wand;
|
||||||
public static StructureManager struct;
|
|
||||||
public static EditManager edit;
|
public static EditManager edit;
|
||||||
public static IrisBoardManager board;
|
public static IrisBoardManager board;
|
||||||
public static BKLink linkBK;
|
public static BKLink linkBK;
|
||||||
@ -162,7 +161,6 @@ public class Iris extends VolmitPlugin
|
|||||||
proj = new ProjectManager();
|
proj = new ProjectManager();
|
||||||
convert = new ConversionManager();
|
convert = new ConversionManager();
|
||||||
wand = new WandManager();
|
wand = new WandManager();
|
||||||
struct = new StructureManager();
|
|
||||||
board = new IrisBoardManager();
|
board = new IrisBoardManager();
|
||||||
linkMultiverseCore = new MultiverseCoreLink();
|
linkMultiverseCore = new MultiverseCoreLink();
|
||||||
linkBK = new BKLink();
|
linkBK = new BKLink();
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.volmit.iris.generator;
|
package com.volmit.iris.generator;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
import com.volmit.iris.manager.IrisDataManager;
|
||||||
import com.volmit.iris.object.IrisDimension;
|
import com.volmit.iris.object.IrisDimension;
|
||||||
import com.volmit.iris.object.IrisDimensionIndex;
|
import com.volmit.iris.object.IrisDimensionIndex;
|
||||||
@ -221,7 +220,6 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
int offset = 0;
|
int offset = 0;
|
||||||
BurstExecutor e = burster.burst();
|
BurstExecutor e = burster.burst();
|
||||||
Runnable[] insert = new Runnable[engines.length];
|
Runnable[] insert = new Runnable[engines.length];
|
||||||
boolean structures = getDefaultEngine().getDimension().isVanillaStructures() && !IrisSettings.get().getGeneral().isDisableNMS();
|
|
||||||
|
|
||||||
for(i = 0; i < engines.length; i++)
|
for(i = 0; i < engines.length; i++)
|
||||||
{
|
{
|
||||||
|
@ -2,16 +2,12 @@ package com.volmit.iris.generator;
|
|||||||
|
|
||||||
import com.volmit.iris.scaffold.engine.Engine;
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.scaffold.engine.EngineParallaxManager;
|
import com.volmit.iris.scaffold.engine.EngineParallaxManager;
|
||||||
import com.volmit.iris.scaffold.engine.EngineStructureManager;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
public class IrisEngineParallax implements EngineParallaxManager {
|
public class IrisEngineParallax implements EngineParallaxManager {
|
||||||
@Getter
|
@Getter
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final EngineStructureManager structureManager;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final int parallaxSize;
|
private final int parallaxSize;
|
||||||
|
|
||||||
@ -19,6 +15,5 @@ public class IrisEngineParallax implements EngineParallaxManager {
|
|||||||
{
|
{
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
parallaxSize = computeParallaxSize();
|
parallaxSize = computeParallaxSize();
|
||||||
structureManager = new IrisEngineStructure(getEngine());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
package com.volmit.iris.generator;
|
|
||||||
|
|
||||||
import com.volmit.iris.scaffold.engine.Engine;
|
|
||||||
import com.volmit.iris.scaffold.engine.EngineAssignedStructureManager;
|
|
||||||
|
|
||||||
public class IrisEngineStructure extends EngineAssignedStructureManager {
|
|
||||||
public IrisEngineStructure(Engine engine) {
|
|
||||||
super(engine);
|
|
||||||
}
|
|
||||||
}
|
|
@ -116,6 +116,6 @@ public class IrisDecorantActuator extends EngineAssignedActuator<BlockData>
|
|||||||
|
|
||||||
private boolean shouldRayDecorate()
|
private boolean shouldRayDecorate()
|
||||||
{
|
{
|
||||||
return getEngine().getDimension().isCarving() || getEngine().getDimension().isCaves() || getEngine().getDimension().isVanillaCaves() || getEngine().getDimension().isRavines();
|
return getEngine().getDimension().isCarving() || getEngine().getDimension().isCaves() || getEngine().getDimension().isRavines();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ public class IrisDataManager
|
|||||||
private ResourceLoader<IrisRegion> regionLoader;
|
private ResourceLoader<IrisRegion> regionLoader;
|
||||||
private ResourceLoader<IrisDimension> dimensionLoader;
|
private ResourceLoader<IrisDimension> dimensionLoader;
|
||||||
private ResourceLoader<IrisGenerator> generatorLoader;
|
private ResourceLoader<IrisGenerator> generatorLoader;
|
||||||
private ResourceLoader<IrisStructure> structureLoader;
|
|
||||||
private ResourceLoader<IrisJigsawPiece> jigsawPieceLoader;
|
private ResourceLoader<IrisJigsawPiece> jigsawPieceLoader;
|
||||||
private ResourceLoader<IrisJigsawPool> jigsawPoolLoader;
|
private ResourceLoader<IrisJigsawPool> jigsawPoolLoader;
|
||||||
private ResourceLoader<IrisJigsawStructure> jigsawStructureLoader;
|
private ResourceLoader<IrisJigsawStructure> jigsawStructureLoader;
|
||||||
@ -51,7 +50,6 @@ public class IrisDataManager
|
|||||||
this.regionLoader = null;
|
this.regionLoader = null;
|
||||||
this.biomeLoader = null;
|
this.biomeLoader = null;
|
||||||
this.dimensionLoader = null;
|
this.dimensionLoader = null;
|
||||||
this.structureLoader = null;
|
|
||||||
this.jigsawPoolLoader = null;
|
this.jigsawPoolLoader = null;
|
||||||
this.jigsawPieceLoader = null;
|
this.jigsawPieceLoader = null;
|
||||||
this.generatorLoader = null;
|
this.generatorLoader = null;
|
||||||
@ -83,7 +81,6 @@ public class IrisDataManager
|
|||||||
this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
|
this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class);
|
||||||
this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
|
this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class);
|
||||||
this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.class);
|
this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.class);
|
||||||
this.structureLoader = new ResourceLoader<>(packs, this, "structures", "Structure", IrisStructure.class);
|
|
||||||
this.jigsawPoolLoader = new ResourceLoader<>(packs, this, "jigsaw-pools", "Jigsaw Pool", IrisJigsawPool.class);
|
this.jigsawPoolLoader = new ResourceLoader<>(packs, this, "jigsaw-pools", "Jigsaw Pool", IrisJigsawPool.class);
|
||||||
this.jigsawStructureLoader = new ResourceLoader<>(packs, this, "jigsaw-structures", "Jigsaw Structure", IrisJigsawStructure.class);
|
this.jigsawStructureLoader = new ResourceLoader<>(packs, this, "jigsaw-structures", "Jigsaw Structure", IrisJigsawStructure.class);
|
||||||
this.jigsawPieceLoader = new ResourceLoader<>(packs, this, "jigsaw-pieces", "Jigsaw Piece", IrisJigsawPiece.class);
|
this.jigsawPieceLoader = new ResourceLoader<>(packs, this, "jigsaw-pieces", "Jigsaw Piece", IrisJigsawPiece.class);
|
||||||
@ -109,7 +106,6 @@ public class IrisDataManager
|
|||||||
dimensionLoader.clearCache();
|
dimensionLoader.clearCache();
|
||||||
entityLoader.clearCache();
|
entityLoader.clearCache();
|
||||||
generatorLoader.clearCache();
|
generatorLoader.clearCache();
|
||||||
structureLoader.clearCache();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearLists()
|
public void clearLists()
|
||||||
@ -127,7 +123,6 @@ public class IrisDataManager
|
|||||||
dimensionLoader.clearList();
|
dimensionLoader.clearList();
|
||||||
generatorLoader.clearList();
|
generatorLoader.clearList();
|
||||||
jigsawStructureLoader.clearList();
|
jigsawStructureLoader.clearList();
|
||||||
structureLoader.clearList();
|
|
||||||
jigsawPoolLoader.clearList();
|
jigsawPoolLoader.clearList();
|
||||||
jigsawPieceLoader.clearList();
|
jigsawPieceLoader.clearList();
|
||||||
objectLoader.clearList();
|
objectLoader.clearList();
|
||||||
@ -143,11 +138,6 @@ public class IrisDataManager
|
|||||||
return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false));
|
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 IrisJigsawPiece loadAnyJigsawPiece(String key)
|
public static IrisJigsawPiece loadAnyJigsawPiece(String key)
|
||||||
{
|
{
|
||||||
return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false));
|
return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false));
|
||||||
|
@ -281,7 +281,6 @@ public class IrisProject
|
|||||||
schemas.put(getSchemaEntry(IrisBiome.class, dm, "/biomes/*.json"));
|
schemas.put(getSchemaEntry(IrisBiome.class, dm, "/biomes/*.json"));
|
||||||
schemas.put(getSchemaEntry(IrisRegion.class, dm, "/regions/*.json"));
|
schemas.put(getSchemaEntry(IrisRegion.class, dm, "/regions/*.json"));
|
||||||
schemas.put(getSchemaEntry(IrisGenerator.class,dm, "/generators/*.json"));
|
schemas.put(getSchemaEntry(IrisGenerator.class,dm, "/generators/*.json"));
|
||||||
schemas.put(getSchemaEntry(IrisStructure.class, dm, "/structures/*.json"));
|
|
||||||
schemas.put(getSchemaEntry(IrisJigsawPiece.class, dm, "/jigsaw-pieces/*.json"));
|
schemas.put(getSchemaEntry(IrisJigsawPiece.class, dm, "/jigsaw-pieces/*.json"));
|
||||||
schemas.put(getSchemaEntry(IrisJigsawPool.class, dm, "/jigsaw-pools/*.json"));
|
schemas.put(getSchemaEntry(IrisJigsawPool.class, dm, "/jigsaw-pools/*.json"));
|
||||||
schemas.put(getSchemaEntry(IrisJigsawStructure.class, dm, "/jigsaw-structures/*.json"));
|
schemas.put(getSchemaEntry(IrisJigsawStructure.class, dm, "/jigsaw-structures/*.json"));
|
||||||
@ -315,7 +314,6 @@ public class IrisProject
|
|||||||
KSet<IrisRegion> regions = new KSet<>();
|
KSet<IrisRegion> regions = new KSet<>();
|
||||||
KSet<IrisBiome> biomes = new KSet<>();
|
KSet<IrisBiome> biomes = new KSet<>();
|
||||||
KSet<IrisEntity> entities = new KSet<>();
|
KSet<IrisEntity> entities = new KSet<>();
|
||||||
KSet<IrisStructure> structures = new KSet<>();
|
|
||||||
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<>();
|
||||||
@ -330,19 +328,11 @@ public class IrisProject
|
|||||||
dimension.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)));
|
dimension.getLoot().getTables().forEach((i) -> loot.add(dm.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))));
|
|
||||||
biomes.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null))));
|
|
||||||
regions.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.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(dm.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(dm.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(dm.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(dm.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(dm.getEntityLoader().load(sp.getEntity()))));
|
regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
|
||||||
dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
|
dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.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(dm.getEntityLoader().load(sp.getEntity())))));
|
|
||||||
biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.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(dm.getEntityLoader().load(sp.getEntity()))));
|
regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
|
||||||
dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
|
dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
|
||||||
@ -352,31 +342,6 @@ public class IrisProject
|
|||||||
StringBuilder c = new StringBuilder();
|
StringBuilder c = new StringBuilder();
|
||||||
sender.sendMessage("Serializing Objects");
|
sender.sendMessage("Serializing Objects");
|
||||||
|
|
||||||
for(IrisStructure i : structures)
|
|
||||||
{
|
|
||||||
for(IrisStructureTile j : i.getTiles())
|
|
||||||
{
|
|
||||||
b.append(j.hashCode());
|
|
||||||
KList<String> newNames = new KList<>();
|
|
||||||
|
|
||||||
for(String k : j.getObjects())
|
|
||||||
{
|
|
||||||
if(renameObjects.containsKey(k))
|
|
||||||
{
|
|
||||||
newNames.add(renameObjects.get(k));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = !obfuscate ? k : UUID.randomUUID().toString().replaceAll("-", "");
|
|
||||||
b.append(name);
|
|
||||||
newNames.add(name);
|
|
||||||
renameObjects.put(k, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
j.setObjects(newNames);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(IrisBiome i : biomes)
|
for(IrisBiome i : biomes)
|
||||||
{
|
{
|
||||||
for(IrisObjectPlacement j : i.getObjects())
|
for(IrisObjectPlacement j : i.getObjects())
|
||||||
@ -455,29 +420,6 @@ public class IrisProject
|
|||||||
}
|
}
|
||||||
})));
|
})));
|
||||||
|
|
||||||
structures.forEach((i) -> i.getTiles().forEach((j) -> j.getObjects().forEach((k) ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0));
|
|
||||||
IO.copyFile(f, new File(folder, "objects/" + k + ".iob"));
|
|
||||||
gb.append(IO.hash(f));
|
|
||||||
ggg.set(ggg.get() + 1);
|
|
||||||
|
|
||||||
if(cl.flip())
|
|
||||||
{
|
|
||||||
int g = ggg.get();
|
|
||||||
ggg.set(0);
|
|
||||||
sender.sendMessage("Wrote another " + g + " Objects");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
})));
|
|
||||||
|
|
||||||
dimension.getMutations().forEach((i) -> i.getObjects().forEach((j) -> j.getPlace().forEach((k) ->
|
dimension.getMutations().forEach((i) -> i.getObjects().forEach((j) -> j.getPlace().forEach((k) ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -537,13 +479,6 @@ public class IrisProject
|
|||||||
b.append(IO.hash(a));
|
b.append(IO.hash(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(IrisStructure i : structures)
|
|
||||||
{
|
|
||||||
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
|
|
||||||
IO.writeAll(new File(folder, "structures/" + i.getLoadKey() + ".json"), a);
|
|
||||||
b.append(IO.hash(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
for(IrisBiome i : biomes)
|
for(IrisBiome i : biomes)
|
||||||
{
|
{
|
||||||
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
|
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
|
||||||
|
@ -366,22 +366,6 @@ public class SchemaBuilder
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(k.isAnnotationPresent(RegistryListStructure.class))
|
|
||||||
{
|
|
||||||
String key = "enum-reg-structure-tileset";
|
|
||||||
|
|
||||||
if(!definitions.containsKey(key))
|
|
||||||
{
|
|
||||||
JSONObject j = new JSONObject();
|
|
||||||
j.put("enum", new JSONArray(data.getStructureLoader().getPossibleKeys()));
|
|
||||||
definitions.put(key, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
fancyType = "Iris Structure Tileset";
|
|
||||||
prop.put("$ref", "#/definitions/" + key);
|
|
||||||
description.add(SYMBOL_TYPE__N + " Must be a valid Structure Tileset (use ctrl+space for auto complete!)");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(k.isAnnotationPresent(RegistryListJigsawPiece.class))
|
else if(k.isAnnotationPresent(RegistryListJigsawPiece.class))
|
||||||
{
|
{
|
||||||
String key = "enum-reg-structure-piece";
|
String key = "enum-reg-structure-piece";
|
||||||
@ -795,24 +779,6 @@ public class SchemaBuilder
|
|||||||
description.add(SYMBOL_TYPE__N + " Must be a valid Region (use ctrl+space for auto complete!)");
|
description.add(SYMBOL_TYPE__N + " Must be a valid Region (use ctrl+space for auto complete!)");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(k.isAnnotationPresent(RegistryListStructure.class))
|
|
||||||
{
|
|
||||||
fancyType = "List of Iris Structure Tilesets";
|
|
||||||
String key = "enum-reg-structure-tileset";
|
|
||||||
|
|
||||||
if(!definitions.containsKey(key))
|
|
||||||
{
|
|
||||||
JSONObject j = new JSONObject();
|
|
||||||
j.put("enum", new JSONArray(data.getStructureLoader().getPossibleKeys()));
|
|
||||||
definitions.put(key, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONObject items = new JSONObject();
|
|
||||||
items.put("$ref", "#/definitions/" + key);
|
|
||||||
prop.put("items", items);
|
|
||||||
description.add(SYMBOL_TYPE__N + " Must be a valid Structure Tileset (use ctrl+space for auto complete!)");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(k.isAnnotationPresent(RegistryListJigsawPiece.class))
|
else if(k.isAnnotationPresent(RegistryListJigsawPiece.class))
|
||||||
{
|
{
|
||||||
fancyType = "List of Iris Jigsaw Pieces";
|
fancyType = "List of Iris Jigsaw Pieces";
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
package com.volmit.iris.manager;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
|
|
||||||
public class StructureManager
|
|
||||||
{
|
|
||||||
private KList<StructureTemplate> openEditors;
|
|
||||||
|
|
||||||
public StructureManager()
|
|
||||||
{
|
|
||||||
this.openEditors = new KList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void closeall()
|
|
||||||
{
|
|
||||||
for(StructureTemplate i : openEditors.copy())
|
|
||||||
{
|
|
||||||
i.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void open(StructureTemplate t)
|
|
||||||
{
|
|
||||||
for(StructureTemplate i : openEditors.copy())
|
|
||||||
{
|
|
||||||
if(t.getWorker().equals(i.getWorker()))
|
|
||||||
{
|
|
||||||
i.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
openEditors.add(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void remove(StructureTemplate s)
|
|
||||||
{
|
|
||||||
openEditors.remove(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StructureTemplate get(Player p)
|
|
||||||
{
|
|
||||||
for(StructureTemplate i : openEditors)
|
|
||||||
{
|
|
||||||
if(i.getWorker().equals(p))
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,9 +20,6 @@ public class CommandIris extends MortarCommand
|
|||||||
@Command
|
@Command
|
||||||
private CommandIrisJigsaw jigsaw;
|
private CommandIrisJigsaw jigsaw;
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructure structure;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisObject object;
|
private CommandIrisObject object;
|
||||||
|
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.util.Command;
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructure extends MortarCommand
|
|
||||||
{
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureCreate create;
|
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureOpen open;
|
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureSave save;
|
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureMove more;
|
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureExpand expand;
|
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureVariants variants;
|
|
||||||
|
|
||||||
@Command
|
|
||||||
private CommandIrisStructureClose close;
|
|
||||||
|
|
||||||
public CommandIrisStructure()
|
|
||||||
{
|
|
||||||
super("structure", "struct", "str");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Structure Commands");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Iris Structure Commands");
|
|
||||||
printHelp(sender);
|
|
||||||
sender.sendMessage("Note: This is a Procedural Structure creator,");
|
|
||||||
sender.sendMessage("not an object creator, see '/iris object'.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "[subcommand]";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureClose extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureClose()
|
|
||||||
{
|
|
||||||
super("close", "x");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Close a structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
StructureTemplate m = Iris.struct.get(p);
|
|
||||||
|
|
||||||
if(m == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("You do not have an open structure");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.close();
|
|
||||||
sender.sendMessage("Saved & Closed!");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,104 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureCreate extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureCreate()
|
|
||||||
{
|
|
||||||
super("new", "create", "+");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Create a structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sender.isPlayer()) {
|
|
||||||
sender.sendMessage("You cannot run this from console");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
|
|
||||||
boolean d3 = false;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
|
|
||||||
|
|
||||||
if (args.length == 0){
|
|
||||||
sender.sendMessage("Please specify the name of the object you wish to create");
|
|
||||||
return true;
|
|
||||||
} else if (args.length == 1){
|
|
||||||
sender.sendMessage("Please specify the name of the dimension you are in");
|
|
||||||
return true;
|
|
||||||
} else if (args.length == 2){
|
|
||||||
sender.sendMessage("No width and height specified. Taking defaults (5 and 5)");
|
|
||||||
width = 5;
|
|
||||||
height = 5;
|
|
||||||
} else if (args.length == 3){
|
|
||||||
if (args[2].equalsIgnoreCase("-3d"))
|
|
||||||
{
|
|
||||||
sender.sendMessage("No width and height specified. Taking defaults (5 and 5)");
|
|
||||||
width = 5;
|
|
||||||
height = 5;
|
|
||||||
d3 = true;
|
|
||||||
} else {
|
|
||||||
sender.sendMessage("No height specified, taking width as height");
|
|
||||||
width = Integer.parseInt(args[2]);
|
|
||||||
height = Integer.parseInt(args[2]);
|
|
||||||
}
|
|
||||||
} else if (args.length == 4){
|
|
||||||
width = Integer.parseInt(args[2]);
|
|
||||||
|
|
||||||
if (args[3].equalsIgnoreCase("-3d"))
|
|
||||||
{
|
|
||||||
sender.sendMessage("No height specified, taking width as height");
|
|
||||||
height = Integer.parseInt(args[2]);
|
|
||||||
} else {
|
|
||||||
height = Integer.parseInt(args[3]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (String i : args){
|
|
||||||
if (i.equalsIgnoreCase("-3d")){
|
|
||||||
d3 = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
width = Integer.parseInt(args[2]);
|
|
||||||
height = Integer.parseInt(args[3]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width % 2 == 0){
|
|
||||||
sender.sendMessage("Width is an even number. Adding one");
|
|
||||||
width += width % 2 == 0 ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("Creating new Structure");
|
|
||||||
new StructureTemplate(args[0], args[1], p, p.getLocation(), 5, width, height, d3);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "<name> <dimension> <tile-width> <tile-height> [-3d]";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureExpand extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureExpand()
|
|
||||||
{
|
|
||||||
super("expand", "++");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Expand out more of the structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
StructureTemplate m = Iris.struct.get(p);
|
|
||||||
|
|
||||||
if(m == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("You do not have an open structure");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.expand();
|
|
||||||
sender.sendMessage("Loading More!");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureMove extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureMove()
|
|
||||||
{
|
|
||||||
super("move", "here");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Load more of the structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
StructureTemplate m = Iris.struct.get(p);
|
|
||||||
|
|
||||||
if(m == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("You do not have an open structure");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.more();
|
|
||||||
sender.sendMessage("Moving Structure Builder!");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.object.IrisStructure;
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureOpen extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureOpen()
|
|
||||||
{
|
|
||||||
super("load", "open", "o");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Open an existing structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length == 0){
|
|
||||||
sender.sendMessage("Please specify the structure you wish to load");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
|
|
||||||
IrisStructure structure = IrisDataManager.loadAnyStructure(args[0]);
|
|
||||||
|
|
||||||
if(structure == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("Can't find " + args[0]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String dimensionGuess = structure.getLoadFile().getParentFile().getParentFile().getName();
|
|
||||||
new StructureTemplate(structure.getName(), dimensionGuess, p, p.getLocation(), 9, structure.getGridSize(), structure.getGridHeight(), structure.getMaxLayers() > 1).loadStructures(structure);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "<structure>";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.manager.structure.StructureTemplate;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureSave extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureSave()
|
|
||||||
{
|
|
||||||
super("save", "s");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Save a structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
StructureTemplate m = Iris.struct.get(p);
|
|
||||||
|
|
||||||
if(m == null)
|
|
||||||
{
|
|
||||||
sender.sendMessage("You do not have an open structure");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.saveStructure();
|
|
||||||
sender.sendMessage("Saved!");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
package com.volmit.iris.manager.command;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
|
||||||
import com.volmit.iris.IrisSettings;
|
|
||||||
import com.volmit.iris.util.MortarCommand;
|
|
||||||
import com.volmit.iris.util.MortarSender;
|
|
||||||
|
|
||||||
public class CommandIrisStructureVariants extends MortarCommand
|
|
||||||
{
|
|
||||||
public CommandIrisStructureVariants()
|
|
||||||
{
|
|
||||||
super("variants", "var", "v");
|
|
||||||
requiresPermission(Iris.perm);
|
|
||||||
setCategory("Structure");
|
|
||||||
setDescription("Change or add variants in tile looking at");
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 Structures, please enable studio in Iris/settings.json");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sender.isPlayer())
|
|
||||||
{
|
|
||||||
sender.sendMessage("You don't have a wand");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player p = sender.player();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Iris.struct.get(p).openVariants();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
sender.sendMessage("You do not have an open structure");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getArgsUsage()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
@ -34,7 +34,7 @@ public class MultiverseCoreLink
|
|||||||
Method m = mvWorldManager.getClass().getDeclaredMethod("addWorld",
|
Method m = mvWorldManager.getClass().getDeclaredMethod("addWorld",
|
||||||
|
|
||||||
String.class, World.Environment.class, String.class, WorldType.class, Boolean.class, String.class, boolean.class);
|
String.class, World.Environment.class, String.class, WorldType.class, Boolean.class, String.class, boolean.class);
|
||||||
boolean b = (boolean) m.invoke(mvWorldManager, worldName, dim.getEnvironment(), seed, WorldType.NORMAL, dim.isVanillaStructures(), "Iris", false);
|
boolean b = (boolean) m.invoke(mvWorldManager, worldName, dim.getEnvironment(), seed, WorldType.NORMAL, false, "Iris", false);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,196 +0,0 @@
|
|||||||
package com.volmit.iris.object;
|
|
||||||
|
|
||||||
import com.volmit.iris.scaffold.cache.AtomicCache;
|
|
||||||
import com.volmit.iris.generator.noise.CNG;
|
|
||||||
import com.volmit.iris.util.ArrayType;
|
|
||||||
import com.volmit.iris.util.BlockPosition;
|
|
||||||
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.Required;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
@Accessors(chain = true)
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Represents a structure in iris.")
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
public class IrisStructure extends IrisRegistrant
|
|
||||||
{
|
|
||||||
|
|
||||||
@MinNumber(2)
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("This is the human readable name for this structure. Such as Red Dungeon or Tropical Village.")
|
|
||||||
private String name = "A Structure Type";
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Entity spawns to override or add to this structure")
|
|
||||||
@ArrayType(min = 1, type = IrisEntitySpawnOverride.class)
|
|
||||||
private KList<IrisEntitySpawnOverride> entitySpawnOverrides = new KList<>();
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Entity spawns during generation")
|
|
||||||
@ArrayType(min = 1, type = IrisEntityInitialSpawn.class)
|
|
||||||
private KList<IrisEntityInitialSpawn> entityInitialSpawns = new KList<>();
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Wall style noise")
|
|
||||||
private IrisGeneratorStyle wallStyle = NoiseStyle.STATIC.style();
|
|
||||||
|
|
||||||
@Desc("Setting underwater to true will waterlog blocks")
|
|
||||||
@DontObfuscate
|
|
||||||
private boolean underwater = false;
|
|
||||||
|
|
||||||
@Desc("The max & min height any part of this structure can place at")
|
|
||||||
@DontObfuscate
|
|
||||||
private IrisObjectLimit clamp = new IrisObjectLimit();
|
|
||||||
|
|
||||||
@Desc("Setting bore to true will dig out blocks before placing tiles")
|
|
||||||
@DontObfuscate
|
|
||||||
private boolean bore = false;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@MinNumber(3)
|
|
||||||
@MaxNumber(64)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("This is the x and z size of each grid cell")
|
|
||||||
private int gridSize = 11;
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Reference loot tables in this area")
|
|
||||||
private IrisLootReference loot = new IrisLootReference();
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@MinNumber(1)
|
|
||||||
@MaxNumber(255)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("This is the y size of each grid cell")
|
|
||||||
private int gridHeight = 5;
|
|
||||||
|
|
||||||
@MinNumber(1)
|
|
||||||
@MaxNumber(82)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("This is the maximum layers iris will generate for (height cells)")
|
|
||||||
private int maxLayers = 1;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@MinNumber(0)
|
|
||||||
@MaxNumber(1)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("This is the wall chance. Higher values makes more rooms and less open halls")
|
|
||||||
private double wallChance = 0.25;
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Edges of tiles replace each other instead of having their own.")
|
|
||||||
private boolean mergeEdges = false;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@ArrayType(min = 1, type = IrisStructureTile.class)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The tiles")
|
|
||||||
private KList<IrisStructureTile> tiles = new KList<>();
|
|
||||||
|
|
||||||
private final transient AtomicCache<CNG> wallGenerator = new AtomicCache<>();
|
|
||||||
|
|
||||||
public TileResult getTile(RNG rng, double x, double y, double z)
|
|
||||||
{
|
|
||||||
KList<StructureTileFace> walls = new KList<>();
|
|
||||||
boolean floor = isWall(rng, x, y, z, StructureTileFace.DOWN);
|
|
||||||
boolean ceiling = isWall(rng, x, y, z, StructureTileFace.UP);
|
|
||||||
|
|
||||||
if(isWall(rng, x, y, z, StructureTileFace.NORTH))
|
|
||||||
{
|
|
||||||
walls.add(StructureTileFace.NORTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isWall(rng, x, y, z, StructureTileFace.SOUTH))
|
|
||||||
{
|
|
||||||
walls.add(StructureTileFace.SOUTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isWall(rng, x, y, z, StructureTileFace.EAST))
|
|
||||||
{
|
|
||||||
walls.add(StructureTileFace.EAST);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isWall(rng, x, y, z, StructureTileFace.WEST))
|
|
||||||
{
|
|
||||||
walls.add(StructureTileFace.WEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
int faces = walls.size() + (floor ? 1 : 0) + (ceiling ? +1 : 0);
|
|
||||||
int openings = 6 - faces;
|
|
||||||
int rt = 0;
|
|
||||||
|
|
||||||
for(int cx = 0; cx < 4; cx++)
|
|
||||||
{
|
|
||||||
for(IrisStructureTile i : tiles)
|
|
||||||
{
|
|
||||||
if(i.likeAGlove(floor, ceiling, walls, faces, openings))
|
|
||||||
{
|
|
||||||
return new TileResult(this, i, rt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(cx < 3)
|
|
||||||
{
|
|
||||||
rotate(walls);
|
|
||||||
rt += 90;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void rotate(KList<StructureTileFace> faces)
|
|
||||||
{
|
|
||||||
for(int i = 0; i < faces.size(); i++)
|
|
||||||
{
|
|
||||||
faces.set(i, faces.get(i).rotate90CW());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isWall(RNG rng, double x, double y, double z, StructureTileFace face)
|
|
||||||
{
|
|
||||||
if((face == StructureTileFace.DOWN || face == StructureTileFace.UP) && maxLayers == 1)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockPosition p = asTileHorizon(new BlockPosition((int) x, (int) y, (int) z), face);
|
|
||||||
return (getWallGenerator(rng).fitDouble(0, 1, p.getX(), p.getY(), p.getZ()) < getWallChance());
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTileHorizon(double v)
|
|
||||||
{
|
|
||||||
return (int) Math.floor(v / gridSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockPosition asTileHorizon(BlockPosition b, StructureTileFace face)
|
|
||||||
{
|
|
||||||
b.setX((int) (Math.floor((b.getX() * 2) / (gridSize)) + face.x()));
|
|
||||||
b.setY((int) (Math.floor((b.getY() * 2) / (gridHeight)) + face.y()));
|
|
||||||
b.setZ((int) (Math.floor((b.getZ() * 2) / (gridSize)) + face.z()));
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CNG getWallGenerator(RNG rng)
|
|
||||||
{
|
|
||||||
return wallGenerator.aquire(() ->
|
|
||||||
{
|
|
||||||
RNG rngx = new RNG(228385999).nextParallelRNG((int) (name.hashCode() + gridHeight - gridSize + maxLayers + tiles.size()));
|
|
||||||
return wallStyle.create(rngx).scale(0.8);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
package com.volmit.iris.object;
|
|
||||||
|
|
||||||
import com.volmit.iris.scaffold.cache.AtomicCache;
|
|
||||||
import com.volmit.iris.generator.noise.CellGenerator;
|
|
||||||
import com.volmit.iris.scaffold.data.DataProvider;
|
|
||||||
import com.volmit.iris.util.*;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
@Accessors(chain = true)
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Desc("Represents a structure placement")
|
|
||||||
@Data
|
|
||||||
public class IrisStructurePlacement
|
|
||||||
{
|
|
||||||
|
|
||||||
@RegistryListStructure
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The structure tileset to use")
|
|
||||||
private String tileset = "";
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@MinNumber(0.0001)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The structure chance zoom. Higher = bigger cells, further away")
|
|
||||||
private double zoom = 1D;
|
|
||||||
|
|
||||||
@MinNumber(-1)
|
|
||||||
@MaxNumber(1)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The ratio. Lower values means cells can get closer to other cells. Negative values means make veins of structures")
|
|
||||||
private double ratio = 0.25D;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@MinNumber(1)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The rarity for this structure")
|
|
||||||
private int rarity = 4;
|
|
||||||
|
|
||||||
@MinNumber(-1)
|
|
||||||
@MaxNumber(255)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The height or -1 for surface")
|
|
||||||
private int height = -1;
|
|
||||||
|
|
||||||
@MinNumber(0)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The chance cell shuffle (rougher edges)")
|
|
||||||
private double shuffle = 22;
|
|
||||||
|
|
||||||
private final transient AtomicCache<CellGenerator> chanceCell = new AtomicCache<>();
|
|
||||||
private final transient AtomicCache<IrisStructure> structure = new AtomicCache<>();
|
|
||||||
private final transient AtomicCache<IrisObjectPlacement> config = new AtomicCache<>();
|
|
||||||
|
|
||||||
private IrisObjectPlacement getConfig()
|
|
||||||
{
|
|
||||||
return config.aquire(() ->
|
|
||||||
{
|
|
||||||
IrisObjectPlacement p = new IrisObjectPlacement();
|
|
||||||
p.setWaterloggable(false);
|
|
||||||
return p;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public IrisObject load(DataProvider g, String s)
|
|
||||||
{
|
|
||||||
return g.getData().getObjectLoader().load(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gridSize(DataProvider g)
|
|
||||||
{
|
|
||||||
return getStructure(g).getGridSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gridHeight(DataProvider g)
|
|
||||||
{
|
|
||||||
return getStructure(g).getGridHeight();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IrisStructure getStructure(DataProvider g)
|
|
||||||
{
|
|
||||||
return structure.aquire(() -> g.getData().getStructureLoader().load(getTileset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public CellGenerator getChanceGenerator(RNG g)
|
|
||||||
{
|
|
||||||
return chanceCell.aquire(() ->
|
|
||||||
{
|
|
||||||
CellGenerator chanceCell = new CellGenerator(g.nextParallelRNG(-72346).nextParallelRNG((height + 10000) * rarity));
|
|
||||||
chanceCell.setCellScale(1D);
|
|
||||||
chanceCell.setShuffle(getShuffle());
|
|
||||||
return chanceCell;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
package com.volmit.iris.object;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import com.volmit.iris.scaffold.cache.AtomicCache;
|
|
||||||
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.KMap;
|
|
||||||
import com.volmit.iris.util.RegistryListObject;
|
|
||||||
import com.volmit.iris.util.Required;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
@Accessors(chain = true)
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Represents a structure tile")
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
public class IrisStructureTile
|
|
||||||
{
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Reference loot tables in this area")
|
|
||||||
private IrisLootReference loot = new IrisLootReference();
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Entity spawns to override or add to this structure tile")
|
|
||||||
@ArrayType(min = 1, type = IrisEntitySpawnOverride.class)
|
|
||||||
private KList<IrisEntitySpawnOverride> entitySpawnOverrides = new KList<>();
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Entity spawns during generation")
|
|
||||||
@ArrayType(min = 1, type = IrisEntityInitialSpawn.class)
|
|
||||||
private KList<IrisEntityInitialSpawn> entityInitialSpawns = new KList<>();
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("The place mode for this tile")
|
|
||||||
private ObjectPlaceMode placeMode = ObjectPlaceMode.CENTER_HEIGHT;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Is this structure allowed to place if there is supposed to be a ceiling?")
|
|
||||||
private StructureTileCondition ceiling = StructureTileCondition.AGNOSTIC;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Is this structure allowed to place if there is supposed to be a floor?")
|
|
||||||
private StructureTileCondition floor = StructureTileCondition.REQUIRED;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Is this structure allowed to place if there is supposed to be a north wall?")
|
|
||||||
private StructureTileCondition north = StructureTileCondition.AGNOSTIC;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Is this structure allowed to place if there is supposed to be a south wall?")
|
|
||||||
private StructureTileCondition south = StructureTileCondition.AGNOSTIC;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Is this structure allowed to place if there is supposed to be a east wall?")
|
|
||||||
private StructureTileCondition east = StructureTileCondition.AGNOSTIC;
|
|
||||||
|
|
||||||
@Required
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("Is this structure allowed to place if there is supposed to be a west wall?")
|
|
||||||
private StructureTileCondition west = StructureTileCondition.AGNOSTIC;
|
|
||||||
|
|
||||||
@RegistryListObject
|
|
||||||
@Required
|
|
||||||
@ArrayType(min = 1, type = String.class)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("List of objects to place centered in this tile")
|
|
||||||
private KList<String> objects = new KList<>();
|
|
||||||
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("If set to true, Iris will try to fill the insides of 'rooms' and 'pockets' where air should fit based off of raytrace checks. This prevents a village house placing in an area where a tree already exists, and instead replaces the parts of the tree where the interior of the structure is. \n\nThis operation does not affect warmed-up generation speed however it does slow down loading objects.")
|
|
||||||
private boolean smartBore = false;
|
|
||||||
|
|
||||||
@RegistryListObject
|
|
||||||
@ArrayType(min = 1, type = IrisRareObject.class)
|
|
||||||
@DontObfuscate
|
|
||||||
@Desc("List of objects to place centered in this tile but with rarity. These items only place some of the time so specify objects for common stuff too.")
|
|
||||||
private KList<IrisRareObject> rareObjects = new KList<>();
|
|
||||||
|
|
||||||
private final transient KMap<Integer, IrisObject> forceObjects = new KMap<>();
|
|
||||||
private final transient AtomicCache<Integer> minFaces = new AtomicCache<>();
|
|
||||||
private final transient AtomicCache<Integer> maxFaces = new AtomicCache<>();
|
|
||||||
|
|
||||||
public int hashFace()
|
|
||||||
{
|
|
||||||
return Objects.hash(ceiling, floor, south, north, east, west);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return (ceiling.required() ? "C" : "") + (floor.required() ? "F" : "") + "| " + (north.required() ? "X" : "-") + (south.required() ? "X" : "-") + (east.required() ? "X" : "-") + (west.required() ? "X" : "-") + " |";
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean likeAGlove(boolean floor, boolean ceiling, KList<StructureTileFace> walls, int faces, int openings)
|
|
||||||
{
|
|
||||||
// @NoArgsConstructor
|
|
||||||
|
|
||||||
if((getFloor().required() && !floor) || (getCeiling().required() && !ceiling))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((!getFloor().supported() && floor) || (!getCeiling().supported() && ceiling))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!fitsWalls(walls, faces, openings))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//@done
|
|
||||||
|
|
||||||
return faces >= minFaces.aquire(() ->
|
|
||||||
{
|
|
||||||
int m = 0;
|
|
||||||
m += this.ceiling.required() ? 1 : 0;
|
|
||||||
m += this.floor.required() ? 1 : 0;
|
|
||||||
m += this.north.required() ? 1 : 0;
|
|
||||||
m += this.south.required() ? 1 : 0;
|
|
||||||
m += this.east.required() ? 1 : 0;
|
|
||||||
m += this.west.required() ? 1 : 0;
|
|
||||||
return m;
|
|
||||||
}) && faces <= maxFaces.aquire(() ->
|
|
||||||
{
|
|
||||||
int m = 0;
|
|
||||||
m += this.ceiling.supported() ? 1 : 0;
|
|
||||||
m += this.floor.supported() ? 1 : 0;
|
|
||||||
m += this.north.supported() ? 1 : 0;
|
|
||||||
m += this.south.supported() ? 1 : 0;
|
|
||||||
m += this.east.supported() ? 1 : 0;
|
|
||||||
m += this.west.supported() ? 1 : 0;
|
|
||||||
return m;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean fitsWalls(KList<StructureTileFace> walls, int faces, int openings)
|
|
||||||
{
|
|
||||||
// @NoArgsConstructor
|
|
||||||
if((getNorth().required() && !walls.contains(StructureTileFace.NORTH)) || (getSouth().required() && !walls.contains(StructureTileFace.SOUTH)) || (getEast().required() && !walls.contains(StructureTileFace.EAST)) || (getWest().required() && !walls.contains(StructureTileFace.WEST)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((!getNorth().supported() && walls.contains(StructureTileFace.NORTH)) || (!getSouth().supported() && walls.contains(StructureTileFace.SOUTH)) || (!getEast().supported() && walls.contains(StructureTileFace.EAST)) || (!getWest().supported() && walls.contains(StructureTileFace.WEST)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//@done
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
package com.volmit.iris.object;
|
|
||||||
|
|
||||||
import com.volmit.iris.util.Desc;
|
|
||||||
import com.volmit.iris.util.DontObfuscate;
|
|
||||||
|
|
||||||
@Desc("A structure tile condition is for a specific wall if a tile is allowed to place if a wall exists.")
|
|
||||||
public enum StructureTileCondition
|
|
||||||
{
|
|
||||||
@Desc("This face REQUIRES a wall for this tile to place here")
|
|
||||||
@DontObfuscate
|
|
||||||
REQUIRED,
|
|
||||||
|
|
||||||
@Desc("This face DOESNT CARE if a wall is here for this tile to place here")
|
|
||||||
@DontObfuscate
|
|
||||||
AGNOSTIC,
|
|
||||||
|
|
||||||
@Desc("This face CANNOT HAVE a wall for this tile to place here")
|
|
||||||
@DontObfuscate
|
|
||||||
NEVER;
|
|
||||||
|
|
||||||
public boolean supported()
|
|
||||||
{
|
|
||||||
return !this.equals(NEVER);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean required()
|
|
||||||
{
|
|
||||||
return this.equals(REQUIRED);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
package com.volmit.iris.object;
|
|
||||||
|
|
||||||
public enum StructureTileFace
|
|
||||||
{
|
|
||||||
UP,
|
|
||||||
DOWN,
|
|
||||||
NORTH,
|
|
||||||
SOUTH,
|
|
||||||
EAST,
|
|
||||||
WEST;
|
|
||||||
|
|
||||||
public int x()
|
|
||||||
{
|
|
||||||
return this.equals(EAST) ? 1 : this.equals(WEST) ? -1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int y()
|
|
||||||
{
|
|
||||||
return this.equals(UP) ? 1 : this.equals(DOWN) ? -1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int z()
|
|
||||||
{
|
|
||||||
return this.equals(SOUTH) ? 1 : this.equals(NORTH) ? -1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StructureTileFace rotate90CW()
|
|
||||||
{
|
|
||||||
switch(this)
|
|
||||||
{
|
|
||||||
case EAST:
|
|
||||||
return SOUTH;
|
|
||||||
case NORTH:
|
|
||||||
return EAST;
|
|
||||||
case SOUTH:
|
|
||||||
return WEST;
|
|
||||||
case WEST:
|
|
||||||
return NORTH;
|
|
||||||
default:
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package com.volmit.iris.object;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public class TileResult
|
|
||||||
{
|
|
||||||
private IrisStructure structure;
|
|
||||||
private IrisStructureTile tile;
|
|
||||||
private IrisObjectPlacement placement;
|
|
||||||
|
|
||||||
public TileResult(IrisStructure structure, IrisStructureTile tile, int rot)
|
|
||||||
{
|
|
||||||
this.structure = structure;
|
|
||||||
this.tile = tile;
|
|
||||||
IrisObjectPlacement p = new IrisObjectPlacement();
|
|
||||||
IrisObjectRotation rt = new IrisObjectRotation();
|
|
||||||
rt.setYAxis(new IrisAxisRotationClamp(rot != 0, false, rot, rot, 0));
|
|
||||||
p.setRotation(rt);
|
|
||||||
p.setBottom(true);
|
|
||||||
p.setBore(structure.isBore());
|
|
||||||
p.setClamp(structure.getClamp());
|
|
||||||
p.setSmartBore(tile.isSmartBore());
|
|
||||||
p.setWaterloggable(structure.isUnderwater());
|
|
||||||
p.setMode(tile.getPlaceMode());
|
|
||||||
placement = p;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package com.volmit.iris.scaffold.engine;
|
|
||||||
|
|
||||||
public abstract class EngineAssignedStructureManager extends EngineAssignedComponent implements EngineStructureManager {
|
|
||||||
public EngineAssignedStructureManager(Engine engine) {
|
|
||||||
super(engine, "Structure");
|
|
||||||
}
|
|
||||||
}
|
|
@ -548,15 +548,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldGenerateStructures() {
|
public boolean shouldGenerateStructures() {
|
||||||
try
|
return false;
|
||||||
{
|
|
||||||
return getComposite().getDefaultEngine().getDimension().isVanillaStructures();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EngineCompositeGenerator newStudioWorld(String dimension) {
|
public static EngineCompositeGenerator newStudioWorld(String dimension) {
|
||||||
|
@ -29,8 +29,6 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
|||||||
|
|
||||||
public int getParallaxSize();
|
public int getParallaxSize();
|
||||||
|
|
||||||
public EngineStructureManager getStructureManager();
|
|
||||||
|
|
||||||
default EngineFramework getFramework() {
|
default EngineFramework getFramework() {
|
||||||
return getEngine().getFramework();
|
return getEngine().getFramework();
|
||||||
}
|
}
|
||||||
@ -275,7 +273,6 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
|||||||
IrisBiome biome = getComplex().getTrueBiomeStream().get(xx+8, zz+8);
|
IrisBiome biome = getComplex().getTrueBiomeStream().get(xx+8, zz+8);
|
||||||
generateParallaxSurface(rng, x, z, biome, false);
|
generateParallaxSurface(rng, x, z, biome, false);
|
||||||
generateParallaxMutations(rng, x, z, false);
|
generateParallaxMutations(rng, x, z, false);
|
||||||
generateStructures(rng, x, z, region, biome);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default void generateParallaxFeatures(RNG rng, int cx, int cz, IrisRegion region, IrisBiome biome)
|
default void generateParallaxFeatures(RNG rng, int cx, int cz, IrisRegion region, IrisBiome biome)
|
||||||
@ -309,30 +306,6 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
|
|||||||
generateParallaxLayer(x, z, false);
|
generateParallaxLayer(x, z, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void generateStructures(RNG rng, int x, int z, IrisRegion region, IrisBiome biome)
|
|
||||||
{
|
|
||||||
int g = 30265;
|
|
||||||
for(IrisStructurePlacement k : region.getStructures())
|
|
||||||
{
|
|
||||||
if(k == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
getStructureManager().placeStructure(k, rng.nextParallelRNG(2228 * 2 * g++), x, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(IrisStructurePlacement k : biome.getStructures())
|
|
||||||
{
|
|
||||||
if(k == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
getStructureManager().placeStructure(k, rng.nextParallelRNG(-22228 * 4 * g++), x, z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default KList<Runnable> generateParallaxJigsaw(RNG rng, int x, int z, IrisBiome biome) {
|
default KList<Runnable> generateParallaxJigsaw(RNG rng, int x, int z, IrisBiome biome) {
|
||||||
KList<Runnable> placeAfter = new KList<>();
|
KList<Runnable> placeAfter = new KList<>();
|
||||||
|
|
||||||
|
@ -1,189 +0,0 @@
|
|||||||
package com.volmit.iris.scaffold.engine;
|
|
||||||
|
|
||||||
import com.volmit.iris.object.IrisObject;
|
|
||||||
import com.volmit.iris.object.IrisRareObject;
|
|
||||||
import com.volmit.iris.object.IrisStructurePlacement;
|
|
||||||
import com.volmit.iris.object.TileResult;
|
|
||||||
import com.volmit.iris.scaffold.parallax.ParallaxChunkMeta;
|
|
||||||
import com.volmit.iris.util.ChunkPosition;
|
|
||||||
import com.volmit.iris.util.KList;
|
|
||||||
import com.volmit.iris.util.KSet;
|
|
||||||
import com.volmit.iris.util.RNG;
|
|
||||||
|
|
||||||
public interface EngineStructureManager extends EngineComponent
|
|
||||||
{
|
|
||||||
default void placeStructure(IrisStructurePlacement structure, RNG rngno, int cx, int cz)
|
|
||||||
{
|
|
||||||
RNG rng = new RNG(getEngine().getWorld().getSeed()).nextParallelRNG(-88738456 + rngno.nextInt());
|
|
||||||
RNG rnp = rng.nextParallelRNG(cx - (cz * cz << 3) + rngno.nextInt());
|
|
||||||
int s = structure.gridSize(getEngine()) - (structure.getStructure(getEngine()).isMergeEdges() ? 1 : 0);
|
|
||||||
int sh = structure.gridHeight(getEngine()) - (structure.getStructure(getEngine()).isMergeEdges() ? 1 : 0);
|
|
||||||
KSet<ChunkPosition> m = new KSet<>();
|
|
||||||
|
|
||||||
for(int i = cx << 4; i <= (cx << 4) + 15; i += 1)
|
|
||||||
{
|
|
||||||
if(Math.floorDiv(i, s) * s >> 4 < cx)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int j = cz << 4; j <= (cz << 4) + 15; j += 1)
|
|
||||||
{
|
|
||||||
if(Math.floorDiv(j, s) * s >> 4 < cz)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChunkPosition p = new ChunkPosition(Math.floorDiv(i, s) * s, Math.floorDiv(j, s) * s);
|
|
||||||
|
|
||||||
if(m.contains(p))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.add(p);
|
|
||||||
|
|
||||||
if(structure.getStructure(getEngine()).getMaxLayers() <= 1)
|
|
||||||
{
|
|
||||||
placeLayer(structure, rng, rnp, i, 0, j, s, sh);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int k = 0; k < s * structure.getStructure(getEngine()).getMaxLayers(); k += Math.max(sh, 1))
|
|
||||||
{
|
|
||||||
placeLayer(structure, rng, rnp, i, k, j, s, sh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default void placeStructure(IrisStructurePlacement structure, RNG rngno, int cx, int cz, KList<PlacedObject> objects)
|
|
||||||
{
|
|
||||||
RNG rng = new RNG(getEngine().getWorld().getSeed()).nextParallelRNG(-88738456 + rngno.nextInt());
|
|
||||||
RNG rnp = rng.nextParallelRNG(cx - (cz * cz << 3) + rngno.nextInt());
|
|
||||||
int s = structure.gridSize(getEngine()) - (structure.getStructure(getEngine()).isMergeEdges() ? 1 : 0);
|
|
||||||
int sh = structure.gridHeight(getEngine()) - (structure.getStructure(getEngine()).isMergeEdges() ? 1 : 0);
|
|
||||||
KSet<ChunkPosition> m = new KSet<>();
|
|
||||||
|
|
||||||
for(int i = cx << 4; i <= (cx << 4) + 15; i += 1)
|
|
||||||
{
|
|
||||||
if(Math.floorDiv(i, s) * s >> 4 < cx)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int j = cz << 4; j <= (cz << 4) + 15; j += 1)
|
|
||||||
{
|
|
||||||
if(Math.floorDiv(j, s) * s >> 4 < cz)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChunkPosition p = new ChunkPosition(Math.floorDiv(i, s) * s, Math.floorDiv(j, s) * s);
|
|
||||||
|
|
||||||
if(m.contains(p))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
m.add(p);
|
|
||||||
|
|
||||||
if(structure.getStructure(getEngine()).getMaxLayers() <= 1)
|
|
||||||
{
|
|
||||||
placeLayer(structure, rng, rnp, i, 0, j, s, sh, objects);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int k = 0; k < s * structure.getStructure(getEngine()).getMaxLayers(); k += Math.max(sh, 1))
|
|
||||||
{
|
|
||||||
placeLayer(structure, rng, rnp, i, k, j, s, sh, objects);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default void placeLayer(IrisStructurePlacement structure, RNG rng, RNG rnp, int i, int k, int j, int s, int sh)
|
|
||||||
{
|
|
||||||
if(!hasStructure(structure, rng, i, k, j))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int h = (structure.getHeight() == -1 ? 0 : structure.getHeight()) + (Math.floorDiv(k, sh) * sh);
|
|
||||||
TileResult t = structure.getStructure(getEngine()).getTile(rng, Math.floorDiv(i, s) * s, h, Math.floorDiv(j, s) * s);
|
|
||||||
|
|
||||||
if(t != null)
|
|
||||||
{
|
|
||||||
IrisObject o = null;
|
|
||||||
|
|
||||||
for(IrisRareObject l : t.getTile().getRareObjects())
|
|
||||||
{
|
|
||||||
if(rnp.i(1, l.getRarity()) == 1)
|
|
||||||
{
|
|
||||||
o = structure.load(getEngine(), l.getObject());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
o = o != null ? o : structure.load(getEngine(), t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size())));
|
|
||||||
int id = rng.i(0, Integer.MAX_VALUE);
|
|
||||||
IrisObject oo = o;
|
|
||||||
o.place(
|
|
||||||
Math.floorDiv(i, s) * s,
|
|
||||||
structure.getHeight() == -1 ? -1 : h,
|
|
||||||
Math.floorDiv(j, s) * s,
|
|
||||||
getEngine().getFramework().getEngineParallax(),
|
|
||||||
t.getPlacement(),
|
|
||||||
rng,
|
|
||||||
(b) -> {
|
|
||||||
getEngine().getParallax().setObject(b.getX(), b.getY(), b.getZ(), oo.getLoadKey() + "@" + id);
|
|
||||||
ParallaxChunkMeta meta = getEngine().getParallax().getMetaRW(b.getX() >> 4, b.getZ() >> 4);
|
|
||||||
meta.setObjects(true);
|
|
||||||
meta.setMaxObject(Math.max(b.getY(), meta.getMaxObject()));
|
|
||||||
meta.setMinObject(Math.min(b.getY(), Math.max(meta.getMinObject(), 0)));
|
|
||||||
},
|
|
||||||
null,
|
|
||||||
getData()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default void placeLayer(IrisStructurePlacement structure, RNG rng, RNG rnp, int i, int k, int j, int s, int sh, KList<PlacedObject> objects)
|
|
||||||
{
|
|
||||||
if(!hasStructure(structure, rng, i, k, j))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int h = (structure.getHeight() == -1 ? 0 : structure.getHeight()) + (Math.floorDiv(k, sh) * sh);
|
|
||||||
TileResult t = structure.getStructure(getEngine()).getTile(rng, Math.floorDiv(i, s) * s, h, Math.floorDiv(j, s) * s);
|
|
||||||
|
|
||||||
if(t != null)
|
|
||||||
{
|
|
||||||
IrisObject o = null;
|
|
||||||
|
|
||||||
for(IrisRareObject l : t.getTile().getRareObjects())
|
|
||||||
{
|
|
||||||
if(rnp.i(1, l.getRarity()) == 1)
|
|
||||||
{
|
|
||||||
o = structure.load(getEngine(), l.getObject());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
o = o != null ? o : structure.load(getEngine(), t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size())));
|
|
||||||
int id = rng.i(0, Integer.MAX_VALUE);
|
|
||||||
objects.add(new PlacedObject(null, o, id, Math.floorDiv(i, s) * s, Math.floorDiv(j, s) * s));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default boolean hasStructure(IrisStructurePlacement structure, RNG random, double x, double y, double z)
|
|
||||||
{
|
|
||||||
if(structure.getChanceGenerator(new RNG(getEngine().getWorld().getSeed())).getIndex(x / structure.getZoom(), y / structure.getZoom(), z / structure.getZoom(), structure.getRarity()) == structure.getRarity() / 2)
|
|
||||||
{
|
|
||||||
return structure.getRatio() > 0 ? structure.getChanceGenerator(new RNG(getEngine().getWorld().getSeed())).getDistance(x / structure.getZoom(), z / structure.getZoom()) > structure.getRatio() : structure.getChanceGenerator(new RNG(getEngine().getWorld().getSeed())).getDistance(x / structure.getZoom(), z / structure.getZoom()) < Math.abs(structure.getRatio());
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package com.volmit.iris.util;
|
|
||||||
|
|
||||||
import com.volmit.iris.object.IrisStructure;
|
|
||||||
import com.volmit.iris.object.IrisStructureTile;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class IrisStructureResult
|
|
||||||
{
|
|
||||||
private IrisStructureTile tile;
|
|
||||||
private IrisStructure structure;
|
|
||||||
|
|
||||||
public IrisStructureResult(IrisStructureTile tile, IrisStructure structure)
|
|
||||||
{
|
|
||||||
this.tile = tile;
|
|
||||||
this.structure = structure;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
package com.volmit.iris.util;
|
|
||||||
|
|
||||||
import static java.lang.annotation.ElementType.*;
|
|
||||||
import static java.lang.annotation.RetentionPolicy.*;
|
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Retention(RUNTIME)
|
|
||||||
@Target({PARAMETER, TYPE, FIELD})
|
|
||||||
public @interface RegistryListStructure
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user