mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-12 18:56:14 +00:00
Jigsaw fixes
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user