mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-06-18 06:41:08 +00:00
add forcePlace option to suppress placement checks
This commit is contained in:
@@ -506,7 +506,7 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
if (rdata != null) {
|
if (rdata != null) {
|
||||||
// Slope condition
|
// Slope condition
|
||||||
if (!config.getSlopeCondition().isDefault() &&
|
if (!config.getSlopeCondition().isDefault() &&
|
||||||
!config.getSlopeCondition().isValid(rdata.getEngine().getComplex().getSlopeStream().get(x, z))) {
|
!config.getSlopeCondition().isValid(rdata.getEngine().getComplex().getSlopeStream().get(x, z)) && !config.isForcePlace()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -571,8 +571,10 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
if (yv < 0) {
|
if (yv < 0) {
|
||||||
if (config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT) || config.getMode() == ObjectPlaceMode.CENTER_STILT) {
|
if (config.getMode().equals(ObjectPlaceMode.CENTER_HEIGHT) || config.getMode() == ObjectPlaceMode.CENTER_STILT) {
|
||||||
y = (c != null ? c.getSurface() : placer.getHighest(x, z, getLoader(), config.isUnderwater())) + rty;
|
y = (c != null ? c.getSurface() : placer.getHighest(x, z, getLoader(), config.isUnderwater())) + rty;
|
||||||
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z)) {
|
||||||
|
bail = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) {
|
} else if (config.getMode().equals(ObjectPlaceMode.MAX_HEIGHT) || config.getMode().equals(ObjectPlaceMode.STILT)) {
|
||||||
BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ());
|
BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ());
|
||||||
@@ -586,9 +588,11 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int i = minX; i <= maxX; i++) {
|
for (int i = minX; i <= maxX; i++) {
|
||||||
for (int ii = minZ; ii <= maxZ; ii++) {
|
for (int ii = minZ; ii <= maxZ; ii++) {
|
||||||
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
||||||
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
||||||
break;
|
bail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (h > y)
|
if (h > y)
|
||||||
y = h;
|
y = h;
|
||||||
@@ -610,9 +614,11 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int i = minX; i <= maxX; i += Math.abs(xRadius) + 1) {
|
for (int i = minX; i <= maxX; i += Math.abs(xRadius) + 1) {
|
||||||
for (int ii = minZ; ii <= maxZ; ii += Math.abs(zRadius) + 1) {
|
for (int ii = minZ; ii <= maxZ; ii += Math.abs(zRadius) + 1) {
|
||||||
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
||||||
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
||||||
break;
|
bail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (h > y)
|
if (h > y)
|
||||||
y = h;
|
y = h;
|
||||||
@@ -632,9 +638,11 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int i = minX; i <= maxX; i++) {
|
for (int i = minX; i <= maxX; i++) {
|
||||||
for (int ii = minZ; ii <= maxZ; ii++) {
|
for (int ii = minZ; ii <= maxZ; ii++) {
|
||||||
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
||||||
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
||||||
break;
|
bail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (h < y) {
|
if (h < y) {
|
||||||
y = h;
|
y = h;
|
||||||
@@ -658,9 +666,11 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
for (int i = minX; i <= maxX; i += Math.abs(xRadius) + 1) {
|
for (int i = minX; i <= maxX; i += Math.abs(xRadius) + 1) {
|
||||||
for (int ii = minZ; ii <= maxZ; ii += Math.abs(zRadius) + 1) {
|
for (int ii = minZ; ii <= maxZ; ii += Math.abs(zRadius) + 1) {
|
||||||
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
int h = placer.getHighest(i, ii, getLoader(), config.isUnderwater()) + rty;
|
||||||
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(i, h, ii) || placer.isCarved(i, h - 1, ii) || placer.isCarved(i, h - 2, ii) || placer.isCarved(i, h - 3, ii)) {
|
||||||
break;
|
bail = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (h < y) {
|
if (h < y) {
|
||||||
y = h;
|
y = h;
|
||||||
@@ -669,45 +679,51 @@ public class IrisObject extends IrisRegistrant {
|
|||||||
}
|
}
|
||||||
} else if (config.getMode().equals(ObjectPlaceMode.PAINT)) {
|
} else if (config.getMode().equals(ObjectPlaceMode.PAINT)) {
|
||||||
y = placer.getHighest(x, z, getLoader(), config.isUnderwater()) + rty;
|
y = placer.getHighest(x, z, getLoader(), config.isUnderwater()) + rty;
|
||||||
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z)) {
|
||||||
|
bail = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
y = yv;
|
y = yv;
|
||||||
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z)) {
|
if (!config.isForcePlace()) {
|
||||||
bail = true;
|
if (placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z)) {
|
||||||
|
bail = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yv >= 0 && config.isBottom()) {
|
if (yv >= 0 && config.isBottom()) {
|
||||||
y += Math.floorDiv(h, 2);
|
y += Math.floorDiv(h, 2);
|
||||||
bail = placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z);
|
if (!config.isForcePlace()) {
|
||||||
|
bail = placer.isCarved(x, y, z) || placer.isCarved(x, y - 1, z) || placer.isCarved(x, y - 2, z) || placer.isCarved(x, y - 3, z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bail) {
|
if (bail && !config.isForcePlace()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yv < 0) {
|
if (yv < 0) {
|
||||||
if (!config.isUnderwater() && !config.isOnwater() && placer.isUnderwater(x, z)) {
|
if (!config.isForcePlace() && !config.isUnderwater() && !config.isOnwater() && placer.isUnderwater(x, z)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c != null && Math.max(0, h + yrand + ty) + 1 >= c.getHeight()) {
|
if (!config.isForcePlace() && c != null && Math.max(0, h + yrand + ty) + 1 >= c.getHeight()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.isUnderwater() && y + rty + ty >= placer.getFluidHeight()) {
|
if (!config.isForcePlace() && config.isUnderwater() && y + rty + ty >= placer.getFluidHeight()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.getClamp().canPlace(y + rty + ty, y - rty + ty)) {
|
if (!config.isForcePlace() && !config.getClamp().canPlace(y + rty + ty, y - rty + ty)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.getAllowedCollisions().isEmpty() || !config.getForbiddenCollisions().isEmpty()) {
|
if (!config.isForcePlace() && (!config.getAllowedCollisions().isEmpty() || !config.getForbiddenCollisions().isEmpty())) {
|
||||||
Engine engine = rdata.getEngine();
|
Engine engine = rdata.getEngine();
|
||||||
BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ());
|
BlockVector offset = new BlockVector(config.getTranslate().getX(), config.getTranslate().getY(), config.getTranslate().getZ());
|
||||||
for (int i = x - Math.floorDiv(w, 2) + (int) offset.getX(); i <= x + Math.floorDiv(w, 2) - (w % 2 == 0 ? 1 : 0) + (int) offset.getX(); i++) {
|
for (int i = x - Math.floorDiv(w, 2) + (int) offset.getX(); i <= x + Math.floorDiv(w, 2) - (w % 2 == 0 ? 1 : 0) + (int) offset.getX(); i++) {
|
||||||
|
|||||||
@@ -136,6 +136,8 @@ public class IrisObjectPlacement {
|
|||||||
@ArrayType(type = String.class)
|
@ArrayType(type = String.class)
|
||||||
@Desc("List of objects to this object is forbidden to collied with")
|
@Desc("List of objects to this object is forbidden to collied with")
|
||||||
private KList<String> forbiddenCollisions = new KList<>();
|
private KList<String> forbiddenCollisions = new KList<>();
|
||||||
|
@Desc("Ignore any placement restrictions for this object")
|
||||||
|
private boolean forcePlace = false;
|
||||||
private transient AtomicCache<TableCache> cache = new AtomicCache<>();
|
private transient AtomicCache<TableCache> cache = new AtomicCache<>();
|
||||||
|
|
||||||
public IrisObjectPlacement toPlacement(String... place) {
|
public IrisObjectPlacement toPlacement(String... place) {
|
||||||
|
|||||||
Reference in New Issue
Block a user