Merge branch 'master' into 1.17

This commit is contained in:
gnembon committed 2020-12-16 18:04:52 -04:00
commit c2436f1f09
8 files changed
+88 -24

No files matched your search

+15 -10
View File
@@ -2072,18 +2072,19 @@ print(b); // 'stone', block was evaluated 'eagerly' but call to `block`
All the functions below can be used with block value, queried with coord triple, or 3-long list. All `pos` in the All the functions below can be used with block value, queried with coord triple, or 3-long list. All `pos` in the
functions referenced below refer to either method of passing block position. functions referenced below refer to either method of passing block position.
### `set(pos, block, property?, value?, ..., block_data?)`, `set(pos, block, l(property?, value?, ...), block_data?)` ### `set(pos, block, property?, value?, ..., block_data?)`, `set(pos, block, [property?, value?, ...], block_data?)`, `set(pos, block, {property? -> value?, ...}, block_data?)`
First part of the `set` function is either a coord triple, list of three numbers, or other block with coordinates. First argument for the `set` function is either a coord triple, list of three numbers, or a world localized block value.
Second part, `block` is either block value as a result of `block()` function string value indicating the block name, Second argument, `block`, is either an existing block value, a result of `block()` function, or a string value indicating the block name
and optional `property - value` pairs for extra block properties. Optional `block_data` include the block data to with optional state and block data. It is then followed by an optional
`property - value` pairs for extra block state (which can also be provided in a list or a map). Optional `block_data` include the block data to
be set for the target block. be set for the target block.
If `block` is specified only by name, then if a If `block` is specified only by name, then if a
destination block is the same the `set` operation is skipped, otherwise is executed, for other potential extra destination block is the same the `set` operation is skipped, otherwise is executed, for other potential extra
properties. properties that the original source block may have contained.
The returned value is either the block state that has been set, or `false` if block setting was skipped The returned value is either the block state that has been set, or `false` if block setting was skipped, or failed
<pre> <pre>
set(0,5,0,'bedrock') => bedrock set(0,5,0,'bedrock') => bedrock
@@ -2099,11 +2100,15 @@ scan(0,100,0,20,20,20,set(_,block('glass')))
b = block('glass'); scan(0,100,0,20,20,20,set(_,b)) b = block('glass'); scan(0,100,0,20,20,20,set(_,b))
// yet another option, skips all parsing // yet another option, skips all parsing
set(x,y,z,'iron_trapdoor') // sets bottom iron trapdoor set(x,y,z,'iron_trapdoor') // sets bottom iron trapdoor
set(x,y,z,'iron_trapdoor[half=top]') // Incorrect. sets bottom iron trapdoor - no parsing of properties
set(x,y,z,'iron_trapdoor','half','top') // correct - top trapdoor set(x,y,z,'iron_trapdoor[half=top]') // sets the top trapdoor
set(x,y,z, block('iron_trapdoor[half=top]')) // also correct, block() provides extra parsing set(x,y,z,'iron_trapdoor','half','top') // also correct - top trapdoor
set(x,y,z,'iron_trapdoor', ['half','top']) // same
set(x,y,z,'iron_trapdoor', {'half' -> 'top'}) // same
set(x,y,z, block('iron_trapdoor[half=top]')) // also correct, block() provides extra parsing of block state
set(x,y,z,'hopper[facing=north]{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') // extra block data set(x,y,z,'hopper[facing=north]{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') // extra block data
set(x,y,z,'hopper', l('facing', 'north'), nbt('{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') ) // same set(x,y,z,'hopper', {'facing' -> 'north'}, nbt('{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') ) // same
</pre> </pre>
### `without_updates(expr)` ### `without_updates(expr)`
+15 -10
View File
@@ -36,18 +36,19 @@ print(b); // 'stone', block was evaluated 'eagerly' but call to `block`
All the functions below can be used with block value, queried with coord triple, or 3-long list. All `pos` in the All the functions below can be used with block value, queried with coord triple, or 3-long list. All `pos` in the
functions referenced below refer to either method of passing block position. functions referenced below refer to either method of passing block position.
### `set(pos, block, property?, value?, ..., block_data?)`, `set(pos, block, l(property?, value?, ...), block_data?)` ### `set(pos, block, property?, value?, ..., block_data?)`, `set(pos, block, [property?, value?, ...], block_data?)`, `set(pos, block, {property? -> value?, ...}, block_data?)`
First part of the `set` function is either a coord triple, list of three numbers, or other block with coordinates. First argument for the `set` function is either a coord triple, list of three numbers, or a world localized block value.
Second part, `block` is either block value as a result of `block()` function string value indicating the block name, Second argument, `block`, is either an existing block value, a result of `block()` function, or a string value indicating the block name
and optional `property - value` pairs for extra block properties. Optional `block_data` include the block data to with optional state and block data. It is then followed by an optional
`property - value` pairs for extra block state (which can also be provided in a list or a map). Optional `block_data` include the block data to
be set for the target block. be set for the target block.
If `block` is specified only by name, then if a If `block` is specified only by name, then if a
destination block is the same the `set` operation is skipped, otherwise is executed, for other potential extra destination block is the same the `set` operation is skipped, otherwise is executed, for other potential extra
properties. properties that the original source block may have contained.
The returned value is either the block state that has been set, or `false` if block setting was skipped The returned value is either the block state that has been set, or `false` if block setting was skipped, or failed
<pre> <pre>
set(0,5,0,'bedrock') => bedrock set(0,5,0,'bedrock') => bedrock
@@ -63,11 +64,15 @@ scan(0,100,0,20,20,20,set(_,block('glass')))
b = block('glass'); scan(0,100,0,20,20,20,set(_,b)) b = block('glass'); scan(0,100,0,20,20,20,set(_,b))
// yet another option, skips all parsing // yet another option, skips all parsing
set(x,y,z,'iron_trapdoor') // sets bottom iron trapdoor set(x,y,z,'iron_trapdoor') // sets bottom iron trapdoor
set(x,y,z,'iron_trapdoor[half=top]') // Incorrect. sets bottom iron trapdoor - no parsing of properties
set(x,y,z,'iron_trapdoor','half','top') // correct - top trapdoor set(x,y,z,'iron_trapdoor[half=top]') // sets the top trapdoor
set(x,y,z, block('iron_trapdoor[half=top]')) // also correct, block() provides extra parsing set(x,y,z,'iron_trapdoor','half','top') // also correct - top trapdoor
set(x,y,z,'iron_trapdoor', ['half','top']) // same
set(x,y,z,'iron_trapdoor', {'half' -> 'top'}) // same
set(x,y,z, block('iron_trapdoor[half=top]')) // also correct, block() provides extra parsing of block state
set(x,y,z,'hopper[facing=north]{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') // extra block data set(x,y,z,'hopper[facing=north]{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') // extra block data
set(x,y,z,'hopper', l('facing', 'north'), nbt('{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') ) // same set(x,y,z,'hopper', {'facing' -> 'north'}, nbt('{Items:[{Slot:1b,id:"minecraft:slime_ball",Count:16b}]}') ) // same
</pre> </pre>
### `without_updates(expr)` ### `without_updates(expr)`
+1 -1
View File
@@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.10.8 loader_version=0.10.8
# Mod Properties # Mod Properties
mod_version = 1.4.20+v201202 mod_version = 1.4.21+v201216
maven_group = carpet maven_group = carpet
archives_base_name = fabric-carpet archives_base_name = fabric-carpet
+1 -1
View File
@@ -36,7 +36,7 @@ import static carpet.settings.RuleCategory.CLIENT;
@SuppressWarnings("CanBeFinal") @SuppressWarnings("CanBeFinal")
public class CarpetSettings public class CarpetSettings
{ {
public static final String carpetVersion = "1.4.20+v201202"; public static final String carpetVersion = "1.4.21+v201216";
public static final Logger LOG = LogManager.getLogger("carpet"); public static final Logger LOG = LogManager.getLogger("carpet");
public static boolean skipGenerationChecks = false; public static boolean skipGenerationChecks = false;
public static boolean impendingFillSkipUpdates = false; public static boolean impendingFillSkipUpdates = false;
@@ -777,6 +777,21 @@ public class WorldAccess {
} }
args = ((ListValue) args.get(0)).getItems(); args = ((ListValue) args.get(0)).getItems();
} }
else if (args.get(0) instanceof MapValue)
{
if (args.size() == 2)
{
Value dataValue = NBTSerializableValue.fromValue( args.get(1));
if (dataValue instanceof NBTSerializableValue)
{
data = ((NBTSerializableValue) dataValue).getCompoundTag();
}
}
Map<Value, Value> state = ((MapValue) args.get(0)).getMap();
List<Value> mapargs = new ArrayList<>();
state.forEach( (k, v) -> {mapargs.add(k); mapargs.add(v);});
args = mapargs;
}
else else
{ {
if ((args.size() & 1) == 1) if ((args.size() & 1) == 1)
@@ -812,7 +827,7 @@ public class WorldAccess {
{ {
Clearable.clear(world.getBlockEntity(targetPos)); Clearable.clear(world.getBlockEntity(targetPos));
boolean success = world.setBlockState(targetPos, finalSourceBlockState, 2); boolean success = world.setBlockState(targetPos, finalSourceBlockState, 2);
if (success && finalData != null) if (finalData != null)
{ {
BlockEntity be = world.getBlockEntity(targetPos); BlockEntity be = world.getBlockEntity(targetPos);
if (be != null) if (be != null)
@@ -823,6 +838,7 @@ public class WorldAccess {
destTag.putInt("z", targetPos.getZ()); destTag.putInt("z", targetPos.getZ());
be.fromTag(destTag); be.fromTag(destTag);
be.markDirty(); be.markDirty();
success = true;
} }
} }
result[0] = success; result[0] = success;
@@ -3,6 +3,7 @@ package carpet.script.value;
import net.minecraft.nbt.StringTag; import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import net.minecraft.text.BaseText; import net.minecraft.text.BaseText;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
public class FormattedTextValue extends StringValue public class FormattedTextValue extends StringValue
@@ -14,6 +15,33 @@ public class FormattedTextValue extends StringValue
this.text = text; this.text = text;
} }
public static Value combine(Value left, Value right) {
BaseText text;
if (left instanceof FormattedTextValue)
{
text = (BaseText) ((FormattedTextValue) left).getText().shallowCopy();
}
else
{
if (left instanceof NullValue)
return right;
text = new LiteralText(left.getString());
}
if (right instanceof FormattedTextValue)
{
text.append(((FormattedTextValue) right).getText().shallowCopy());
return new FormattedTextValue(text);
}
else
{
if (right instanceof NullValue)
return left;
text.append(right.getString());
return new FormattedTextValue(text);
}
}
@Override @Override
public String getString() { public String getString() {
return text.getString(); return text.getString();
@@ -48,10 +76,16 @@ public class FormattedTextValue extends StringValue
return StringTag.of(Text.Serializer.toJson(text)); return StringTag.of(Text.Serializer.toJson(text));
} }
@Override
public Value add(Value o) {
return combine(this, o);
}
public String serialize() public String serialize()
{ {
return Text.Serializer.toJson(text); return Text.Serializer.toJson(text);
} }
public static FormattedTextValue deserialize(String serialized) public static FormattedTextValue deserialize(String serialized)
{ {
return new FormattedTextValue(Text.Serializer.fromJson(serialized)); return new FormattedTextValue(Text.Serializer.fromJson(serialized));
@@ -79,6 +79,10 @@ public abstract class Value implements Comparable<Value>, Cloneable
public Value add(Value o) { public Value add(Value o) {
String lstr = this.getString(); String lstr = this.getString();
if (o instanceof FormattedTextValue)
{
return FormattedTextValue.combine(this, o);
}
if (lstr == null) // null if (lstr == null) // null
return new StringValue(o.getString()); return new StringValue(o.getString());
String rstr = o.getString(); String rstr = o.getString();
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"id": "carpet", "id": "carpet",
"version": "1.4.20", "version": "1.4.21",
"name": "Carpet Mod in Fabric", "name": "Carpet Mod in Fabric",
"description": "Carpet made out of fabric", "description": "Carpet made out of fabric",