9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-30 04:29:05 +00:00

Carving Objects

This commit is contained in:
Daniel Mills
2020-09-11 12:59:37 -04:00
parent 1618d54b70
commit 1bafdf0feb
12 changed files with 161 additions and 22 deletions

View File

@@ -1,5 +1,6 @@
package com.volmit.iris.object;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.generator.ChunkGenerator.ChunkData;
import org.bukkit.util.BlockVector;
@@ -7,6 +8,7 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.gen.TopographicTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.HeightMap;
@@ -228,6 +230,16 @@ public class IrisDepositGenerator
}
}
if(!safe && allow)
{
BlockData b = data.getBlockData(nx, ny, nz);
if(b.getMaterial().equals(Material.ICE) || b.getMaterial().equals(Material.PACKED_ICE) || b.getMaterial().equals(B.mat("BLUE_ICE")) || b.getMaterial().equals(B.mat("FROSTED_ICE")) || b.getMaterial().equals(Material.SAND) || b.getMaterial().equals(Material.RED_SAND) || !B.isSolid(b.getMaterial()))
{
allow = false;
}
}
if(allow)
{
data.setBlock(nx, ny, nz, clump.getBlocks().get(j));

View File

@@ -20,6 +20,7 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.Iris;
import com.volmit.iris.util.B;
import com.volmit.iris.util.BlockPosition;
import com.volmit.iris.util.CarveResult;
import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.IrisLock;
@@ -328,12 +329,21 @@ public class IrisObject extends IrisRegistrant
place(x, -1, z, placer, config, rng);
}
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng)
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, CarveResult c)
{
return place(x, yv, z, placer, config, rng, null);
if(shitty)
{
return;
}
place(x, -1, z, placer, config, rng, null, c);
}
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener)
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng)
{
return place(x, yv, z, placer, config, rng, null, null);
}
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener, CarveResult c)
{
if(config.isSmartBore())
{
@@ -357,7 +367,7 @@ public class IrisObject extends IrisRegistrant
{
if(config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT))
{
y = placer.getHighest(x, z, config.isUnderwater()) + rty;
y = (c != null ? c.getSurface() : placer.getHighest(x, z, config.isUnderwater())) + rty;
}
else if(config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT))
@@ -462,6 +472,11 @@ public class IrisObject extends IrisRegistrant
}
}
if(c != null && Math.max(0, h + yrand + ty) + 1 >= c.getHeight())
{
return -1;
}
if(config.isUnderwater() && y + rty + ty >= placer.getFluidHeight())
{
return -1;

View File

@@ -105,7 +105,7 @@ public class IrisObjectPlacement
@DontObfuscate
@Desc("If set to true, Blocks placed underwater that could be waterlogged are waterlogged.")
private boolean waterloggable = true;
private boolean waterloggable = false;
@DontObfuscate
@Desc("If set to true, objects will place on the fluid height level Such as boats.")

View File

@@ -144,7 +144,7 @@ public class IrisStructurePlacement
}
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()));
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);
}
}