Merge branch 'master' into 1.16
This commit is contained in:
commit
8f72c3ef8c
6 files changed
+116
-87
No files matched your search
+14
-8
@@ -2330,7 +2330,7 @@ This function is tentative - will likely change when chunk ticket API is properl
|
|||||||
|
|
||||||
These functions help scan larger areas of blocks without using generic loop functions, like nested `loop`.
|
These functions help scan larger areas of blocks without using generic loop functions, like nested `loop`.
|
||||||
|
|
||||||
### `scan(cx, cy, cz, dx, dy, dz, px?, py?, pz?, expr)`, `scan(center, range, lower_range?, expr)`
|
### `scan(center, range, lower_range?, expr)`
|
||||||
|
|
||||||
Evaluates expression over area of blocks defined by its center `center = (cx, cy, cz)`, expanded in all directions
|
Evaluates expression over area of blocks defined by its center `center = (cx, cy, cz)`, expanded in all directions
|
||||||
by `range = (dx, dy, dz)` blocks, or optionally in negative with `range` coords, and `upper_range` coords in
|
by `range = (dx, dy, dz)` blocks, or optionally in negative with `range` coords, and `upper_range` coords in
|
||||||
@@ -2346,14 +2346,15 @@ which would cause the expression not be evaluated for their boolean value.
|
|||||||
`scan` also handles `continue` and `break` statements, using `continue`'s return value to use in place of expression
|
`scan` also handles `continue` and `break` statements, using `continue`'s return value to use in place of expression
|
||||||
return value. `break` return value has no effect.
|
return value. `break` return value has no effect.
|
||||||
|
|
||||||
### `volume(x1, y1, z1, x2, y2, z2, expr)`
|
### `volume(from_pos, to_pos, expr)`
|
||||||
|
|
||||||
Evaluates expression for each block in the area, the same as the `scan` function, but using two opposite corners of
|
Evaluates expression for each block in the area, the same as the `scan` function, but using two opposite corners of
|
||||||
the rectangular cuboid. Any corners can be specified, its like you would do with `/fill` command.
|
the rectangular cuboid. Any corners can be specified, its like you would do with `/fill` command.
|
||||||
|
You can use a position or three coordinates to specify, it doesn't matter.
|
||||||
|
|
||||||
For return value and handling `break` and `continue` statements, see `scan` function above.
|
For return value and handling `break` and `continue` statements, see `scan` function above.
|
||||||
|
|
||||||
### `neighbours(x, y, z), neighbours(block), neighbours(l(x,y,z))`
|
### `neighbours(pos)`
|
||||||
|
|
||||||
Returns the list of 6 neighbouring blocks to the argument. Commonly used with other loop functions like `for`.
|
Returns the list of 6 neighbouring blocks to the argument. Commonly used with other loop functions like `for`.
|
||||||
|
|
||||||
@@ -2361,13 +2362,18 @@ Returns the list of 6 neighbouring blocks to the argument. Commonly used with ot
|
|||||||
for(neighbours(x,y,z),air(_)) => 4 // number of air blocks around a block
|
for(neighbours(x,y,z),air(_)) => 4 // number of air blocks around a block
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
### `rect(cx, cy, cz, dx?, dy?, dz?, px?, py?, pz?)`
|
### `rect(centre, range?, positive_range?)`
|
||||||
|
|
||||||
returns an iterator, just like `range` function that iterates over rectangular cubarea of blocks. If only center
|
Returns an iterator, just like `range` function that iterates over a rectangular area of blocks. If only center
|
||||||
point is specified, it iterates over 27 blocks. If `d` arguments are specified, expands selection by the respective
|
point is specified, it iterates over 27 blocks. If `range` arguments are specified, expands selection by the respective
|
||||||
number of blocks in each direction. If `p` arguments are specified, it uses `d` for negative offset, and `p` for positive.
|
number of blocks in each direction. If `positive_range` arguments are specified,
|
||||||
|
it uses `range` for negative offset, and `positive_range` for positive.
|
||||||
|
|
||||||
### `diamond(cx, cy, cz, radius?, height?)`
|
`centre` can be defined either as three coordinates, a list of three coords, or a block value.
|
||||||
|
`range` and `positive_range` can have the same representations, just if its a block, it computes the distance to the center
|
||||||
|
as range instead of taking the values as is.`
|
||||||
|
|
||||||
|
### `diamond(centre_pos, radius?, height?)`
|
||||||
|
|
||||||
Iterates over a diamond like area of blocks. With no radius and height, its 7 blocks centered around the middle
|
Iterates over a diamond like area of blocks. With no radius and height, its 7 blocks centered around the middle
|
||||||
(block + neighbours). With a radius specified, it expands shape on x and z coords, and with a custom height, on y.
|
(block + neighbours). With a radius specified, it expands shape on x and z coords, and with a custom height, on y.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
These functions help scan larger areas of blocks without using generic loop functions, like nested `loop`.
|
These functions help scan larger areas of blocks without using generic loop functions, like nested `loop`.
|
||||||
|
|
||||||
### `scan(cx, cy, cz, dx, dy, dz, px?, py?, pz?, expr)`, `scan(center, range, lower_range?, expr)`
|
### `scan(center, range, lower_range?, expr)`
|
||||||
|
|
||||||
Evaluates expression over area of blocks defined by its center `center = (cx, cy, cz)`, expanded in all directions
|
Evaluates expression over area of blocks defined by its center `center = (cx, cy, cz)`, expanded in all directions
|
||||||
by `range = (dx, dy, dz)` blocks, or optionally in negative with `range` coords, and `upper_range` coords in
|
by `range = (dx, dy, dz)` blocks, or optionally in negative with `range` coords, and `upper_range` coords in
|
||||||
@@ -18,14 +18,15 @@ which would cause the expression not be evaluated for their boolean value.
|
|||||||
`scan` also handles `continue` and `break` statements, using `continue`'s return value to use in place of expression
|
`scan` also handles `continue` and `break` statements, using `continue`'s return value to use in place of expression
|
||||||
return value. `break` return value has no effect.
|
return value. `break` return value has no effect.
|
||||||
|
|
||||||
### `volume(x1, y1, z1, x2, y2, z2, expr)`
|
### `volume(from_pos, to_pos, expr)`
|
||||||
|
|
||||||
Evaluates expression for each block in the area, the same as the `scan` function, but using two opposite corners of
|
Evaluates expression for each block in the area, the same as the `scan` function, but using two opposite corners of
|
||||||
the rectangular cuboid. Any corners can be specified, its like you would do with `/fill` command.
|
the rectangular cuboid. Any corners can be specified, its like you would do with `/fill` command.
|
||||||
|
You can use a position or three coordinates to specify, it doesn't matter.
|
||||||
|
|
||||||
For return value and handling `break` and `continue` statements, see `scan` function above.
|
For return value and handling `break` and `continue` statements, see `scan` function above.
|
||||||
|
|
||||||
### `neighbours(x, y, z), neighbours(block), neighbours(l(x,y,z))`
|
### `neighbours(pos)`
|
||||||
|
|
||||||
Returns the list of 6 neighbouring blocks to the argument. Commonly used with other loop functions like `for`.
|
Returns the list of 6 neighbouring blocks to the argument. Commonly used with other loop functions like `for`.
|
||||||
|
|
||||||
@@ -33,13 +34,18 @@ Returns the list of 6 neighbouring blocks to the argument. Commonly used with ot
|
|||||||
for(neighbours(x,y,z),air(_)) => 4 // number of air blocks around a block
|
for(neighbours(x,y,z),air(_)) => 4 // number of air blocks around a block
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
### `rect(cx, cy, cz, dx?, dy?, dz?, px?, py?, pz?)`
|
### `rect(centre, range?, positive_range?)`
|
||||||
|
|
||||||
returns an iterator, just like `range` function that iterates over rectangular cubarea of blocks. If only center
|
Returns an iterator, just like `range` function that iterates over a rectangular area of blocks. If only center
|
||||||
point is specified, it iterates over 27 blocks. If `d` arguments are specified, expands selection by the respective
|
point is specified, it iterates over 27 blocks. If `range` arguments are specified, expands selection by the respective
|
||||||
number of blocks in each direction. If `p` arguments are specified, it uses `d` for negative offset, and `p` for positive.
|
number of blocks in each direction. If `positive_range` arguments are specified,
|
||||||
|
it uses `range` for negative offset, and `positive_range` for positive.
|
||||||
|
|
||||||
### `diamond(cx, cy, cz, radius?, height?)`
|
`centre` can be defined either as three coordinates, a list of three coords, or a block value.
|
||||||
|
`range` and `positive_range` can have the same representations, just if its a block, it computes the distance to the center
|
||||||
|
as range instead of taking the values as is.`
|
||||||
|
|
||||||
|
### `diamond(centre_pos, radius?, height?)`
|
||||||
|
|
||||||
Iterates over a diamond like area of blocks. With no radius and height, its 7 blocks centered around the middle
|
Iterates over a diamond like area of blocks. With no radius and height, its 7 blocks centered around the middle
|
||||||
(block + neighbours). With a radius specified, it expands shape on x and z coords, and with a custom height, on y.
|
(block + neighbours). With a radius specified, it expands shape on x and z coords, and with a custom height, on y.
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
loader_version=0.8.7+build.201
|
loader_version=0.8.7+build.201
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 1.3.31+v200616
|
mod_version = 1.3.32+v200617
|
||||||
maven_group = carpet
|
maven_group = carpet
|
||||||
archives_base_name = fabric-carpet
|
archives_base_name = fabric-carpet
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import static carpet.settings.RuleCategory.CLIENT;
|
|||||||
@SuppressWarnings("CanBeFinal")
|
@SuppressWarnings("CanBeFinal")
|
||||||
public class CarpetSettings
|
public class CarpetSettings
|
||||||
{
|
{
|
||||||
public static final String carpetVersion = "1.3.31+v200616";
|
public static final String carpetVersion = "1.3.32+v200617";
|
||||||
public static final Logger LOG = LogManager.getLogger();
|
public static final Logger LOG = LogManager.getLogger();
|
||||||
public static boolean skipGenerationChecks = false;
|
public static boolean skipGenerationChecks = false;
|
||||||
public static boolean impendingFillSkipUpdates = false;
|
public static boolean impendingFillSkipUpdates = false;
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ import net.minecraft.util.math.ChunkPos;
|
|||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.math.EulerAngle;
|
import net.minecraft.util.math.EulerAngle;
|
||||||
import net.minecraft.util.math.BlockBox;
|
import net.minecraft.util.math.BlockBox;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.math.Vec3i;
|
import net.minecraft.util.math.Vec3i;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
@@ -2238,21 +2239,28 @@ public class CarpetExpression
|
|||||||
return (c_, t_) -> new NumericValue(finalSCount);
|
return (c_, t_) -> new NumericValue(finalSCount);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.expr.addLazyFunction("volume", 7, (c, t, lv) ->
|
this.expr.addLazyFunction("volume", -1, (c, t, lv) ->
|
||||||
{
|
{
|
||||||
int xi = (int) NumericValue.asNumber(lv.get(0).evalValue(c)).getLong();
|
CarpetContext cc = (CarpetContext)c;
|
||||||
int yi = (int) NumericValue.asNumber(lv.get(1).evalValue(c)).getLong();
|
|
||||||
int zi = (int) NumericValue.asNumber(lv.get(2).evalValue(c)).getLong();
|
BlockArgument pos1Locator = BlockArgument.findIn(cc, lv, 0);
|
||||||
int xj = (int) NumericValue.asNumber(lv.get(3).evalValue(c)).getLong();
|
BlockArgument pos2Locator = BlockArgument.findIn(cc, lv, pos1Locator.offset);
|
||||||
int yj = (int) NumericValue.asNumber(lv.get(4).evalValue(c)).getLong();
|
BlockPos pos1 = pos1Locator.block.getPos();
|
||||||
int zj = (int) NumericValue.asNumber(lv.get(5).evalValue(c)).getLong();
|
BlockPos pos2 = pos2Locator.block.getPos();
|
||||||
int minx = min(xi, xj);
|
|
||||||
int miny = min(yi, yj);
|
int x1 = pos1.getX();
|
||||||
int minz = min(zi, zj);
|
int y1 = pos1.getY();
|
||||||
int maxx = max(xi, xj);
|
int z1 = pos1.getZ();
|
||||||
int maxy = max(yi, yj);
|
int x2 = pos2.getX();
|
||||||
int maxz = max(zi, zj);
|
int y2 = pos2.getY();
|
||||||
LazyValue expr = lv.get(6);
|
int z2 = pos2.getZ();
|
||||||
|
int minx = min(x1, x2);
|
||||||
|
int miny = min(y1, y2);
|
||||||
|
int minz = min(z1, z2);
|
||||||
|
int maxx = max(x1, x2);
|
||||||
|
int maxy = max(y1, y2);
|
||||||
|
int maxz = max(z1, z2);
|
||||||
|
LazyValue expr = lv.get(pos2Locator.offset);
|
||||||
|
|
||||||
//saving outer scope
|
//saving outer scope
|
||||||
LazyValue _x = c.getVariable("_x");
|
LazyValue _x = c.getVariable("_x");
|
||||||
@@ -2322,25 +2330,54 @@ public class CarpetExpression
|
|||||||
|
|
||||||
this.expr.addLazyFunction("rect", -1, (c, t, lv)->
|
this.expr.addLazyFunction("rect", -1, (c, t, lv)->
|
||||||
{
|
{
|
||||||
if (lv.size() != 3 && lv.size() != 6 && lv.size() != 9)
|
CarpetContext cc = (CarpetContext) c;
|
||||||
|
int cx, cy, cz;
|
||||||
|
int sminx, sminy, sminz;
|
||||||
|
int smaxx, smaxy, smaxz;
|
||||||
|
BlockArgument cposLocator = BlockArgument.findIn(cc, lv, 0);
|
||||||
|
BlockPos cpos = cposLocator.block.getPos();
|
||||||
|
cx = cpos.getX();
|
||||||
|
cy = cpos.getY();
|
||||||
|
cz = cpos.getZ();
|
||||||
|
if (lv.size() > cposLocator.offset)
|
||||||
{
|
{
|
||||||
throw new InternalExpressionException("Rectangular region should be specified with 3, 6, or 9 coordinates");
|
Vector3Argument diffLocator = Vector3Argument.findIn(cc, lv, cposLocator.offset);
|
||||||
|
if (diffLocator.fromBlock)
|
||||||
|
{
|
||||||
|
sminx = MathHelper.floor(abs(diffLocator.vec.x - cx));
|
||||||
|
sminy = MathHelper.floor(abs(diffLocator.vec.y - cx));
|
||||||
|
sminz = MathHelper.floor(abs(diffLocator.vec.z - cx));
|
||||||
}
|
}
|
||||||
int cx;
|
else
|
||||||
int cy;
|
|
||||||
int cz;
|
|
||||||
int sminx;
|
|
||||||
int sminy;
|
|
||||||
int sminz;
|
|
||||||
int smaxx;
|
|
||||||
int smaxy;
|
|
||||||
int smaxz;
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
cx = (int)((NumericValue) lv.get(0).evalValue(c)).getLong();
|
sminx = MathHelper.floor(abs(diffLocator.vec.x));
|
||||||
cy = (int)((NumericValue) lv.get(1).evalValue(c)).getLong();
|
sminy = MathHelper.floor(abs(diffLocator.vec.y));
|
||||||
cz = (int)((NumericValue) lv.get(2).evalValue(c)).getLong();
|
sminz = MathHelper.floor(abs(diffLocator.vec.z));
|
||||||
if (lv.size()==3) // only done this way because of stupid Java lambda final reqs
|
}
|
||||||
|
if (lv.size() > diffLocator.offset)
|
||||||
|
{
|
||||||
|
Vector3Argument posDiff = Vector3Argument.findIn(cc, lv, diffLocator.offset);
|
||||||
|
if (posDiff.fromBlock)
|
||||||
|
{
|
||||||
|
smaxx = MathHelper.floor(abs(posDiff.vec.x - cx));
|
||||||
|
smaxy = MathHelper.floor(abs(posDiff.vec.y - cx));
|
||||||
|
smaxz = MathHelper.floor(abs(posDiff.vec.z - cx));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
smaxx = MathHelper.floor(abs(posDiff.vec.x));
|
||||||
|
smaxy = MathHelper.floor(abs(posDiff.vec.y));
|
||||||
|
smaxz = MathHelper.floor(abs(posDiff.vec.z));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
smaxx = sminx;
|
||||||
|
smaxy = sminy;
|
||||||
|
smaxz = sminz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sminx = 1;
|
sminx = 1;
|
||||||
sminy = 1;
|
sminy = 1;
|
||||||
@@ -2349,30 +2386,7 @@ public class CarpetExpression
|
|||||||
smaxy = 1;
|
smaxy = 1;
|
||||||
smaxz = 1;
|
smaxz = 1;
|
||||||
}
|
}
|
||||||
else if (lv.size()==6)
|
|
||||||
{
|
|
||||||
sminx = (int) ((NumericValue) lv.get(3).evalValue(c)).getLong();
|
|
||||||
sminy = (int) ((NumericValue) lv.get(4).evalValue(c)).getLong();
|
|
||||||
sminz = (int) ((NumericValue) lv.get(5).evalValue(c)).getLong();
|
|
||||||
smaxx = sminx;
|
|
||||||
smaxy = sminy;
|
|
||||||
smaxz = sminz;
|
|
||||||
}
|
|
||||||
else // size == 9
|
|
||||||
{
|
|
||||||
sminx = (int) ((NumericValue) lv.get(3).evalValue(c)).getLong();
|
|
||||||
sminy = (int) ((NumericValue) lv.get(4).evalValue(c)).getLong();
|
|
||||||
sminz = (int) ((NumericValue) lv.get(5).evalValue(c)).getLong();
|
|
||||||
smaxx = (int)((NumericValue) lv.get(6).evalValue(c)).getLong();
|
|
||||||
smaxy = (int)((NumericValue) lv.get(7).evalValue(c)).getLong();
|
|
||||||
smaxz = (int)((NumericValue) lv.get(8).evalValue(c)).getLong();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (ClassCastException exc)
|
|
||||||
{
|
|
||||||
throw new InternalExpressionException("Attempted to pass a non-number to rect");
|
|
||||||
}
|
|
||||||
CarpetContext cc = (CarpetContext)c;
|
|
||||||
return (c_, t_) -> new LazyListValue()
|
return (c_, t_) -> new LazyListValue()
|
||||||
{
|
{
|
||||||
final int minx = cx-sminx;
|
final int minx = cx-sminx;
|
||||||
@@ -2381,6 +2395,7 @@ public class CarpetExpression
|
|||||||
final int maxx = cx+smaxx;
|
final int maxx = cx+smaxx;
|
||||||
final int maxy = cy+smaxy;
|
final int maxy = cy+smaxy;
|
||||||
final int maxz = cz+smaxz;
|
final int maxz = cz+smaxz;
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
int z;
|
int z;
|
||||||
@@ -2440,10 +2455,9 @@ public class CarpetExpression
|
|||||||
this.expr.addLazyFunction("diamond", -1, (c, t, lv)->
|
this.expr.addLazyFunction("diamond", -1, (c, t, lv)->
|
||||||
{
|
{
|
||||||
CarpetContext cc = (CarpetContext)c;
|
CarpetContext cc = (CarpetContext)c;
|
||||||
if (lv.size() != 3 && lv.size() != 4 && lv.size() != 5)
|
|
||||||
{
|
BlockArgument cposLocator=BlockArgument.findIn((CarpetContext)c,lv,0);
|
||||||
throw new InternalExpressionException("'diamond' region should be specified with 3 to 5 coordinates");
|
BlockPos cpos = cposLocator.block.getPos();
|
||||||
}
|
|
||||||
|
|
||||||
int cx;
|
int cx;
|
||||||
int cy;
|
int cy;
|
||||||
@@ -2452,10 +2466,11 @@ public class CarpetExpression
|
|||||||
int height;
|
int height;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
cx = (int)((NumericValue) lv.get(0).evalValue(c)).getLong();
|
cx = cpos.getX();
|
||||||
cy = (int)((NumericValue) lv.get(1).evalValue(c)).getLong();
|
cy = cpos.getY();
|
||||||
cz = (int)((NumericValue) lv.get(2).evalValue(c)).getLong();
|
cz = cpos.getZ();
|
||||||
if (lv.size()==3)
|
|
||||||
|
if (lv.size()==cposLocator.offset)
|
||||||
{
|
{
|
||||||
Value retval = ListValue.of(
|
Value retval = ListValue.of(
|
||||||
BlockValue.fromCoords(cc, cx, cy-1, cz),
|
BlockValue.fromCoords(cc, cx, cy-1, cz),
|
||||||
@@ -2468,20 +2483,22 @@ public class CarpetExpression
|
|||||||
);
|
);
|
||||||
return (_c, _t ) -> retval;
|
return (_c, _t ) -> retval;
|
||||||
}
|
}
|
||||||
else if (lv.size()==4)
|
else if (lv.size()==1+cposLocator.offset)
|
||||||
{
|
{
|
||||||
width = (int) ((NumericValue) lv.get(3).evalValue(c)).getLong();
|
width = (int) ((NumericValue) lv.get(cposLocator.offset).evalValue(c)).getLong();
|
||||||
height = 0;
|
height = 0;
|
||||||
}
|
}
|
||||||
else // size == 5
|
else if(lv.size()==2+cposLocator.offset)
|
||||||
{
|
{
|
||||||
width = (int) ((NumericValue) lv.get(3).evalValue(c)).getLong();
|
width = (int) ((NumericValue) lv.get(cposLocator.offset).evalValue(c)).getLong();
|
||||||
height = (int) ((NumericValue) lv.get(4).evalValue(c)).getLong();
|
height = (int) ((NumericValue) lv.get(cposLocator.offset+1).evalValue(c)).getLong();
|
||||||
|
} else{
|
||||||
|
throw new InternalExpressionException("Incorrect number of arguments for 'diamond'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (ClassCastException exc)
|
catch (ClassCastException exc)
|
||||||
{
|
{
|
||||||
throw new InternalExpressionException("Attempted to pass a non-number to diamond");
|
throw new InternalExpressionException("Attempted to pass a non-number to 'diamond'");
|
||||||
}
|
}
|
||||||
if (height == 0)
|
if (height == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"id": "carpet",
|
"id": "carpet",
|
||||||
"version": "1.3.31",
|
"version": "1.3.32",
|
||||||
|
|
||||||
"name": "Carpet Mod in Fabric",
|
"name": "Carpet Mod in Fabric",
|
||||||
"description": "Carpet made out of fabric",
|
"description": "Carpet made out of fabric",
|
||||||
|
|||||||
Reference in new issue
Block a user