Browse Source

new snuvi block commands

Kajetan Johannes Hammerle 4 years ago
parent
commit
c98d94eba6
1 changed files with 36 additions and 0 deletions
  1. 36 0
      src/main/java/me/km/snuviscript/commands/BlockCommands.java

+ 36 - 0
src/main/java/me/km/snuviscript/commands/BlockCommands.java

@@ -34,6 +34,30 @@ public class BlockCommands {
             Location l = (Location) in[0].get(sc);
             return l.getWorld().getBlockState(l.getBlockPos()).getBlock().getRegistryName().toString();
         });
+        sm.registerFunction("block.isair", (sc, in) -> {
+            Location l = (Location) in[0].get(sc);
+            return l.getWorld().isAirBlock(l.getBlockPos());
+        });
+        sm.registerFunction("block.countair", (sc, in) -> {
+            Location l = (Location) in[0].get(sc);
+            IWorld w = l.getWorld();
+            BlockPos.Mutable pos = new BlockPos.Mutable(l.getBlockPos());
+            int ox = pos.getX();
+            int oy = pos.getY();
+            int oz = pos.getZ();
+            double counter = 0;
+            for(int x = -1; x <= 1; x++) {
+                for(int y = -1; y <= 1; y++) {
+                    for(int z = -1; z <= 1; z++) {
+                        pos.setPos(ox + x, oy + y, oz + z);
+                        if(w.isAirBlock(pos)) {
+                            counter++;
+                        }
+                    }
+                }
+            }
+            return counter;
+        });
         sm.registerFunction("block.get", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
             return l.getWorld().getBlockState(l.getBlockPos()).getBlock();
@@ -86,6 +110,18 @@ public class BlockCommands {
             }
             l.getWorld().setBlockState(l.getBlockPos(), state, flag);
         });
+        sm.registerFunction("block.newstate", (sc, in) -> {
+            BlockStateParser parser = new BlockStateParser(new StringReader(in[0].getString(sc)), true);
+            return parser.parse(true).getState();
+        });
+        sm.registerConsumer("block.setstate", (sc, in) -> {
+            Location l = (Location) in[0].get(sc);
+            int flag = 2;
+            if(in.length >= 3 && in[2].getBoolean(sc)) {
+                flag |= 16;
+            }
+            l.getWorld().setBlockState(l.getBlockPos(), (BlockState) in[1].get(sc), flag);
+        });
         sm.registerConsumer("block.setsign", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
             SignTileEntity sign = (SignTileEntity) l.getWorld().getTileEntity(l.getBlockPos());