9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2026-01-06 15:51:30 +00:00

BLOCK DATA CUSTOM SUPPORT & FIX DECAYS

This commit is contained in:
Daniel Mills
2020-09-14 08:27:14 -04:00
parent e0a60e3ef3
commit d2ea288009
32 changed files with 348 additions and 1151 deletions

View File

@@ -142,7 +142,7 @@ public class CommandIrisCreate extends MortarCommand
} }
sender.sendMessage(worldName + " type installed. Generating Spawn Area..."); sender.sendMessage(worldName + " type installed. Generating Spawn Area...");
//@NoArgsConstructor //@builder
ProvisionBukkit gen = Iris.instance.createProvisionBukkit( ProvisionBukkit gen = Iris.instance.createProvisionBukkit(
IrisGenConfiguration.builder() IrisGenConfiguration.builder()
.threads(IrisSettings.get().threads) .threads(IrisSettings.get().threads)

View File

@@ -329,7 +329,7 @@ public class IrisTerrainProvider extends SkyTerrainProvider implements IrisConte
{ {
for(IrisBlockDrops i : cbio.getBlockDrops()) for(IrisBlockDrops i : cbio.getBlockDrops())
{ {
if(i.shouldDropFor(data)) if(i.shouldDropFor(data, getData()))
{ {
if(!skipParents && i.isSkipParents()) if(!skipParents && i.isSkipParents())
{ {
@@ -350,7 +350,7 @@ public class IrisTerrainProvider extends SkyTerrainProvider implements IrisConte
{ {
for(IrisBlockDrops i : bio.getBlockDrops()) for(IrisBlockDrops i : bio.getBlockDrops())
{ {
if(i.shouldDropFor(data)) if(i.shouldDropFor(data, getData()))
{ {
if(!skipParents && i.isSkipParents()) if(!skipParents && i.isSkipParents())
{ {
@@ -371,7 +371,7 @@ public class IrisTerrainProvider extends SkyTerrainProvider implements IrisConte
{ {
for(IrisBlockDrops i : reg.getBlockDrops()) for(IrisBlockDrops i : reg.getBlockDrops())
{ {
if(i.shouldDropFor(data)) if(i.shouldDropFor(data, getData()))
{ {
if(!skipParents && i.isSkipParents()) if(!skipParents && i.isSkipParents())
{ {
@@ -392,7 +392,7 @@ public class IrisTerrainProvider extends SkyTerrainProvider implements IrisConte
{ {
for(IrisBlockDrops i : dim.getBlockDrops()) for(IrisBlockDrops i : dim.getBlockDrops())
{ {
if(i.shouldDropFor(data)) if(i.shouldDropFor(data, getData()))
{ {
if(i.isReplaceVanillaDrops()) if(i.isReplaceVanillaDrops())
{ {

View File

@@ -405,7 +405,7 @@ public abstract class ParallaxTerrainProvider extends TopographicTerrainProvider
for(int i = 0; i < o.getTriesForChunk(rng); i++) for(int i = 0; i < o.getTriesForChunk(rng); i++)
{ {
rng = rng.nextParallelRNG((i * 3 + 8) - 23040); rng = rng.nextParallelRNG((i * 3 + 8) - 23040);
o.getSchematic(this, rng).place((x * 16) + rng.nextInt(16), (z * 16) + rng.nextInt(16), this, o, rng); o.getSchematic(this, rng).place((x * 16) + rng.nextInt(16), (z * 16) + rng.nextInt(16), this, o, rng, getData());
} }
} }
@@ -414,7 +414,7 @@ public abstract class ParallaxTerrainProvider extends TopographicTerrainProvider
for(int i = 0; i < o.getTriesForChunk(rng); i++) for(int i = 0; i < o.getTriesForChunk(rng); i++)
{ {
rng = rng.nextParallelRNG((i * 3 + 8) - 23040); rng = rng.nextParallelRNG((i * 3 + 8) - 23040);
o.getSchematic(this, rng).place((x * 16) + rng.nextInt(16), (z * 16) + rng.nextInt(16), this, o, rng, c); o.getSchematic(this, rng).place((x * 16) + rng.nextInt(16), (z * 16) + rng.nextInt(16), this, o, rng, c, getData());
} }
} }
@@ -432,7 +432,7 @@ public abstract class ParallaxTerrainProvider extends TopographicTerrainProvider
continue; continue;
} }
o.getSchematic(this, rng).place(xx, res.get(rng.nextParallelRNG(29345 * (i + 234)).nextInt(res.size())).getFloor() + 2, zz, this, o, rng); o.getSchematic(this, rng).place(xx, res.get(rng.nextParallelRNG(29345 * (i + 234)).nextInt(res.size())).getFloor() + 2, zz, this, o, rng, getData());
} }
} }

View File

@@ -140,9 +140,9 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
throw new RuntimeException("Null Biome!"); throw new RuntimeException("Null Biome!");
} }
KList<BlockData> layers = biome.generateLayers(rx, rz, getMasterRandom(), height, height - getFluidHeight()); KList<BlockData> layers = biome.generateLayers(rx, rz, getMasterRandom(), height, height - getFluidHeight(), getData());
KList<BlockData> cavernLayers = null; KList<BlockData> cavernLayers = null;
KList<BlockData> seaLayers = biome.isAquatic() || biome.isShore() ? biome.generateSeaLayers(rx, rz, getMasterRandom(), fluidHeight - height) : new KList<>(); KList<BlockData> seaLayers = biome.isAquatic() || biome.isShore() ? biome.generateSeaLayers(rx, rz, getMasterRandom(), fluidHeight - height, getData()) : new KList<>();
BlockData biomeFluid = biome.getFluidType().isEmpty() ? null : B.get(biome.getFluidType()); BlockData biomeFluid = biome.getFluidType().isEmpty() ? null : B.get(biome.getFluidType());
boolean caverning = false; boolean caverning = false;
@@ -229,7 +229,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
// Set Sea Material (water/lava) // Set Sea Material (water/lava)
if(underwater) if(underwater)
{ {
block = seaLayers.hasIndex(fluidHeight - k) ? seaLayers.get(depth) : biomeFluid != null ? biomeFluid : getDimension().getFluidPalette().get(rockRandom, wx, k, wz); block = seaLayers.hasIndex(fluidHeight - k) ? seaLayers.get(depth) : biomeFluid != null ? biomeFluid : getDimension().getFluidPalette().get(rockRandom, wx, k, wz, getData());
} }
// Set Surface Material for cavern layer surfaces // Set Surface Material for cavern layer surfaces
@@ -242,7 +242,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
if(cavernLayers == null) if(cavernLayers == null)
{ {
cavernLayers = carveBiome.generateLayers(rx, rz, getMasterRandom(), 5, height - getFluidHeight()); cavernLayers = carveBiome.generateLayers(rx, rz, getMasterRandom(), 5, height - getFluidHeight(), getData());
} }
block = cavernLayers.hasIndex(lastCavernHeight - k) ? cavernLayers.get(lastCavernHeight - k) : cavernLayers.get(0); block = cavernLayers.hasIndex(lastCavernHeight - k) ? cavernLayers.get(lastCavernHeight - k) : cavernLayers.get(0);
@@ -251,7 +251,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
// Set Surface Material for true surface // Set Surface Material for true surface
else else
{ {
block = layers.hasIndex(depth) ? layers.get(depth) : getDimension().getRockPalette().get(rockRandom, wx, k, wz); block = layers.hasIndex(depth) ? layers.get(depth) : getDimension().getRockPalette().get(rockRandom, wx, k, wz, getData());
depth++; depth++;
} }
@@ -300,8 +300,8 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
} }
} }
KList<BlockData> floor = caveBiome.generateLayers(wx, wz, rockRandom, i.getFloor() - 2, i.getFloor() - 2); KList<BlockData> floor = caveBiome.generateLayers(wx, wz, rockRandom, i.getFloor() - 2, i.getFloor() - 2, getData());
KList<BlockData> ceiling = caveBiome.generateLayers(wx + 256, wz + 256, rockRandom, (carvable ? getCarvedWaterHeight(rx, rz) : height) - i.getCeiling() - 2, (carvable ? getCarvedWaterHeight(rx, rz) : height) - i.getCeiling() - 2); KList<BlockData> ceiling = caveBiome.generateLayers(wx + 256, wz + 256, rockRandom, (carvable ? getCarvedWaterHeight(rx, rz) : height) - i.getCeiling() - 2, (carvable ? getCarvedWaterHeight(rx, rz) : height) - i.getCeiling() - 2, getData());
BlockData blockc = null; BlockData blockc = null;
for(int j = 0; j < floor.size(); j++) for(int j = 0; j < floor.size(); j++)
{ {
@@ -361,7 +361,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
continue; continue;
} }
BlockData d = i.getBlockData(biome, rng.nextParallelRNG((int) (38888 + biome.getRarity() + biome.getName().length() + j++)), rx, rz); BlockData d = i.getBlockData(biome, rng.nextParallelRNG((int) (38888 + biome.getRarity() + biome.getName().length() + j++)), rx, rz, getData());
if(d != null) if(d != null)
{ {
@@ -398,7 +398,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
else else
{ {
int stack = i.getHeight(rng.nextParallelRNG((int) (39456 + (10000 * i.getChance()) + i.getStackMax() + i.getStackMin() + i.getZoom())), rx, rz); int stack = i.getHeight(rng.nextParallelRNG((int) (39456 + (10000 * i.getChance()) + i.getStackMax() + i.getStackMin() + i.getZoom())), rx, rz, getData());
if(stack == 1) if(stack == 1)
{ {
@@ -430,7 +430,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
for(IrisBiomeDecorator i : biome.getDecorators()) for(IrisBiomeDecorator i : biome.getDecorators())
{ {
BlockData d = i.getBlockData(biome, rng.nextParallelRNG(2333877 + biome.getRarity() + biome.getName().length() + +j++), rx, rz); BlockData d = i.getBlockData(biome, rng.nextParallelRNG(2333877 + biome.getRarity() + biome.getName().length() + +j++), rx, rz, getData());
if(d != null) if(d != null)
{ {
@@ -459,7 +459,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
else else
{ {
int stack = i.getHeight(rng.nextParallelRNG((int) (39456 + (1000 * i.getChance()) + i.getZoom() * 10)), rx, rz); int stack = i.getHeight(rng.nextParallelRNG((int) (39456 + (1000 * i.getChance()) + i.getZoom() * 10)), rx, rz, getData());
if(stack == 1) if(stack == 1)
{ {
@@ -501,11 +501,11 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
continue; continue;
} }
BlockData d = i.getBlockData(biome, getMasterRandom().nextParallelRNG(2555 + biome.getRarity() + biome.getName().length() + j++), rx, rz); BlockData d = i.getBlockData(biome, getMasterRandom().nextParallelRNG(2555 + biome.getRarity() + biome.getName().length() + j++), rx, rz, getData());
if(d != null) if(d != null)
{ {
int stack = i.getHeight(random.nextParallelRNG((int) (239456 + i.getStackMax() + i.getStackMin() + i.getVerticalZoom() + i.getZoom() + i.getBlockData().size() + j)), rx, rz); int stack = i.getHeight(random.nextParallelRNG((int) (239456 + i.getStackMax() + i.getStackMin() + i.getVerticalZoom() + i.getZoom() + i.getBlockData(getData()).size() + j)), rx, rz, getData());
if(stack == 1) if(stack == 1)
{ {

View File

@@ -29,10 +29,8 @@ public class GenLayerCave extends GenLayer
public GenLayerCave(TopographicTerrainProvider iris, RNG rng) public GenLayerCave(TopographicTerrainProvider iris, RNG rng)
{ {
// @NoArgsConstructor
super(iris, rng); super(iris, rng);
gg = new FastNoiseDouble(324895 * rng.nextParallelRNG(49678).imax()); gg = new FastNoiseDouble(324895 * rng.nextParallelRNG(49678).imax());
//@done
} }
public KList<CaveResult> genCaves(double wxx, double wzz, int x, int z, AtomicSliver data) public KList<CaveResult> genCaves(double wxx, double wzz, int x, int z, AtomicSliver data)
@@ -61,19 +59,19 @@ public class GenLayerCave extends GenLayer
double scale = layer.getCaveZoom(); double scale = layer.getCaveZoom();
Function<Integer, BlockData> fluid = (height) -> Function<Integer, BlockData> fluid = (height) ->
{ {
if(!layer.getFluid().hasFluid()) if(!layer.getFluid().hasFluid(iris.getData()))
{ {
return CAVE_AIR; return CAVE_AIR;
} }
if(layer.getFluid().isInverseHeight() && height >= layer.getFluid().getFluidHeight()) if(layer.getFluid().isInverseHeight() && height >= layer.getFluid().getFluidHeight())
{ {
return layer.getFluid().getFluid(); return layer.getFluid().getFluid(iris.getData());
} }
else if(!layer.getFluid().isInverseHeight() && height <= layer.getFluid().getFluidHeight()) else if(!layer.getFluid().isInverseHeight() && height <= layer.getFluid().getFluidHeight())
{ {
return layer.getFluid().getFluid(); return layer.getFluid().getFluid(iris.getData());
} }
return CAVE_AIR; return CAVE_AIR;

View File

@@ -76,7 +76,7 @@ public class GenLayerText extends GenLayer
{ {
if(bufferedImage.getRGB(x, y) != -16777216) if(bufferedImage.getRGB(x, y) != -16777216)
{ {
o.setUnsigned(x, 0, y, palette.get(rng, x, w, y)); o.setUnsigned(x, 0, y, palette.get(rng, x, w, y, iris.getData()));
} }
} }
} }

View File

@@ -106,7 +106,7 @@ public class NMSCreator141
} }
DimensionManager actualDimension = DimensionManager.a((int) creator.environment().getId()); DimensionManager actualDimension = DimensionManager.a((int) creator.environment().getId());
DimensionManager internalDimension = DimensionManager.register((String) name.toLowerCase(Locale.ENGLISH), (DimensionManager) new DimensionManager(dimension, actualDimension.getSuffix(), actualDimension.folder, (w, manager) -> (WorldProvider) manager.providerFactory.apply(w, manager), actualDimension.hasSkyLight(), actualDimension)); DimensionManager internalDimension = DimensionManager.register((String) name.toLowerCase(Locale.ENGLISH), (DimensionManager) new DimensionManager(dimension, actualDimension.getSuffix(), actualDimension.folder, (w, manager) -> (WorldProvider) manager.providerFactory.apply(w, manager), actualDimension.hasSkyLight(), actualDimension));
//@NoArgsConstructor //@builder
WorldServer internal = new WorldServer( WorldServer internal = new WorldServer(
(MinecraftServer)console, (MinecraftServer)console,
console.executorService, console.executorService,

View File

@@ -106,7 +106,7 @@ public class NMSCreator151
} }
DimensionManager actualDimension = DimensionManager.a((int) creator.environment().getId()); DimensionManager actualDimension = DimensionManager.a((int) creator.environment().getId());
DimensionManager internalDimension = DimensionManager.register((String) name.toLowerCase(Locale.ENGLISH), (DimensionManager) new DimensionManager(dimension, actualDimension.getSuffix(), actualDimension.folder, (w, manager) -> (WorldProvider) manager.providerFactory.apply(w, manager), actualDimension.hasSkyLight(), actualDimension.getGenLayerZoomer(), actualDimension)); DimensionManager internalDimension = DimensionManager.register((String) name.toLowerCase(Locale.ENGLISH), (DimensionManager) new DimensionManager(dimension, actualDimension.getSuffix(), actualDimension.folder, (w, manager) -> (WorldProvider) manager.providerFactory.apply(w, manager), actualDimension.hasSkyLight(), actualDimension.getGenLayerZoomer(), actualDimension));
//@NoArgsConstructor //@builder
WorldServer internal = new WorldServer( WorldServer internal = new WorldServer(
(MinecraftServer)console, (MinecraftServer)console,
console.executorService, console.executorService,

View File

@@ -165,7 +165,7 @@ public class NMSCreator161
ResourceKey typeKey = (ResourceKey) console.f.a().c(dimensionmanager).orElseThrow(() -> new IllegalStateException("Unregistered dimension type: " + (Object) dimensionmanager)); ResourceKey typeKey = (ResourceKey) console.f.a().c(dimensionmanager).orElseThrow(() -> new IllegalStateException("Unregistered dimension type: " + (Object) dimensionmanager));
ResourceKey worldKey = ResourceKey.a((ResourceKey) IRegistry.ae, (MinecraftKey) new MinecraftKey(name.toLowerCase(Locale.ENGLISH))); ResourceKey worldKey = ResourceKey.a((ResourceKey) IRegistry.ae, (MinecraftKey) new MinecraftKey(name.toLowerCase(Locale.ENGLISH)));
//@NoArgsConstructor //@builder
WorldServer internal = new WorldServer( WorldServer internal = new WorldServer(
(MinecraftServer)console, (MinecraftServer)console,
console.executorService, console.executorService,

View File

@@ -160,7 +160,7 @@ public class NMSCreator162
} }
final ResourceKey<net.minecraft.server.v1_16_R2.World> worldKey = (ResourceKey<net.minecraft.server.v1_16_R2.World>) ResourceKey.a(IRegistry.L, new MinecraftKey(name.toLowerCase(Locale.ENGLISH))); final ResourceKey<net.minecraft.server.v1_16_R2.World> worldKey = (ResourceKey<net.minecraft.server.v1_16_R2.World>) ResourceKey.a(IRegistry.L, new MinecraftKey(name.toLowerCase(Locale.ENGLISH)));
//@NoArgsConstructor //@builder
final WorldServer internal = new WorldServer((MinecraftServer) console, final WorldServer internal = new WorldServer((MinecraftServer) console,
console.executorService, worldSession, console.executorService, worldSession,
(IWorldDataServer) worlddata, (IWorldDataServer) worlddata,

View File

@@ -138,7 +138,7 @@ public class PostMasterPatcher extends IrisPostBlockFilter
for(int i = h; i > h - max; i--) for(int i = h; i > h - max; i--)
{ {
BlockData d = biome.getWall().get(rng, x + i, i + h, z + i); BlockData d = biome.getWall().get(rng, x + i, i + h, z + i, gen.getData());
if(d != null) if(d != null)
{ {
@@ -163,14 +163,14 @@ public class PostMasterPatcher extends IrisPostBlockFilter
// Slab // Slab
if(gen.getDimension().isPostProcessingSlabs()) if(gen.getDimension().isPostProcessingSlabs())
{ {
//@NoArgsConstructor //@builder
if((ha == h + 1 && isSolidNonSlab(x + 1, ha, z, currentPostX, currentPostZ, currentData)) if((ha == h + 1 && isSolidNonSlab(x + 1, ha, z, currentPostX, currentPostZ, currentData))
|| (hb == h + 1 && isSolidNonSlab(x, hb, z + 1, currentPostX, currentPostZ, currentData)) || (hb == h + 1 && isSolidNonSlab(x, hb, z + 1, currentPostX, currentPostZ, currentData))
|| (hc == h + 1 && isSolidNonSlab(x - 1, hc, z, currentPostX, currentPostZ, currentData)) || (hc == h + 1 && isSolidNonSlab(x - 1, hc, z, currentPostX, currentPostZ, currentData))
|| (hd == h + 1 && isSolidNonSlab(x, hd, z - 1, currentPostX, currentPostZ, currentData))) || (hd == h + 1 && isSolidNonSlab(x, hd, z - 1, currentPostX, currentPostZ, currentData)))
//@done //@done
{ {
BlockData d = biome.getSlab().get(rng, x, h, z); BlockData d = biome.getSlab().get(rng, x, h, z, gen.getData());
if(d != null) if(d != null)
{ {
@@ -323,14 +323,14 @@ public class PostMasterPatcher extends IrisPostBlockFilter
if(gen.getDimension().isPostProcessingSlabs()) if(gen.getDimension().isPostProcessingSlabs())
{ {
//@NoArgsConstructor //@builder
if((fa == f + 1 && isSolidNonSlab(x + 1, fa, z, currentPostX, currentPostZ, currentData)) if((fa == f + 1 && isSolidNonSlab(x + 1, fa, z, currentPostX, currentPostZ, currentData))
|| (fb == f + 1 && isSolidNonSlab(x, fb, z + 1, currentPostX, currentPostZ, currentData)) || (fb == f + 1 && isSolidNonSlab(x, fb, z + 1, currentPostX, currentPostZ, currentData))
|| (fc == f + 1 && isSolidNonSlab(x - 1, fc, z, currentPostX, currentPostZ, currentData)) || (fc == f + 1 && isSolidNonSlab(x - 1, fc, z, currentPostX, currentPostZ, currentData))
|| (fd == f + 1 && isSolidNonSlab(x, fd, z - 1, currentPostX, currentPostZ, currentData))) || (fd == f + 1 && isSolidNonSlab(x, fd, z - 1, currentPostX, currentPostZ, currentData)))
//@done //@done
{ {
BlockData d = cave.getSlab().get(rng, x, f, z); BlockData d = cave.getSlab().get(rng, x, f, z, gen.getData());
if(d != null) if(d != null)
{ {
@@ -358,14 +358,14 @@ public class PostMasterPatcher extends IrisPostBlockFilter
} }
} }
//@NoArgsConstructor //@builder
if((ca == c - 1 && isSolidNonSlab(x + 1, ca, z, currentPostX, currentPostZ, currentData)) if((ca == c - 1 && isSolidNonSlab(x + 1, ca, z, currentPostX, currentPostZ, currentData))
|| (cb == c - 1 && isSolidNonSlab(x, cb, z + 1, currentPostX, currentPostZ, currentData)) || (cb == c - 1 && isSolidNonSlab(x, cb, z + 1, currentPostX, currentPostZ, currentData))
|| (cc == c - 1 && isSolidNonSlab(x - 1, cc, z, currentPostX, currentPostZ, currentData)) || (cc == c - 1 && isSolidNonSlab(x - 1, cc, z, currentPostX, currentPostZ, currentData))
|| (cd == c - 1 && isSolidNonSlab(x, cd, z - 1, currentPostX, currentPostZ, currentData))) || (cd == c - 1 && isSolidNonSlab(x, cd, z - 1, currentPostX, currentPostZ, currentData)))
//@done //@done
{ {
BlockData d = cave.getSlab().get(rng, x, c, z); BlockData d = cave.getSlab().get(rng, x, c, z, gen.getData());
if(d != null) if(d != null)
{ {

View File

@@ -39,7 +39,7 @@ public class IrisBoardManager implements BoardProvider, Listener
public IrisBoardManager() public IrisBoardManager()
{ {
Iris.instance.registerListener(this); Iris.instance.registerListener(this);
//@NoArgsConstructor //@builder
manager = new BoardManager(Iris.instance, BoardSettings.builder() manager = new BoardManager(Iris.instance, BoardSettings.builder()
.boardProvider(this) .boardProvider(this)
.scoreDirection(ScoreDirection.DOWN) .scoreDirection(ScoreDirection.DOWN)

View File

@@ -8,6 +8,7 @@ import org.bukkit.block.Biome;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisBiomeDecorator; import com.volmit.iris.object.IrisBiomeDecorator;
import com.volmit.iris.object.IrisBlockData;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisEntity; import com.volmit.iris.object.IrisEntity;
import com.volmit.iris.object.IrisGenerator; import com.volmit.iris.object.IrisGenerator;
@@ -36,6 +37,7 @@ public class IrisDataManager
private ResourceLoader<IrisGenerator> generatorLoader; private ResourceLoader<IrisGenerator> generatorLoader;
private ResourceLoader<IrisStructure> structureLoader; private ResourceLoader<IrisStructure> structureLoader;
private ResourceLoader<IrisEntity> entityLoader; private ResourceLoader<IrisEntity> entityLoader;
private ResourceLoader<IrisBlockData> blockLoader;
private ObjectResourceLoader objectLoader; private ObjectResourceLoader objectLoader;
public void hotloaded() public void hotloaded()
@@ -54,6 +56,7 @@ public class IrisDataManager
this.dimensionLoader = new ResourceLoader<>(packs, "dimensions", "Dimension", IrisDimension.class); this.dimensionLoader = new ResourceLoader<>(packs, "dimensions", "Dimension", IrisDimension.class);
this.structureLoader = new ResourceLoader<>(packs, "structures", "Structure", IrisStructure.class); this.structureLoader = new ResourceLoader<>(packs, "structures", "Structure", IrisStructure.class);
this.generatorLoader = new ResourceLoader<>(packs, "generators", "Generator", IrisGenerator.class); this.generatorLoader = new ResourceLoader<>(packs, "generators", "Generator", IrisGenerator.class);
this.blockLoader = new ResourceLoader<>(packs, "blocks", "Block", IrisBlockData.class);
this.objectLoader = new ObjectResourceLoader(packs, "objects", "Object"); this.objectLoader = new ObjectResourceLoader(packs, "objects", "Object");
if(packs.getName().equals("packs")) if(packs.getName().equals("packs"))
@@ -83,6 +86,7 @@ public class IrisDataManager
public void dump() public void dump()
{ {
biomeLoader.clearCache(); biomeLoader.clearCache();
blockLoader.clearCache();
lootLoader.clearCache(); lootLoader.clearCache();
regionLoader.clearCache(); regionLoader.clearCache();
dimensionLoader.clearCache(); dimensionLoader.clearCache();
@@ -168,6 +172,7 @@ public class IrisDataManager
public void preferFolder(String name) public void preferFolder(String name)
{ {
biomeLoader.preferFolder(name); biomeLoader.preferFolder(name);
blockLoader.preferFolder(name);
lootLoader.preferFolder(name); lootLoader.preferFolder(name);
regionLoader.preferFolder(name); regionLoader.preferFolder(name);
entityLoader.preferFolder(name); entityLoader.preferFolder(name);
@@ -179,6 +184,7 @@ public class IrisDataManager
public void clearLists() public void clearLists()
{ {
lootLoader.clearList(); lootLoader.clearList();
blockLoader.clearList();
entityLoader.clearList(); entityLoader.clearList();
biomeLoader.clearList(); biomeLoader.clearList();
regionLoader.clearList(); regionLoader.clearList();

View File

@@ -1,7 +1,6 @@
package com.volmit.iris.manager; package com.volmit.iris.manager;
import java.awt.Desktop; import java.awt.Desktop;
import java.awt.GraphicsEnvironment;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.IOException; import java.io.IOException;
@@ -19,7 +18,6 @@ import org.bukkit.World.Environment;
import org.bukkit.WorldCreator; import org.bukkit.WorldCreator;
import org.bukkit.WorldType; import org.bukkit.WorldType;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.zeroturnaround.zip.ZipUtil; import org.zeroturnaround.zip.ZipUtil;
import org.zeroturnaround.zip.commons.FileUtils; import org.zeroturnaround.zip.commons.FileUtils;
@@ -38,6 +36,7 @@ import com.volmit.iris.object.InterpolationMethod;
import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisBiomeGeneratorLink; import com.volmit.iris.object.IrisBiomeGeneratorLink;
import com.volmit.iris.object.IrisBiomeMutation; import com.volmit.iris.object.IrisBiomeMutation;
import com.volmit.iris.object.IrisBlockData;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisEntity; import com.volmit.iris.object.IrisEntity;
import com.volmit.iris.object.IrisGenerator; import com.volmit.iris.object.IrisGenerator;
@@ -50,12 +49,8 @@ import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.object.IrisStructureTile; import com.volmit.iris.object.IrisStructureTile;
import com.volmit.iris.object.NoiseStyle; import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.object.StructureTileCondition; import com.volmit.iris.object.StructureTileCondition;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
import com.volmit.iris.util.C; import com.volmit.iris.util.C;
import com.volmit.iris.util.ChronoLatch; import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.DependsOn;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.Form; import com.volmit.iris.util.Form;
import com.volmit.iris.util.IO; import com.volmit.iris.util.IO;
import com.volmit.iris.util.J; import com.volmit.iris.util.J;
@@ -66,23 +61,9 @@ import com.volmit.iris.util.KList;
import com.volmit.iris.util.KMap; import com.volmit.iris.util.KMap;
import com.volmit.iris.util.KSet; import com.volmit.iris.util.KSet;
import com.volmit.iris.util.M; import com.volmit.iris.util.M;
import com.volmit.iris.util.MaxNumber;
import com.volmit.iris.util.MinNumber;
import com.volmit.iris.util.MortarSender; import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.O; import com.volmit.iris.util.O;
import com.volmit.iris.util.PrecisionStopwatch; import com.volmit.iris.util.PrecisionStopwatch;
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.RegistryListObject;
import com.volmit.iris.util.RegistryListRegion;
import com.volmit.iris.util.RegistryListStructure;
import com.volmit.iris.util.Required;
import com.volmit.iris.util.TaskExecutor; import com.volmit.iris.util.TaskExecutor;
import com.volmit.iris.util.TaskExecutor.TaskGroup; import com.volmit.iris.util.TaskExecutor.TaskGroup;
@@ -432,6 +413,15 @@ public class ProjectManager
KSet<IrisStructure> structures = 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<>();
Iris.globaldata.preferFolder(dim);
for(String i : Iris.globaldata.getBlockLoader().getPreferredKeys())
{
blocks.add(Iris.globaldata.getBlockLoader().load(i));
}
Iris.globaldata.preferFolder(null);
dimension.getRegions().forEach((i) -> regions.add(Iris.globaldata.getRegionLoader().load(i))); dimension.getRegions().forEach((i) -> regions.add(Iris.globaldata.getRegionLoader().load(i)));
dimension.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.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)));
@@ -637,6 +627,13 @@ public class ProjectManager
b.append(IO.hash(a)); b.append(IO.hash(a));
} }
for(IrisBlockData i : blocks)
{
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
IO.writeAll(new File(folder, "blocks/" + i.getLoadKey() + ".json"), a);
b.append(IO.hash(a));
}
for(IrisStructure i : structures) for(IrisStructure i : structures)
{ {
a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4); a = new JSONObject(new Gson().toJson(i)).toString(minify ? 0 : 4);
@@ -1015,6 +1012,7 @@ public class ProjectManager
g.queue(() -> ex(schemas, IrisRegion.class, dat, "/regions/*.json", pack)); g.queue(() -> ex(schemas, IrisRegion.class, dat, "/regions/*.json", pack));
g.queue(() -> ex(schemas, IrisGenerator.class, dat, "/generators/*.json", pack)); g.queue(() -> ex(schemas, IrisGenerator.class, dat, "/generators/*.json", pack));
g.queue(() -> ex(schemas, IrisStructure.class, dat, "/structures/*.json", pack)); g.queue(() -> ex(schemas, IrisStructure.class, dat, "/structures/*.json", pack));
g.queue(() -> ex(schemas, IrisBlockData.class, dat, "/blocks/*.json", pack));
g.queue(() -> ex(schemas, IrisLootTable.class, dat, "/loot/*.json", pack)); g.queue(() -> ex(schemas, IrisLootTable.class, dat, "/loot/*.json", pack));
g.execute(); g.execute();
dat.preferFolder(gg); dat.preferFolder(gg);
@@ -1032,719 +1030,6 @@ public class ProjectManager
return o; return o;
} }
public JSONObject getSchemaFor(Class<?> i, IrisDataManager dat)
{
Iris.verbose("Processing " + i.getSimpleName());
KMap<String, JSONObject> def = new KMap<>();
JSONObject s = getSchemaFor(i, 7, def, dat);
JSONObject defx = new JSONObject();
for(String v : def.k())
{
defx.put(v, def.get(v));
}
s.put("definitions", defx);
return s;
}
public JSONObject getSchemaFor(Class<?> i, int step, KMap<String, JSONObject> def, IrisDataManager dat)
{
Object dummy = tryCreate(i);
if(step <= 0)
{
JSONObject m = new JSONObject();
m.put("properties", new JSONObject());
return m;
}
JSONObject schema = new JSONObject();
if(i.isAnnotationPresent(Desc.class))
{
schema.put("$schema", "http://json-schema.org/draft-07/schema#");
schema.put("$id", "http://volmit.com/iris-schema/" + i.getSimpleName().toLowerCase() + ".json");
schema.put("title", i.getSimpleName().replaceAll("\\QIris\\E", ""));
schema.put("type", "object");
Desc d = i.getAnnotation(Desc.class);
String dsc = i.getSimpleName().replaceAll("\\QIris\\E", "") + "\n\n" + d.value();
schema.put("description", dsc);
JSONObject properties = new JSONObject();
JSONArray req = new JSONArray();
JSONObject deps = new JSONObject();
for(java.lang.reflect.Field k : i.getDeclaredFields())
{
k.setAccessible(true);
JSONObject prop = new JSONObject();
if(k.isAnnotationPresent(Desc.class))
{
if(k.isAnnotationPresent(DependsOn.class))
{
deps.put(k.getName(), new JSONArray(k.getDeclaredAnnotation(DependsOn.class).value()));
}
String tp = "object";
if(k.getType().equals(int.class) || k.getType().equals(long.class))
{
tp = "integer";
if(k.isAnnotationPresent(MinNumber.class))
{
prop.put("minimum", (int) k.getDeclaredAnnotation(MinNumber.class).value());
}
if(k.isAnnotationPresent(MaxNumber.class))
{
prop.put("maximum", (int) k.getDeclaredAnnotation(MaxNumber.class).value());
}
}
if(k.getType().equals(double.class) || k.getType().equals(float.class))
{
tp = "number";
if(k.isAnnotationPresent(MinNumber.class))
{
prop.put("minimum", k.getDeclaredAnnotation(MinNumber.class).value());
}
if(k.isAnnotationPresent(MaxNumber.class))
{
prop.put("maximum", k.getDeclaredAnnotation(MaxNumber.class).value());
}
}
if(k.getType().equals(boolean.class))
{
tp = "boolean";
}
if(k.getType().equals(String.class))
{
tp = "string";
if(k.isAnnotationPresent(MinNumber.class))
{
prop.put("minLength", (int) k.getDeclaredAnnotation(MinNumber.class).value());
}
if(k.isAnnotationPresent(MaxNumber.class))
{
prop.put("maxLength", (int) k.getDeclaredAnnotation(MaxNumber.class).value());
}
if(k.isAnnotationPresent(RegistryListBiome.class))
{
prop.put("enum", new JSONArray(getBiomeList(dat)));
}
if(k.isAnnotationPresent(RegistryListBlockType.class))
{
prop.put("enum", new JSONArray(getBlockTypeList(dat)));
}
if(k.isAnnotationPresent(RegistryListItemType.class))
{
prop.put("enum", new JSONArray(getItemTypeList(dat)));
}
if(k.isAnnotationPresent(RegistryListEntity.class))
{
prop.put("enum", new JSONArray(getEntityList(dat)));
}
if(k.isAnnotationPresent(RegistryListFont.class))
{
prop.put("enum", new JSONArray(getFontList()));
}
if(k.isAnnotationPresent(RegistryListLoot.class))
{
prop.put("enum", new JSONArray(getLootList(dat)));
}
if(k.isAnnotationPresent(RegistryListDimension.class))
{
prop.put("enum", new JSONArray(getDimensionList(dat)));
}
if(k.isAnnotationPresent(RegistryListGenerator.class))
{
prop.put("enum", new JSONArray(getGeneratorList(dat)));
}
if(k.isAnnotationPresent(RegistryListObject.class))
{
prop.put("enum", new JSONArray(getObjectList(dat)));
}
if(k.isAnnotationPresent(RegistryListRegion.class))
{
prop.put("enum", new JSONArray(getRegionList(dat)));
}
if(k.isAnnotationPresent(RegistryListStructure.class))
{
prop.put("enum", new JSONArray(getStructureList(dat)));
}
}
if(k.getType().isEnum())
{
tp = "string";
JSONArray a = new JSONArray();
for(Object gg : k.getType().getEnumConstants())
{
a.put(((Enum<?>) gg).name());
}
prop.put("enum", a);
}
if(k.getType().equals(String.class) && k.getName().equals("potionEffect"))
{
tp = "string";
JSONArray a = new JSONArray();
for(PotionEffectType gg : PotionEffectType.values())
{
a.put(gg.getName().toUpperCase().replaceAll("\\Q \\E", "_"));
}
prop.put("enum", a);
}
if(k.getType().equals(String.class) && k.getName().equals("enchantment"))
{
tp = "string";
JSONArray a = new JSONArray();
for(Field gg : Enchantment.class.getDeclaredFields())
{
a.put(gg.getName());
}
prop.put("enum", a);
}
if(k.getType().equals(KList.class))
{
tp = "array";
}
if(k.isAnnotationPresent(Required.class))
{
req.put(k.getName());
}
if(tp.equals("object"))
{
if(k.getType().isAnnotationPresent(Desc.class))
{
prop.put("additionalProperties", false);
prop.put("properties", getSchemaFor(k.getType(), step - 1, def, Iris.globaldata).getJSONObject("properties"));
}
}
if(tp.equals("array"))
{
ArrayType t = k.getDeclaredAnnotation(ArrayType.class);
if(t == null)
{
Iris.warn("Expected " + ArrayType.class.getSimpleName() + " in " + k.getName() + " in " + i.getSimpleName());
}
if(t.min() > 0)
{
prop.put("minItems", t.min());
}
if(t != null)
{
String tx = "object";
if(t.type().equals(int.class) || k.getType().equals(long.class))
{
tx = "integer";
}
if(t.type().equals(double.class) || k.getType().equals(float.class))
{
tx = "number";
}
if(t.type().equals(boolean.class))
{
tx = "boolean";
}
if(t.type().equals(String.class))
{
tx = "string";
if(k.isAnnotationPresent(MinNumber.class))
{
prop.put("minLength", (int) k.getDeclaredAnnotation(MinNumber.class).value());
}
if(k.isAnnotationPresent(MaxNumber.class))
{
prop.put("maxLength", (int) k.getDeclaredAnnotation(MaxNumber.class).value());
}
if(k.isAnnotationPresent(RegistryListBiome.class))
{
String name = "enbiom" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getBiomeList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListBlockType.class))
{
String name = "enblk" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getBlockTypeList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListItemType.class))
{
String name = "enitmty" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getItemTypeList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListEntity.class))
{
String name = "enent" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getEntityList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListFont.class))
{
String name = "enfong" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getFontList()));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListLoot.class))
{
String name = "enloot" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getLootList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListDimension.class))
{
String name = "endim" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getDimensionList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListGenerator.class))
{
String name = "engen" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getGeneratorList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListObject.class))
{
String name = "enobj" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getObjectList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListRegion.class))
{
String name = "enreg" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getRegionList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(k.isAnnotationPresent(RegistryListStructure.class))
{
String name = "enstruct" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", new JSONArray(getStructureList(dat)));
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
}
if(t.type().isEnum())
{
tx = "string";
JSONArray a = new JSONArray();
for(Object gg : t.type().getEnumConstants())
{
a.put(((Enum<?>) gg).name());
}
String name = "enum" + t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
deff.put("type", tx);
deff.put("enum", a);
def.put(name, deff);
}
JSONObject items = new JSONObject();
items.put("$ref", "#/definitions/" + name);
prop.put("items", items);
prop.put("description", tp + "\n\n" + k.getAnnotation(Desc.class).value());
prop.put("type", tp);
properties.put(k.getName(), prop);
continue;
}
if(t.type().isEnum())
{
tx = "string";
}
if(t.type().equals(KList.class))
{
tx = "array";
}
JSONObject items = new JSONObject();
if(tx.equals("object"))
{
if(t.type().isAnnotationPresent(Desc.class))
{
String name = t.type().getSimpleName().toLowerCase();
if(!def.containsKey(name))
{
JSONObject deff = new JSONObject();
JSONObject scv = getSchemaFor(t.type(), step - 1, def, Iris.globaldata);
deff.put("type", tx);
deff.put("description", tx + "\n\n" + t.type().getDeclaredAnnotation(Desc.class).value());
deff.put("additionalProperties", false);
deff.put("properties", scv.getJSONObject("properties"));
if(deff.getJSONObject("properties").length() == 0)
{
Iris.warn("Schema Def for " + name + " has " + deff.getJSONObject("properties").length() + " Entries" + " (Step " + step + ")");
}
if(scv.has("required"))
{
deff.put("required", scv.getJSONArray("required"));
}
def.put(name, deff);
}
items.put("$ref", "#/definitions/" + name);
}
else
{
items.put("type", tx);
}
}
else
{
items.put("type", tx);
}
prop.put("items", items);
}
if(tp.getClass().isAnnotationPresent(Desc.class))
{
prop.put("properties", getSchemaFor(tp.getClass(), step - 1, def, Iris.globaldata).getJSONObject("properties"));
}
}
String tpx = tp;
if(tp.equals("array") || tp.equals("enum"))
{
tpx = "List of " + k.getDeclaredAnnotation(ArrayType.class).type().getSimpleName().replaceAll("\\QIris\\E", "") + "s";
}
prop.put("description", tpx + "\n\n" + k.getAnnotation(Desc.class).value());
if(tp.equals("integer"))
{
if(k.isAnnotationPresent(MinNumber.class))
{
prop.put("description", prop.getString("description") + "\n" + "Min: " + (int) k.getDeclaredAnnotation(MinNumber.class).value());
}
if(k.isAnnotationPresent(MaxNumber.class))
{
prop.put("description", prop.getString("description") + "\n" + "Max: " + (int) k.getDeclaredAnnotation(MaxNumber.class).value());
}
}
if(tp.equals("number"))
{
if(k.isAnnotationPresent(MinNumber.class))
{
prop.put("description", prop.getString("description") + "\n" + "Min: " + k.getDeclaredAnnotation(MinNumber.class).value());
}
if(k.isAnnotationPresent(MaxNumber.class))
{
prop.put("description", prop.getString("description") + "\n" + "Max: " + k.getDeclaredAnnotation(MaxNumber.class).value());
}
}
if(!tp.equals("array") && !tp.equals("object") && !tp.equals("enum"))
{
if(dummy != null)
{
try
{
prop.put("description", prop.getString("description") + "\n" + "Default Value: " + k.get(dummy));
}
catch(Throwable e)
{
prop.put("description", prop.getString("description") + "\n" + "Default Value: NONE");
}
}
}
prop.put("type", tp);
properties.put(k.getName(), prop);
}
}
schema.put("additionalProperties", false);
schema.put("properties", properties);
schema.put("required", req);
schema.put("dependencies", deps);
}
return schema;
}
private Object tryCreate(Class<?> i)
{
try
{
return i.newInstance();
}
catch(Throwable e)
{
}
return null;
}
private String[] getFontList()
{
return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
}
private String[] getBiomeList(IrisDataManager data)
{
return data.getBiomeLoader().getPossibleKeys();
}
private String[] getBlockTypeList(IrisDataManager data)
{
return B.getBlockTypes();
}
private String[] getItemTypeList(IrisDataManager data)
{
return B.getItemTypes();
}
private String[] getEntityList(IrisDataManager data)
{
return data.getEntityLoader().getPossibleKeys();
}
private String[] getLootList(IrisDataManager data)
{
return data.getLootLoader().getPossibleKeys();
}
private String[] getDimensionList(IrisDataManager data)
{
return data.getDimensionLoader().getPossibleKeys();
}
private String[] getRegionList(IrisDataManager data)
{
return data.getRegionLoader().getPossibleKeys();
}
private String[] getObjectList(IrisDataManager data)
{
return data.getObjectLoader().getPossibleKeys();
}
private String[] getStructureList(IrisDataManager data)
{
return data.getStructureLoader().getPossibleKeys();
}
private String[] getGeneratorList(IrisDataManager data)
{
return data.getGeneratorLoader().getPossibleKeys();
}
public KList<String> analyzeFolder(File folder, String fn, Object t) public KList<String> analyzeFolder(File folder, String fn, Object t)
{ {
KList<String> a = new KList<String>(); KList<String> a = new KList<String>();

View File

@@ -37,7 +37,6 @@ public class SchemaBuilder
private static final String SYMBOL_TYPE__N = ""; private static final String SYMBOL_TYPE__N = "";
private static final JSONArray POTION_TYPES = getPotionTypes(); private static final JSONArray POTION_TYPES = getPotionTypes();
private static final JSONArray ENCHANT_TYPES = getEnchantmentTypes(); private static final JSONArray ENCHANT_TYPES = getEnchantmentTypes();
private static final JSONArray BLOCK_TYPES = new JSONArray(B.getBlockTypes());
private static final JSONArray ITEM_TYPES = new JSONArray(B.getItemTypes()); private static final JSONArray ITEM_TYPES = new JSONArray(B.getItemTypes());
private static final JSONArray FONT_TYPES = new JSONArray(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()); private static final JSONArray FONT_TYPES = new JSONArray(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
private final KMap<String, JSONObject> definitions; private final KMap<String, JSONObject> definitions;
@@ -215,7 +214,19 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", BLOCK_TYPES); JSONArray ja = new JSONArray();
for(String i : data.getBlockLoader().getPreferredKeys())
{
ja.put(i);
}
for(String i : B.getBlockTypes())
{
ja.put(i);
}
j.put("enum", ja);
definitions.put(key, j); definitions.put(key, j);
} }
@@ -550,7 +561,19 @@ public class SchemaBuilder
if(!definitions.containsKey(key)) if(!definitions.containsKey(key))
{ {
JSONObject j = new JSONObject(); JSONObject j = new JSONObject();
j.put("enum", BLOCK_TYPES); JSONArray ja = new JSONArray();
for(String i : data.getBlockLoader().getPreferredKeys())
{
ja.put(i);
}
for(String i : B.getBlockTypes())
{
ja.put(i);
}
j.put("enum", ja);
definitions.put(key, j); definitions.put(key, j);
} }

View File

@@ -299,11 +299,11 @@ public class IrisBiome extends IrisRegistrant implements IRare
return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137)).bake().scale(scale).bake()); return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137)).bake().scale(scale).bake());
} }
public KList<BlockData> generateLayers(double wx, double wz, RNG random, int maxDepth, int height) public KList<BlockData> generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisDataManager rdata)
{ {
if(isLockLayers()) if(isLockLayers())
{ {
return generateLockedLayers(wx, wz, random, maxDepth, height); return generateLockedLayers(wx, wz, random, maxDepth, height, rdata);
} }
KList<BlockData> data = new KList<>(); KList<BlockData> data = new KList<>();
@@ -315,7 +315,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(int i = 0; i < layers.size(); i++) for(int i = 0; i < layers.size(); i++)
{ {
CNG hgen = getLayerHeightGenerators(random).get(i); CNG hgen = getLayerHeightGenerators(random, rdata).get(i);
int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom()); int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom());
if(d < 0) if(d < 0)
@@ -332,7 +332,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
try try
{ {
data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom())); data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom(), rdata));
} }
catch(Throwable e) catch(Throwable e)
@@ -350,7 +350,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
return data; return data;
} }
public KList<BlockData> generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height) public KList<BlockData> generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height, IrisDataManager rdata)
{ {
KList<BlockData> data = new KList<>(); KList<BlockData> data = new KList<>();
KList<BlockData> real = new KList<>(); KList<BlockData> real = new KList<>();
@@ -362,7 +362,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(int i = 0; i < layers.size(); i++) for(int i = 0; i < layers.size(); i++)
{ {
CNG hgen = getLayerHeightGenerators(random).get(i); CNG hgen = getLayerHeightGenerators(random, rdata).get(i);
int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom()); int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom());
if(d < 0) if(d < 0)
@@ -374,7 +374,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
{ {
try try
{ {
data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom())); data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom(), rdata));
} }
catch(Throwable e) catch(Throwable e)
@@ -420,13 +420,13 @@ public class IrisBiome extends IrisRegistrant implements IRare
return this; return this;
} }
public KList<BlockData> generateSeaLayers(double wx, double wz, RNG random, int maxDepth) public KList<BlockData> generateSeaLayers(double wx, double wz, RNG random, int maxDepth, IrisDataManager rdata)
{ {
KList<BlockData> data = new KList<>(); KList<BlockData> data = new KList<>();
for(int i = 0; i < seaLayers.size(); i++) for(int i = 0; i < seaLayers.size(); i++)
{ {
CNG hgen = getLayerSeaHeightGenerators(random).get(i); CNG hgen = getLayerSeaHeightGenerators(random, rdata).get(i);
int d = hgen.fit(seaLayers.get(i).getMinHeight(), seaLayers.get(i).getMaxHeight(), wx / seaLayers.get(i).getZoom(), wz / seaLayers.get(i).getZoom()); int d = hgen.fit(seaLayers.get(i).getMinHeight(), seaLayers.get(i).getMaxHeight(), wx / seaLayers.get(i).getZoom(), wz / seaLayers.get(i).getZoom());
if(d < 0) if(d < 0)
@@ -443,7 +443,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
try try
{ {
data.add(getSeaLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / seaLayers.get(i).getZoom(), j, (wz - j) / seaLayers.get(i).getZoom())); data.add(getSeaLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / seaLayers.get(i).getZoom(), j, (wz - j) / seaLayers.get(i).getZoom(), rdata));
} }
catch(Throwable e) catch(Throwable e)
@@ -461,7 +461,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
return data; return data;
} }
public KList<CNG> getLayerHeightGenerators(RNG rng) public KList<CNG> getLayerHeightGenerators(RNG rng, IrisDataManager rdata)
{ {
return layerHeightGenerators.aquire(() -> return layerHeightGenerators.aquire(() ->
{ {
@@ -471,14 +471,14 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(IrisBiomePaletteLayer i : getLayers()) for(IrisBiomePaletteLayer i : getLayers())
{ {
layerHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m))); layerHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m), rdata));
} }
return layerHeightGenerators; return layerHeightGenerators;
}); });
} }
public KList<CNG> getLayerSeaHeightGenerators(RNG rng) public KList<CNG> getLayerSeaHeightGenerators(RNG rng, IrisDataManager data)
{ {
return layerSeaHeightGenerators.aquire(() -> return layerSeaHeightGenerators.aquire(() ->
{ {
@@ -488,7 +488,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(IrisBiomePaletteLayer i : getSeaLayers()) for(IrisBiomePaletteLayer i : getSeaLayers())
{ {
layerSeaHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m))); layerSeaHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m), data));
} }
return layerSeaHeightGenerators; return layerSeaHeightGenerators;

View File

@@ -4,6 +4,7 @@ import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.DependsOn; import com.volmit.iris.util.DependsOn;
@@ -92,32 +93,32 @@ public class IrisBiomeDecorator
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
public int getHeight(RNG rng, double x, double z) public int getHeight(RNG rng, double x, double z, IrisDataManager data)
{ {
if(stackMin == stackMax) if(stackMin == stackMax)
{ {
return stackMin; return stackMin;
} }
return getHeightGenerator(rng).fit(stackMin, stackMax, x / verticalZoom, z / verticalZoom); return getHeightGenerator(rng, data).fit(stackMin, stackMax, x / verticalZoom, z / verticalZoom);
} }
public CNG getHeightGenerator(RNG rng) public CNG getHeightGenerator(RNG rng, IrisDataManager data)
{ {
return heightGenerator.aquire(() -> return heightGenerator.aquire(() ->
{ {
return heightVariance.create(rng.nextParallelRNG(getBlockData().size() + stackMax + stackMin)); return heightVariance.create(rng.nextParallelRNG(getBlockData(data).size() + stackMax + stackMin));
}); });
} }
public CNG getGenerator(RNG rng) public CNG getGenerator(RNG rng, IrisDataManager data)
{ {
return layerGenerator.aquire(() -> style.create(rng.nextParallelRNG((int) (getBlockData().size())))); return layerGenerator.aquire(() -> style.create(rng.nextParallelRNG((int) (getBlockData(data).size()))));
} }
public CNG getVarianceGenerator(RNG rng) public CNG getVarianceGenerator(RNG rng, IrisDataManager data)
{ {
return varianceGenerator.aquire(() -> variance.create(rng.nextParallelRNG((int) (getBlockData().size()))).scale(1D / varianceZoom)); return varianceGenerator.aquire(() -> variance.create(rng.nextParallelRNG((int) (getBlockData(data).size()))).scale(1D / varianceZoom));
} }
public KList<IrisBlockData> add(String b) public KList<IrisBlockData> add(String b)
@@ -126,9 +127,9 @@ public class IrisBiomeDecorator
return palette; return palette;
} }
public BlockData getBlockData(IrisBiome b, RNG rng, double x, double z) public BlockData getBlockData(IrisBiome b, RNG rng, double x, double z, IrisDataManager data)
{ {
if(getBlockData().isEmpty()) if(getBlockData(data).isEmpty())
{ {
Iris.warn("Empty Block Data for " + b.getName()); Iris.warn("Empty Block Data for " + b.getName());
return null; return null;
@@ -137,27 +138,27 @@ public class IrisBiomeDecorator
double xx = x / getZoom(); double xx = x / getZoom();
double zz = z / getZoom(); double zz = z / getZoom();
if(getGenerator(rng).fitDouble(0D, 1D, xx, zz) <= chance) if(getGenerator(rng, data).fitDouble(0D, 1D, xx, zz) <= chance)
{ {
if(getBlockData().size() == 1) if(getBlockData(data).size() == 1)
{ {
return getBlockData().get(0); return getBlockData(data).get(0);
} }
return getVarianceGenerator(rng).fit(getBlockData(), xx, zz); return getVarianceGenerator(rng, data).fit(getBlockData(data), xx, zz);
} }
return null; return null;
} }
public KList<BlockData> getBlockData() public KList<BlockData> getBlockData(IrisDataManager data)
{ {
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(IrisBlockData i : palette) for(IrisBlockData i : palette)
{ {
BlockData bx = i.getBlockData(); BlockData bx = i.getBlockData(data);
if(bx != null) if(bx != null)
{ {
blockData.add(bx); blockData.add(bx);

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.DependsOn; import com.volmit.iris.util.DependsOn;
@@ -59,31 +60,31 @@ public class IrisBiomePaletteLayer
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
public CNG getHeightGenerator(RNG rng) public CNG getHeightGenerator(RNG rng, IrisDataManager data)
{ {
return heightGenerator.aquire(() -> CNG.signature(rng.nextParallelRNG(minHeight * maxHeight + getBlockData().size()))); return heightGenerator.aquire(() -> CNG.signature(rng.nextParallelRNG(minHeight * maxHeight + getBlockData(data).size())));
} }
public BlockData get(RNG rng, double x, double y, double z) public BlockData get(RNG rng, double x, double y, double z, IrisDataManager data)
{ {
if(getBlockData().isEmpty()) if(getBlockData(data).isEmpty())
{ {
return null; return null;
} }
if(getBlockData().size() == 1) if(getBlockData(data).size() == 1)
{ {
return getBlockData().get(0); return getBlockData(data).get(0);
} }
return getLayerGenerator(rng).fit(getBlockData(), x / zoom, y / zoom, z / zoom); return getLayerGenerator(rng, data).fit(getBlockData(data), x / zoom, y / zoom, z / zoom);
} }
public CNG getLayerGenerator(RNG rng) public CNG getLayerGenerator(RNG rng, IrisDataManager data)
{ {
return layerGenerator.aquire(() -> return layerGenerator.aquire(() ->
{ {
RNG rngx = rng.nextParallelRNG(minHeight + maxHeight + getBlockData().size()); RNG rngx = rng.nextParallelRNG(minHeight + maxHeight + getBlockData(data).size());
return style.create(rngx); return style.create(rngx);
}); });
} }
@@ -95,14 +96,14 @@ public class IrisBiomePaletteLayer
return palette; return palette;
} }
public KList<BlockData> getBlockData() public KList<BlockData> getBlockData(IrisDataManager data)
{ {
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(IrisBlockData ix : palette) for(IrisBlockData ix : palette)
{ {
BlockData bx = ix.getBlockData(); BlockData bx = ix.getBlockData(data);
if(bx != null) if(bx != null)
{ {
for(int i = 0; i < ix.getWeight(); i++) for(int i = 0; i < ix.getWeight(); i++)

View File

@@ -2,7 +2,9 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@@ -15,6 +17,7 @@ import com.volmit.iris.util.Required;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -23,7 +26,8 @@ import lombok.experimental.Accessors;
@AllArgsConstructor @AllArgsConstructor
@Desc("Represents Block Data") @Desc("Represents Block Data")
@Data @Data
public class IrisBlockData @EqualsAndHashCode(callSuper = false)
public class IrisBlockData extends IrisRegistrant
{ {
@RegistryListBlockType @RegistryListBlockType
@Required @Required
@@ -31,6 +35,10 @@ public class IrisBlockData
@Desc("The cave zoom. Higher values makes caves spread out further and branch less often, but are thicker.") @Desc("The cave zoom. Higher values makes caves spread out further and branch less often, but are thicker.")
private String block = "air"; private String block = "air";
@Desc("Debug this block by printing it to the console when it's used")
@DontObfuscate
private boolean debug = false;
@DontObfuscate @DontObfuscate
@Desc("The resource key. Typically Minecraft") @Desc("The resource key. Typically Minecraft")
private String key = "minecraft"; private String key = "minecraft";
@@ -57,28 +65,86 @@ public class IrisBlockData
this.block = b; this.block = b;
} }
public String computeProperties() public String computeProperties(KMap<String, Object> data)
{ {
if(getData().isEmpty()) if(data.isEmpty())
{ {
return ""; return "";
} }
KList<String> r = new KList<>(); KList<String> r = new KList<>();
for(String i : getData().keySet()) for(String i : data.keySet())
{ {
r.add(i + "=" + getData().get(i)); r.add(i + "=" + filter(data.get(i).toString()));
} }
return "[" + r.toString(",") + "]"; return "[" + r.toString(",") + "]";
} }
public BlockData getBlockData() public String computeProperties()
{
return computeProperties(getData());
}
public BlockData getBlockData(IrisDataManager data)
{ {
return blockdata.aquire(() -> return blockdata.aquire(() ->
{ {
BlockData b = B.get(getKey() + ":" + getBlock() + computeProperties()); BlockData b = null;
IrisBlockData customData = data.getBlockLoader().load(getBlock(), false);
if(customData != null)
{
b = customData.getBlockData(data);
if(b != null)
{
b = b.clone();
String st = b.getAsString(true);
if(st.contains("["))
{
st = st.split("\\Q[\\E")[0];
}
KMap<String, Object> cdata = customData.getData().copy();
for(String i : getData().keySet())
{
cdata.put(i, getData().get(i));
}
String sx = getKey() + ":" + st.split("\\Q:\\E")[1] + computeProperties(cdata);
if(debug)
{
Iris.warn("Debug block data " + sx + " (CUSTOM)");
}
BlockData bx = B.get(sx);
if(bx != null)
{
return bx;
}
if(b != null)
{
return b;
}
}
}
String ss = getKey() + ":" + getBlock() + computeProperties();
b = B.get(ss);
if(debug)
{
Iris.warn("Debug block data " + ss);
}
if(b != null) if(b != null)
{ {
@@ -87,7 +153,7 @@ public class IrisBlockData
if(backup != null) if(backup != null)
{ {
return backup.getBlockData(); return backup.getBlockData(data);
} }
return B.get("AIR"); return B.get("AIR");
@@ -163,6 +229,16 @@ public class IrisBlockData
} }
try
{
return Double.valueOf(string).intValue();
}
catch(Throwable e)
{
}
return string; return string;
} }
} }

View File

@@ -4,6 +4,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@@ -47,7 +48,7 @@ public class IrisBlockDrops
private final transient AtomicCache<KList<BlockData>> data = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> data = new AtomicCache<>();
public boolean shouldDropFor(BlockData data) public boolean shouldDropFor(BlockData data, IrisDataManager rdata)
{ {
KList<BlockData> list = this.data.aquire(() -> KList<BlockData> list = this.data.aquire(() ->
{ {
@@ -55,7 +56,7 @@ public class IrisBlockDrops
for(IrisBlockData i : getBlocks()) for(IrisBlockData i : getBlocks())
{ {
BlockData dd = i.getBlockData(); BlockData dd = i.getBlockData(rdata);
if(dd != null) if(dd != null)
{ {

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@@ -41,16 +42,16 @@ public class IrisCaveFluid
private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>(); private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>();
public boolean hasFluid() public boolean hasFluid(IrisDataManager rdata)
{ {
return !B.isAir(getFluid()); return !B.isAir(getFluid(rdata));
} }
public BlockData getFluid() public BlockData getFluid(IrisDataManager rdata)
{ {
return fluidData.aquire(() -> return fluidData.aquire(() ->
{ {
BlockData b = getFluidType().getBlockData(); BlockData b = getFluidType().getBlockData(rdata);
if(b != null) if(b != null)
{ {

View File

@@ -7,6 +7,7 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.gen.TopographicTerrainProvider; import com.volmit.iris.gen.TopographicTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
@@ -87,7 +88,7 @@ public class IrisDepositGenerator
private final transient AtomicCache<KList<IrisObject>> objects = new AtomicCache<>(); private final transient AtomicCache<KList<IrisObject>> objects = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
public IrisObject getClump(RNG rng) public IrisObject getClump(RNG rng, IrisDataManager rdata)
{ {
KList<IrisObject> objects = this.objects.aquire(() -> KList<IrisObject> objects = this.objects.aquire(() ->
{ {
@@ -96,7 +97,7 @@ public class IrisDepositGenerator
for(int i = 0; i < varience; i++) for(int i = 0; i < varience; i++)
{ {
objectsf.add(generateClumpObject(rngv.nextParallelRNG(2349 * i + 3598))); objectsf.add(generateClumpObject(rngv.nextParallelRNG(2349 * i + 3598), rdata));
} }
return objectsf; return objectsf;
@@ -109,7 +110,7 @@ public class IrisDepositGenerator
return Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D))); return Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D)));
} }
private IrisObject generateClumpObject(RNG rngv) private IrisObject generateClumpObject(RNG rngv, IrisDataManager rdata)
{ {
int s = rngv.i(minSize, maxSize); int s = rngv.i(minSize, maxSize);
int dim = Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D))); int dim = Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D)));
@@ -118,7 +119,7 @@ public class IrisDepositGenerator
if(s == 1) if(s == 1)
{ {
o.getBlocks().put(o.getCenter(), nextBlock(rngv)); o.getBlocks().put(o.getCenter(), nextBlock(rngv, rdata));
} }
else else
@@ -128,19 +129,19 @@ public class IrisDepositGenerator
s--; s--;
BlockVector ang = new BlockVector(rngv.i(-w, w), rngv.i(-w, w), rngv.i(-w, w)); BlockVector ang = new BlockVector(rngv.i(-w, w), rngv.i(-w, w), rngv.i(-w, w));
BlockVector pos = o.getCenter().clone().add(ang).toBlockVector(); BlockVector pos = o.getCenter().clone().add(ang).toBlockVector();
o.getBlocks().put(pos, nextBlock(rngv)); o.getBlocks().put(pos, nextBlock(rngv, rdata));
} }
} }
return o; return o;
} }
private BlockData nextBlock(RNG rngv) private BlockData nextBlock(RNG rngv, IrisDataManager rdata)
{ {
return getBlockData().get(rngv.i(0, getBlockData().size() - 1)); return getBlockData(rdata).get(rngv.i(0, getBlockData(rdata).size() - 1));
} }
public KList<BlockData> getBlockData() public KList<BlockData> getBlockData(IrisDataManager rdata)
{ {
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
@@ -148,7 +149,7 @@ public class IrisDepositGenerator
for(IrisBlockData ix : palette) for(IrisBlockData ix : palette)
{ {
BlockData bx = ix.getBlockData(); BlockData bx = ix.getBlockData(rdata);
if(bx != null) if(bx != null)
{ {
@@ -169,7 +170,7 @@ public class IrisDepositGenerator
{ {
for(int l = 0; l < rng.i(getMinPerChunk(), getMaxPerChunk()); l++) for(int l = 0; l < rng.i(getMinPerChunk(), getMaxPerChunk()); l++)
{ {
IrisObject clump = getClump(rng); IrisObject clump = getClump(rng, g.getData());
int af = (int) Math.ceil(clump.getW() / 2D); int af = (int) Math.ceil(clump.getW() / 2D);
int bf = (int) Math.floor(16D - (clump.getW() / 2D)); int bf = (int) Math.floor(16D - (clump.getW() / 2D));
@@ -220,7 +221,7 @@ public class IrisDepositGenerator
if(!allow) if(!allow)
{ {
BlockData b = data.getBlockData(nx, ny, nz); BlockData b = data.getBlockData(nx, ny, nz);
for(BlockData f : g.getDimension().getRockPalette().getBlockData()) for(BlockData f : g.getDimension().getRockPalette().getBlockData(g.getData()))
{ {
if(f.getMaterial().equals(b.getMaterial())) if(f.getMaterial().equals(b.getMaterial()))
{ {

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
@@ -43,26 +44,26 @@ public class IrisMaterialPalette
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
public BlockData get(RNG rng, double x, double y, double z) public BlockData get(RNG rng, double x, double y, double z, IrisDataManager rdata)
{ {
if(getBlockData().isEmpty()) if(getBlockData(rdata).isEmpty())
{ {
return null; return null;
} }
if(getBlockData().size() == 1) if(getBlockData(rdata).size() == 1)
{ {
return getBlockData().get(0); return getBlockData(rdata).get(0);
} }
return getLayerGenerator(rng).fit(getBlockData(), x / zoom, y / zoom, z / zoom); return getLayerGenerator(rng, rdata).fit(getBlockData(rdata), x / zoom, y / zoom, z / zoom);
} }
public CNG getLayerGenerator(RNG rng) public CNG getLayerGenerator(RNG rng, IrisDataManager rdata)
{ {
return layerGenerator.aquire(() -> return layerGenerator.aquire(() ->
{ {
RNG rngx = rng.nextParallelRNG(-23498896 + getBlockData().size()); RNG rngx = rng.nextParallelRNG(-23498896 + getBlockData(rdata).size());
return style.create(rngx); return style.create(rngx);
}); });
} }
@@ -81,14 +82,14 @@ public class IrisMaterialPalette
return this; return this;
} }
public KList<BlockData> getBlockData() public KList<BlockData> getBlockData(IrisDataManager rdata)
{ {
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(IrisBlockData ix : palette) for(IrisBlockData ix : palette)
{ {
BlockData bx = ix.getBlockData(); BlockData bx = ix.getBlockData(rdata);
if(bx != null) if(bx != null)
{ {
for(int i = 0; i < ix.getWeight(); i++) for(int i = 0; i < ix.getWeight(); i++)

View File

@@ -18,6 +18,7 @@ import org.bukkit.block.data.type.Leaves;
import org.bukkit.util.BlockVector; import org.bukkit.util.BlockVector;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import com.volmit.iris.util.BlockPosition; import com.volmit.iris.util.BlockPosition;
import com.volmit.iris.util.CarveResult; import com.volmit.iris.util.CarveResult;
@@ -320,30 +321,30 @@ public class IrisObject extends IrisRegistrant
} }
} }
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng) public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, IrisDataManager rdata)
{ {
if(shitty) if(shitty)
{ {
return; return;
} }
place(x, -1, z, placer, config, rng); place(x, -1, z, placer, config, rng,rdata);
} }
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, CarveResult c) public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, CarveResult c, IrisDataManager rdata)
{ {
if(shitty) if(shitty)
{ {
return; return;
} }
place(x, -1, z, placer, config, rng, null, c); place(x, -1, z, placer, config, rng, null, c,rdata);
} }
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng) public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, IrisDataManager rdata)
{ {
return place(x, yv, z, placer, config, rng, null, null); return place(x, yv, z, placer, config, rng, null, null,rdata);
} }
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener, CarveResult c) public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener, CarveResult c, IrisDataManager rdata)
{ {
if(config.isSmartBore()) if(config.isSmartBore())
{ {
@@ -522,11 +523,11 @@ public class IrisObject extends IrisRegistrant
for(IrisObjectReplace j : config.getEdit()) for(IrisObjectReplace j : config.getEdit())
{ {
for(BlockData k : j.getFind()) for(BlockData k : j.getFind(rdata))
{ {
if(j.isExact() ? k.matches(data) : k.getMaterial().equals(data.getMaterial())) if(j.isExact() ? k.matches(data) : k.getMaterial().equals(data.getMaterial()))
{ {
data = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z).clone(); data = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z,rdata).clone();
} }
} }
} }

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
@@ -42,7 +43,7 @@ public class IrisObjectReplace
private final transient AtomicCache<KList<BlockData>> findData = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> findData = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> replaceData = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> replaceData = new AtomicCache<>();
public KList<BlockData> getFind() public KList<BlockData> getFind(IrisDataManager rdata)
{ {
return findData.aquire(() -> return findData.aquire(() ->
{ {
@@ -50,7 +51,7 @@ public class IrisObjectReplace
for(IrisBlockData i : find) for(IrisBlockData i : find)
{ {
BlockData bx = i.getBlockData(); BlockData bx = i.getBlockData(rdata);
if(bx != null) if(bx != null)
{ {
@@ -62,8 +63,8 @@ public class IrisObjectReplace
}); });
} }
public BlockData getReplace(RNG seed, double x, double y, double z) public BlockData getReplace(RNG seed, double x, double y, double z, IrisDataManager rdata)
{ {
return getReplace().get(seed, x, y, z); return getReplace().get(seed, x, y, z, rdata);
} }
} }

View File

@@ -144,7 +144,17 @@ public class IrisStructurePlacement
} }
o = o != null ? o : load(g, t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size()))); o = o != null ? o : load(g, t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size())));
o.place(Math.floorDiv(i, s) * s, height == -1 ? -1 : h, Math.floorDiv(j, s) * s, g, t.getPlacement(), rng, (gg) -> g.getParallaxChunk(gg.getChunkX(), gg.getChunkZ()).setStructure(gg.getY(), t.getStructure(), t.getTile()), null); o.place(
Math.floorDiv(i, s) * s,
height == -1 ? -1 : h,
Math.floorDiv(j, s) * s,
g,
t.getPlacement(),
rng,
(gg) -> g.getParallaxChunk(gg.getChunkX(), gg.getChunkZ()).setStructure(gg.getY(), t.getStructure(), t.getTile()),
null,
g.getData()
);
} }
} }

View File

@@ -142,6 +142,6 @@ public class IrisTextRenderer
public void place(ParallaxTerrainProvider g, RNG rng, IrisObjectPlacement config, int xb, int zb) public void place(ParallaxTerrainProvider g, RNG rng, IrisObjectPlacement config, int xb, int zb)
{ {
getObjects(g, rng).get(rng.nextInt(getObjects(g, rng).size())).place(xb, zb, g, config, rng); getObjects(g, rng).get(rng.nextInt(getObjects(g, rng).size())).place(xb, zb, g, config, rng, g.getData());
} }
} }

View File

@@ -574,7 +574,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); r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng, Iris.globaldata);
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);
@@ -609,33 +609,15 @@ public class StructureTemplate implements Listener, IObjectPlacer
public Cuboid getBounds(Location center) public Cuboid getBounds(Location center)
{ {
//@NoArgsConstructor // @NoArgsConstructor
return new Cuboid( return new Cuboid(getTileBounds(center.clone().add(((size / 2) * w) + 1, !use3d ? 0 : (((size / 2) * h) + 1), ((size / 2) * w) + 1)).getUpperSW(), getTileBounds(center.clone().subtract(((size / 2) * w) + 1, !use3d ? 0 : (((size / 2) * h) + 1), ((size / 2) * w) + 1)).getLowerNE());
getTileBounds(center.clone().add(
((size / 2) * w) + 1,
!use3d ? 0 : (((size / 2) * h) + 1),
((size / 2) * w) + 1)
).getUpperSW(),
getTileBounds(center.clone().subtract(
((size / 2) * w) + 1,
!use3d ? 0 : (((size / 2) * h) + 1),
((size / 2) * w) + 1)
).getLowerNE());
//@done //@done
} }
public Cuboid getTileBounds(Location l) public Cuboid getTileBounds(Location l)
{ {
//@NoArgsConstructor // @NoArgsConstructor
return new Cuboid( return new Cuboid(new Location(l.getWorld(), Math.floorDiv(l.getBlockX(), w) * w, Math.floorDiv(l.getBlockY(), h) * h, Math.floorDiv(l.getBlockZ(), w) * w), new Location(l.getWorld(), ((Math.floorDiv(l.getBlockX(), w) + 1) * w) - 1, ((Math.floorDiv(l.getBlockY(), h) + 1) * h) - 1, ((Math.floorDiv(l.getBlockZ(), w) + 1) * w) - 1));
new Location(l.getWorld(),
Math.floorDiv(l.getBlockX(), w) * w,
Math.floorDiv(l.getBlockY(), h) * h,
Math.floorDiv(l.getBlockZ(), w) * w),
new Location(l.getWorld(),
((Math.floorDiv(l.getBlockX(), w)+1) * w)-1,
((Math.floorDiv(l.getBlockY(), h)+1) * h)-1,
((Math.floorDiv(l.getBlockZ(), w)+1) * w)-1));
//@done //@done
} }
@@ -851,256 +833,46 @@ public class StructureTemplate implements Listener, IObjectPlacer
{ {
if(use3d) if(use3d)
{ {
//@NoArgsConstructor // @NoArgsConstructor
structure.getTiles().add(tileFor("Cross Floor", structure.getTiles().add(tileFor("Cross Floor", StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("T-Connect Floor", StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Hall Floor", StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Corner Floor", StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Room Floor", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Walled Room Floor", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER
)); structure.getTiles().add(tileFor("Cross Ceiling", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
structure.getTiles().add(tileFor("T-Connect Floor", structure.getTiles().add(tileFor("T-Connect Ceiling", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("Hall Ceiling", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Corner Ceiling", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("Room Ceiling", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Walled Room Ceiling", StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER,
StructureTileCondition.NEVER structure.getTiles().add(tileFor("Cross Opening", StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
)); structure.getTiles().add(tileFor("T-Connect Opening", StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
structure.getTiles().add(tileFor("Hall Floor", structure.getTiles().add(tileFor("Hall Opening", StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("Corner Opening", StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Room Opening", StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("Walled Room Opening", StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER,
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Cross Encased", StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED structure.getTiles().add(tileFor("T-Connect Encased", StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
)); structure.getTiles().add(tileFor("Hall Encased", StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED));
structure.getTiles().add(tileFor("Corner Floor", structure.getTiles().add(tileFor("Corner Encased", StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("Room Encased", StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Walled Room Encased", StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED));
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Room Floor",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Walled Room Floor",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Cross Ceiling",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("T-Connect Ceiling",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Hall Ceiling",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Corner Ceiling",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Room Ceiling",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Walled Room Ceiling",
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Cross Opening",
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("T-Connect Opening",
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Hall Opening",
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Corner Opening",
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Room Opening",
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Walled Room Opening",
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Cross Encased",
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("T-Connect Encased",
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Hall Encased",
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Corner Encased",
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Room Encased",
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Walled Room Encased",
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED
));
//@done //@done
} }
else else
{ {
//@NoArgsConstructor // @NoArgsConstructor
structure.getTiles().add(tileFor("Cross", structure.getTiles().add(tileFor("Cross", StructureTileCondition.REQUIRED, StructureTileCondition.AGNOSTIC, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.REQUIRED, structure.getTiles().add(tileFor("T-Connect", StructureTileCondition.REQUIRED, StructureTileCondition.AGNOSTIC, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.AGNOSTIC, structure.getTiles().add(tileFor("Hall", StructureTileCondition.REQUIRED, StructureTileCondition.AGNOSTIC, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Corner", StructureTileCondition.REQUIRED, StructureTileCondition.AGNOSTIC, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Room", StructureTileCondition.REQUIRED, StructureTileCondition.AGNOSTIC, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.NEVER));
StructureTileCondition.NEVER, structure.getTiles().add(tileFor("Walled Room", StructureTileCondition.REQUIRED, StructureTileCondition.AGNOSTIC, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED, StructureTileCondition.REQUIRED));
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("T-Connect",
StructureTileCondition.REQUIRED,
StructureTileCondition.AGNOSTIC,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Hall",
StructureTileCondition.REQUIRED,
StructureTileCondition.AGNOSTIC,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER,
StructureTileCondition.REQUIRED
));
structure.getTiles().add(tileFor("Corner",
StructureTileCondition.REQUIRED,
StructureTileCondition.AGNOSTIC,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Room",
StructureTileCondition.REQUIRED,
StructureTileCondition.AGNOSTIC,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.NEVER
));
structure.getTiles().add(tileFor("Walled Room",
StructureTileCondition.REQUIRED,
StructureTileCondition.AGNOSTIC,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED,
StructureTileCondition.REQUIRED
));
//@done //@done
} }
} }

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.util;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Leaves;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
@@ -143,6 +144,11 @@ public class B
return bdx; return bdx;
} }
if(resolver.isPreventLeafDecay() && bdx instanceof Leaves)
{
((Leaves) bdx).setPersistent(true);
}
bdc.put(bd, bdx); bdc.put(bd, bdx);
return bdx; return bdx;

View File

@@ -128,7 +128,7 @@ public class IrisInterpolation
public static double bihermite(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias) public static double bihermite(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias)
{ {
//@NoArgsConstructor //@builder
return hermite( return hermite(
hermite(p00, p01, p02, p03, muy, tension, bias), hermite(p00, p01, p02, p03, muy, tension, bias),
hermite(p10, p11, p12, p13, muy, tension, bias), hermite(p10, p11, p12, p13, muy, tension, bias),
@@ -140,7 +140,7 @@ public class IrisInterpolation
public static double bihermiteBezier(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias) public static double bihermiteBezier(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias)
{ {
//@NoArgsConstructor //@builder
return hermiteBezier( return hermiteBezier(
hermiteBezier(p00, p01, p02, p03, muy, tension, bias), hermiteBezier(p00, p01, p02, p03, muy, tension, bias),
hermiteBezier(p10, p11, p12, p13, muy, tension, bias), hermiteBezier(p10, p11, p12, p13, muy, tension, bias),
@@ -152,7 +152,7 @@ public class IrisInterpolation
public static double bihermiteParametric(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias, double a) public static double bihermiteParametric(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double tension, double bias, double a)
{ {
//@NoArgsConstructor //@builder
return hermiteParametric( return hermiteParametric(
hermiteParametric(p00, p01, p02, p03, muy, tension, bias, a), hermiteParametric(p00, p01, p02, p03, muy, tension, bias, a),
hermiteParametric(p10, p11, p12, p13, muy, tension, bias, a), hermiteParametric(p10, p11, p12, p13, muy, tension, bias, a),
@@ -187,7 +187,7 @@ public class IrisInterpolation
public static double bicubic(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy) public static double bicubic(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy)
{ {
//@NoArgsConstructor //@builder
return cubic( return cubic(
cubic(p00, p01, p02, p03, muy), cubic(p00, p01, p02, p03, muy),
cubic(p10, p11, p12, p13, muy), cubic(p10, p11, p12, p13, muy),
@@ -199,7 +199,7 @@ public class IrisInterpolation
public static double bicubicBezier(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy) public static double bicubicBezier(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy)
{ {
//@NoArgsConstructor //@builder
return cubicBezier( return cubicBezier(
cubicBezier(p00, p01, p02, p03, muy), cubicBezier(p00, p01, p02, p03, muy),
cubicBezier(p10, p11, p12, p13, muy), cubicBezier(p10, p11, p12, p13, muy),
@@ -211,7 +211,7 @@ public class IrisInterpolation
public static double bicubicParametric(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double a) public static double bicubicParametric(double p00, double p01, double p02, double p03, double p10, double p11, double p12, double p13, double p20, double p21, double p22, double p23, double p30, double p31, double p32, double p33, double mux, double muy, double a)
{ {
//@NoArgsConstructor //@builder
return cubicParametric( return cubicParametric(
cubicParametric(p00, p01, p02, p03, muy,a), cubicParametric(p00, p01, p02, p03, muy,a),
cubicParametric(p10, p11, p12, p13, muy,a), cubicParametric(p10, p11, p12, p13, muy,a),
@@ -239,7 +239,7 @@ public class IrisInterpolation
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return blerp( return blerp(
n.noise(x1, z1), n.noise(x1, z1),
n.noise(x2, z1), n.noise(x2, z1),
@@ -276,7 +276,7 @@ public class IrisInterpolation
int z2 = (int) Math.round((fz + 1) * rad); int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return blerpBezier( return blerpBezier(
n.noise(x1, z1), n.noise(x1, z1),
n.noise(x2, z1), n.noise(x2, z1),
@@ -296,7 +296,7 @@ public class IrisInterpolation
int z2 = (int) Math.round((fz + 1) * rad); int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return blerpParametric( return blerpParametric(
n.noise(x1, z1), n.noise(x1, z1),
n.noise(x2, z1), n.noise(x2, z1),
@@ -316,7 +316,7 @@ public class IrisInterpolation
int z2 = (int) Math.round((fz + 1) * rad); int z2 = (int) Math.round((fz + 1) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return blerpSinCenter( return blerpSinCenter(
n.noise(x1, z1), n.noise(x1, z1),
n.noise(x2, z1), n.noise(x2, z1),
@@ -340,7 +340,7 @@ public class IrisInterpolation
int z3 = (int) Math.round((fz + 2) * rad); int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return bicubic( return bicubic(
n.noise(x0, z0), n.noise(x0, z0),
n.noise(x0, z1), n.noise(x0, z1),
@@ -376,7 +376,7 @@ public class IrisInterpolation
int z3 = (int) Math.round((fz + 2) * rad); int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return bicubicBezier( return bicubicBezier(
n.noise(x0, z0), n.noise(x0, z0),
n.noise(x0, z1), n.noise(x0, z1),
@@ -412,7 +412,7 @@ public class IrisInterpolation
int z3 = (int) Math.round((fz + 2) * rad); int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return bicubicParametric( return bicubicParametric(
n.noise(x0, z0), n.noise(x0, z0),
n.noise(x0, z1), n.noise(x0, z1),
@@ -463,7 +463,7 @@ public class IrisInterpolation
int z3 = (int) Math.round((fz + 2) * rad); int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return bihermite( return bihermite(
n.noise(x0, z0), n.noise(x0, z0),
n.noise(x0, z1), n.noise(x0, z1),
@@ -499,7 +499,7 @@ public class IrisInterpolation
int z3 = (int) Math.round((fz + 2) * rad); int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return bihermiteBezier( return bihermiteBezier(
n.noise(x0, z0), n.noise(x0, z0),
n.noise(x0, z1), n.noise(x0, z1),
@@ -535,7 +535,7 @@ public class IrisInterpolation
int z3 = (int) Math.round((fz + 2) * rad); int z3 = (int) Math.round((fz + 2) * rad);
double px = rangeScale(0, 1, x1, x2, x); double px = rangeScale(0, 1, x1, x2, x);
double pz = rangeScale(0, 1, z1, z2, z); double pz = rangeScale(0, 1, z1, z2, z);
//@NoArgsConstructor //@builder
return bihermiteParametric( return bihermiteParametric(
n.noise(x0, z0), n.noise(x0, z0),
n.noise(x0, z1), n.noise(x0, z1),

View File

@@ -235,6 +235,11 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
} }
public IrisObject load(String name) public IrisObject load(String name)
{
return load(name, true);
}
public IrisObject load(String name, boolean warn)
{ {
String key = name + "-" + objectClass.getCanonicalName(); String key = name + "-" + objectClass.getCanonicalName();

View File

@@ -59,7 +59,7 @@ public class ResourceLoader<T extends IrisRegistrant>
{ {
continue; continue;
} }
if(j.isFile() && j.getName().endsWith(".json")) if(j.isFile() && j.getName().endsWith(".json"))
{ {
m.add(j.getName().replaceAll("\\Q.json\\E", "")); m.add(j.getName().replaceAll("\\Q.json\\E", ""));
@@ -147,6 +147,11 @@ public class ResourceLoader<T extends IrisRegistrant>
} }
public T load(String name) public T load(String name)
{
return load(name, true);
}
public T load(String name, boolean warn)
{ {
if(name.trim().isEmpty()) if(name.trim().isEmpty())
{ {
@@ -180,7 +185,10 @@ public class ResourceLoader<T extends IrisRegistrant>
} }
} }
J.a(() -> Iris.warn("Couldn't find " + resourceTypeName + ": " + name)); if(warn)
{
J.a(() -> Iris.warn("Couldn't find " + resourceTypeName + ": " + name));
}
lock.unlock(); lock.unlock();
return null; return null;