Merge branch 'master' into 1.17

# Conflicts:
#	src/main/java/carpet/script/value/ValueConversions.java
This commit is contained in:
gnembon committed 2020-11-22 21:59:57 -04:00
commit 091a4deadc
8 files changed
+97 -30

No files matched your search

@@ -958,6 +958,8 @@ public class WorldAccess {
stateStringQuery(c, "map_colour", lv, (s, p) ->
BlockInfo.mapColourName.get(s.getMapColor(((CarpetContext)c).s.getWorld(), p))));
// Deprecated for block_state()
expression.addLazyFunction("property", -1, (c, t, lv) ->
{
BlockArgument locator = BlockArgument.findIn((CarpetContext) c, lv, 0);
@@ -973,6 +975,7 @@ public class WorldAccess {
return (_c, _t) -> retval;
});
// Deprecated for block_state()
expression.addLazyFunction("block_properties", -1, (c, t, lv) ->
{
BlockArgument locator = BlockArgument.findIn((CarpetContext) c, lv, 0);
@@ -984,6 +987,31 @@ public class WorldAccess {
return (_c, _t) -> res;
});
// block_state(block)
// block_state(block, property)
expression.addLazyFunction("block_state", -1, (c, t, lv) ->
{
BlockArgument locator = BlockArgument.findIn((CarpetContext) c, lv, 0);
BlockState state = locator.block.getBlockState();
StateManager<Block, BlockState> states = state.getBlock().getStateManager();
if (locator.offset == lv.size())
{
Map<Value,Value> properties = new HashMap<>();
for(Property<?> p : states.getProperties())
{
properties.put(StringValue.of(p.getName()), ValueConversions.fromProperty(state, p));// ValueConversions.fromObject(state.get(p), false));
}
Value ret = MapValue.wrap(properties);
return (_c, _t) -> ret;
}
String tag = lv.get(locator.offset).evalValue(c).getString();
Property<?> property = states.getProperty(tag);
if (property == null)
return LazyValue.NULL;
Value retval = ValueConversions.fromProperty(state, property);
return (_c, _t) -> retval;
});
expression.addLazyFunction("biome", -1, (c, t, lv) -> {
CarpetContext cc = (CarpetContext)c;
BlockArgument locator = BlockArgument.findIn(cc, lv, 0);
@@ -85,14 +85,14 @@ public class Functions {
expression.addLazyFunction("outer", 1, (c, t, lv) ->
{
if (t != Context.LOCALIZATION)
throw new InternalExpressionException("Outer scoping of variables is only possible in function signatures");
throw new InternalExpressionException("Outer scoping of variables is only possible in function signatures.");
return (cc, tt) -> new FunctionAnnotationValue(lv.get(0).evalValue(c), 0);
});
expression.addLazyUnaryOperator("...", Operators.precedence.get("def->..."), false, (c, t, lv) ->
{
if (t != Context.LOCALIZATION)
throw new InternalExpressionException("Outer scoping of variables is only possible in function signatures");
throw new InternalExpressionException("That functionality has not been implemented yet.");
return (cc, tt) -> new FunctionAnnotationValue(lv.evalValue(c), 1);
});
@@ -2,6 +2,7 @@ package carpet.script.value;
import carpet.script.exception.InternalExpressionException;
import carpet.utils.BlockInfo;
import net.minecraft.block.BlockState;
import net.minecraft.block.MapColor;
import net.minecraft.entity.Entity;
import net.minecraft.entity.ai.brain.LookTarget;
@@ -17,10 +18,12 @@ import net.minecraft.scoreboard.ScoreboardObjective;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.state.property.Property;
import net.minecraft.structure.StructurePiece;
import net.minecraft.structure.StructureStart;
import net.minecraft.util.Identifier;
import net.minecraft.util.StringIdentifiable;
import net.minecraft.util.dynamic.GlobalPos;
import net.minecraft.util.math.BlockBox;
import net.minecraft.util.math.BlockPos;
@@ -316,4 +319,15 @@ public class ValueConversions
ret.put(new StringValue("pieces"), ListValue.wrap(pieces));
return MapValue.wrap(ret);
}
public static Value fromProperty(BlockState state, Property<?> p)
{
Comparable<?> object = state.get(p);
if (object instanceof Boolean || object instanceof Number) return StringValue.of(object.toString());
if (object instanceof StringIdentifiable)
{
return StringValue.of(((StringIdentifiable) object).asString());
}
throw new InternalExpressionException("Unknown property type: "+p.getName());
}
}