Jigsaw fixes

This commit is contained in:
Daniel Mills
2021-01-28 00:28:55 -05:00
parent 66dde6c215
commit 4a05031a0f
14 changed files with 182 additions and 15 deletions

View File

@@ -2,11 +2,15 @@ package com.volmit.iris.scaffold.jigsaw;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.*;
import com.volmit.iris.object.tile.TileData;
import com.volmit.iris.util.AxisAlignedBB;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
import lombok.Data;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.TileState;
import org.bukkit.block.data.BlockData;
import org.bukkit.util.BlockVector;
@Data
@@ -129,6 +133,58 @@ public class PlannedPiece {
}
public void place(World world) {
getObject().placeCenterY(new Location(world, position.getX(), position.getY(), position.getZ()));
getPiece().getPlacementOptions().getRotation().setEnabled(false);
getObject().place(position.getX()+getObject().getCenter().getBlockX(), position.getY()+getObject().getCenter().getBlockY(), position.getZ()+getObject().getCenter().getBlockZ(), new IObjectPlacer() {
@Override
public int getHighest(int x, int z) {
return position.getY();
}
@Override
public int getHighest(int x, int z, boolean ignoreFluid) {
return position.getY();
}
@Override
public void set(int x, int y, int z, BlockData d) {
world.getBlockAt(x,y,z).setBlockData(d);
}
@Override
public BlockData get(int x, int y, int z) {
return world.getBlockAt(x,y,z).getBlockData();
}
@Override
public boolean isPreventingDecay() {
return false;
}
@Override
public boolean isSolid(int x, int y, int z) {
return false;
}
@Override
public boolean isUnderwater(int x, int z) {
return false;
}
@Override
public int getFluidHeight() {
return 0;
}
@Override
public boolean isDebugSmartBore() {
return false;
}
@Override
public void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile) {
}
}, piece.getPlacementOptions(), new RNG(), getData());
}
}

View File

@@ -3,11 +3,17 @@ package com.volmit.iris.scaffold.jigsaw;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.*;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.EngineParallaxManager;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.scaffold.parallax.ParallaxChunkMeta;
import com.volmit.iris.util.*;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.RNG;
import lombok.Data;
import org.bukkit.Axis;
import org.bukkit.Location;
import org.bukkit.World;
@Data
@@ -105,6 +111,27 @@ public class PlannedStructure {
meta.setMaxObject(Math.max(Math.max(meta.getMaxObject(), 0), yf));
}, null, getData());
for(IrisJigsawPieceConnector j : i.getAvailableConnectors())
{
if(j.getSpawnEntity() != null)
{
IrisPosition p = i.getWorldPosition(j).add(new IrisPosition(j.getDirection().toVector().multiply(2)));
if(options.getMode().equals(ObjectPlaceMode.PAINT) || options.isVacuum())
{
p.setY(placer.getHighest(xx, zz) + offset + (v.getH() / 2));
}
else
{
p.setY(height);
}
e.getParallaxAccess().setEntity(p.getX(), p.getY(), p.getZ(), j.getSpawnEntity());
}
}
if(options.isVacuum())
{
int dx = xx;
@@ -126,6 +153,23 @@ public class PlannedStructure {
{
for(PlannedPiece i : pieces)
{
Iris.sq(() -> {
for(IrisJigsawPieceConnector j : i.getAvailableConnectors())
{
if(j.getSpawnEntity() != null)
{
IrisPosition p = i.getWorldPosition(j).add(new IrisPosition(j.getDirection().toVector().multiply(2)));
IrisEntity e = getData().getEntityLoader().load(j.getSpawnEntity());
IrisAccess a = IrisWorlds.access(world);
if(a != null)
{
e.spawn(a.getCompound().getEngineForHeight(p.getY()), new Location(world, p.getX(), p.getY(), p.getZ()), rng);
}
}
}
});
Iris.sq(() -> i.place(world));
}
}