From 71b25fe24292a8feb027711a9c828459a55bca60 Mon Sep 17 00:00:00 2001 From: Iain Beeston Date: Fri, 16 Aug 2019 10:01:57 +0100 Subject: [PATCH 1/2] Upgraded Bukkit from 1.12.2 to 1.14.4 The version of bukkit used by rasberry juice is quite old and when I try to start bukkit with it installed I get an error: org.bukkit.plugin.InvalidPluginException: java.lang.NoSuchFieldError: GOLD_SWORD I think that in version 1.13 of bukkit, `GOLD_SWORD` and `WOOD_SWORD` were renamed to `GOLDEN_SWORD` and `WOODEN_SWORD`, and although that doesn't stop rasberry juice from compiling, the compiled code is incompatible with up-to-date bukkit servers. To fix that I have updated the pom file to compile against bukkit 1.14.4 (the latest on the spigot repository). As you would expect, that produced compile errors at the same place I'm seeing the issue in the bukkit logs: [ERROR] RaspberryJuice/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java:[21,11] error: cannot find symbol [ERROR] [ERROR] could not parse error message: symbol: variable GOLD_SWORD [ERROR] location: class Material [ERROR] RaspberryJuice/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java:24: error: cannot find symbol [ERROR] Material.WOOD_SWORD); [ERROR] ^ Updating those to the current variable names fixes the compile error, and the compiled plugin now works with bukkit. --- pom.xml | 2 +- .../net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index fe1282ed..525c190e 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ org.bukkit bukkit - 1.12.2-R0.1-SNAPSHOT + 1.14.4-R0.1-SNAPSHOT provided diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java index 4b855bdb..5e7dd7b7 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java @@ -18,10 +18,10 @@ public class RaspberryJuicePlugin extends JavaPlugin implements Listener { public static final Set blockBreakDetectionTools = EnumSet.of( Material.DIAMOND_SWORD, - Material.GOLD_SWORD, + Material.GOLDEN_SWORD, Material.IRON_SWORD, Material.STONE_SWORD, - Material.WOOD_SWORD); + Material.WOODEN_SWORD); public ServerListenerThread serverThread; From d114f7858946bc4765f4c3ca2723c6989ef0e180 Mon Sep 17 00:00:00 2001 From: Iain Beeston Date: Tue, 1 Oct 2019 17:22:28 +0100 Subject: [PATCH 2/2] WIP Tried to update RasberryJuice to pass block type strings to bukkit rather than ordinal integers --- README.md | 6 +- .../raspberryjuice/RemoteSession.java | 61 +- src/main/resources/config.yml | 4 +- .../mcpi/api/java/src-api/pi/Block.java | 31 +- .../mcpi/api/java/src-api/pi/Color.java | 4 - .../mcpi/api/java/src-api/pi/Minecraft.java | 8 - .../src-demos/pi/demo/ChristmasTreeDemo.java | 2 +- .../mcpi/api/python/modded/mcpi/block.py | 133 ----- .../mcpi/api/python/modded/mcpi/entity.py | 102 ---- .../mcpi/api/python/modded/mcpi/minecraft.py | 35 +- .../mcpi/api/python/original/mcpi/block.py | 97 ---- .../api/python/original/mcpi/minecraft.py | 24 +- src/main/resources/test/Test.py | 523 ++++++++---------- src/main/resources/test/modded/mcpi/block.py | 133 ----- src/main/resources/test/modded/mcpi/entity.py | 102 ---- .../resources/test/modded/mcpi/minecraft.py | 41 +- .../resources/test/original/mcpi/block.py | 97 ---- .../resources/test/original/mcpi/minecraft.py | 25 +- 18 files changed, 302 insertions(+), 1126 deletions(-) delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/block.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/entity.py delete mode 100644 src/main/resources/mcpi/api/python/original/mcpi/block.py delete mode 100644 src/main/resources/test/modded/mcpi/block.py delete mode 100644 src/main/resources/test/modded/mcpi/entity.py delete mode 100644 src/main/resources/test/original/mcpi/block.py diff --git a/README.md b/README.md index 4737db3f..15c680f9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ A Bukkit plugin which implements the Minecraft Pi Socket API. ### Commands supported - world.get/setBlock - - world.getBlockWithData - world.setBlocks - world.getPlayerIds - world.getBlocks @@ -35,9 +34,8 @@ A Bukkit plugin which implements the Minecraft Pi Socket API. - setDirection, setRotation, setPitch functions - set the 'direction' players and entities are facing - getPlayerId(playerName) - get the entity of a player by name - pollChatPosts() - get events back for posts to the chat - - setSign(x,y,z,block type id,data,line1,line2,line3,line4) - - Wall signs (id=68 or block.SIGN_WALL.id) require data for facing direction 2=north, 3=south, 4=west, 5=east - - Standing signs (id=63 or block.SIGN_STANDING.id) require data for facing rotation (0-15) 0=south, 4=west, 8=north, 12=east + - setSign(x,y,z,material,facing,line1,line2,line3,line4) + - Facing direction can be NORTH, SOUTH, EAST, WEST... - spawnEntity(x,y,z,entity) - creates an entity and returns its entity id. see entity.py for list. - getEntityTypes - returns all the entities supported by the server. - entity.getName(id) - get a player name for entity id. Reverse of getPlayerId(playerName) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 5c0acbbe..d4689810 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -7,6 +7,7 @@ import org.bukkit.*; import org.bukkit.entity.*; import org.bukkit.block.*; +import org.bukkit.block.data.Rotatable; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.util.Vector; @@ -146,7 +147,7 @@ protected void handleCommand(String c, String[] args) { // world.getBlock if (c.equals("world.getBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockTypeIdAt(loc)); + send(world.getBlockAt(loc).getType().name()); // world.getBlocks } else if (c.equals("world.getBlocks")) { @@ -154,23 +155,19 @@ protected void handleCommand(String c, String[] args) { Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); send(getBlocks(loc1, loc2)); - // world.getBlockWithData - } else if (c.equals("world.getBlockWithData")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockTypeIdAt(loc) + "," + world.getBlockAt(loc).getData()); - // world.setBlock } else if (c.equals("world.setBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - updateBlock(world, loc, Integer.parseInt(args[3]), (args.length > 4? Byte.parseByte(args[4]) : (byte) 0)); + System.out.println("args are " + args[0] + ", " + args[1] + ", " + args[2]); + System.out.println("relative location is " + loc.toString()); + updateBlock(world, loc, args[3]); // world.setBlocks } else if (c.equals("world.setBlocks")) { Location loc1 = parseRelativeBlockLocation(args[0], args[1], args[2]); Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); - int blockType = Integer.parseInt(args[6]); - byte data = args.length > 7? Byte.parseByte(args[7]) : (byte) 0; - setCuboid(loc1, loc2, blockType, data); + String blockType = args[6]; + setCuboid(loc1, loc2, blockType); // world.getPlayerIds } else if (c.equals("world.getPlayerIds")) { @@ -473,15 +470,15 @@ protected void handleCommand(String c, String[] args) { } else if (c.equals("world.setSign")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); Block thisBlock = world.getBlockAt(loc); - //blockType should be 68 for wall sign or 63 for standing sign - int blockType = Integer.parseInt(args[3]); - //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east - //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east - byte blockData = Byte.parseByte(args[4]); - if ((thisBlock.getTypeId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setTypeIdAndData(blockType, blockData, true); - } + String blockType = args[3]; + String facingDirection = args[4]; + + updateBlock(thisBlock, blockType); //plugin.getLogger().info("Creating sign at " + loc); + if ( thisBlock.getBlockData() instanceof Rotatable) { + Rotatable rotatable = (Rotatable) thisBlock.getBlockData(); + rotatable.setRotation(BlockFace.valueOf(facingDirection)); + } if ( thisBlock.getState() instanceof Sign ) { Sign sign = (Sign) thisBlock.getState(); for ( int i = 5; i-5 < 4 && i < args.length; i++) { @@ -493,17 +490,15 @@ protected void handleCommand(String c, String[] args) { // world.spawnEntity } else if (c.equals("world.spawnEntity")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - Entity entity = world.spawnEntity(loc, EntityType.fromId(Integer.parseInt(args[3]))); + Entity entity = world.spawnEntity(loc, EntityType.valueOf(args[3])); send(entity.getEntityId()); // world.getEntityTypes } else if (c.equals("world.getEntityTypes")) { StringBuilder bdr = new StringBuilder(); for (EntityType entityType : EntityType.values()) { - if ( entityType.isSpawnable() && entityType.getTypeId() >= 0 ) { - bdr.append(entityType.getTypeId()); - bdr.append(","); - bdr.append(entityType.toString()); + if ( entityType.isSpawnable() && !entityType.name().isEmpty() ) { + bdr.append(entityType.name()); bdr.append("|"); } } @@ -524,7 +519,7 @@ protected void handleCommand(String c, String[] args) { } // create a cuboid of lots of blocks - private void setCuboid(Location pos1, Location pos2, int blockType, byte data) { + private void setCuboid(Location pos1, Location pos2, String blockType) { int minX, maxX, minY, maxY, minZ, maxZ; World world = pos1.getWorld(); minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); @@ -537,7 +532,7 @@ private void setCuboid(Location pos1, Location pos2, int blockType, byte data) { for (int x = minX; x <= maxX; ++x) { for (int z = minZ; z <= maxZ; ++z) { for (int y = minY; y <= maxY; ++y) { - updateBlock(world, x, y, z, blockType, data); + updateBlock(world, x, y, z, blockType); } } } @@ -559,7 +554,7 @@ private String getBlocks(Location pos1, Location pos2) { for (int y = minY; y <= maxY; ++y) { for (int x = minX; x <= maxX; ++x) { for (int z = minZ; z <= maxZ; ++z) { - blockData.append(new Integer(world.getBlockTypeIdAt(x, y, z)).toString() + ","); + blockData.append(world.getBlockAt(x, y, z).getType().name() + ","); } } } @@ -568,20 +563,20 @@ private String getBlocks(Location pos1, Location pos2) { } // updates a block - private void updateBlock(World world, Location loc, int blockType, byte blockData) { + private void updateBlock(World world, Location loc, String blockType) { Block thisBlock = world.getBlockAt(loc); - updateBlock(thisBlock, blockType, blockData); + updateBlock(thisBlock, blockType); } - private void updateBlock(World world, int x, int y, int z, int blockType, byte blockData) { + private void updateBlock(World world, int x, int y, int z, String blockType) { Block thisBlock = world.getBlockAt(x,y,z); - updateBlock(thisBlock, blockType, blockData); + updateBlock(thisBlock, blockType); } - private void updateBlock(Block thisBlock, int blockType, byte blockData) { + private void updateBlock(Block thisBlock, String blockType) { // check to see if the block is different - otherwise leave it - if ((thisBlock.getTypeId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setTypeIdAndData(blockType, blockData, true); + if ((thisBlock.getType().name() != blockType)) { + thisBlock.setType(Material.valueOf(blockType), true); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 46a97e03..40eb573e 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,7 +2,7 @@ port: 4711 # Determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE -location: RELATIVE +location: ABSOLUTE # Determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH -hitclick: RIGHT \ No newline at end of file +hitclick: BOTH diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Block.java b/src/main/resources/mcpi/api/java/src-api/pi/Block.java index 07083745..e17141cd 100644 --- a/src/main/resources/mcpi/api/java/src-api/pi/Block.java +++ b/src/main/resources/mcpi/api/java/src-api/pi/Block.java @@ -7,41 +7,26 @@ */ public class Block { - final int id, data; + final int id; - Block(int id, int data) { + Block(int id) { this.id = id; - this.data = data & 0xf; } /** * Get a block with and withId (use a constant like Block.TNT) */ public static Block id(int id) { - return new Block(id, 0); - } - - /** - * Get a block with extra data - */ - public Block withData(int data) { - return new Block(id, data); + return new Block(id); } static Block decode(String s) { return id(Integer.parseInt(s)); } - static Block decodeWithData(String s) { - String[] ss = s.split(","); - int id = Integer.parseInt(ss[0]); - int data = Integer.parseInt(ss[1]); - return new Block(id, data); - } - @Override public int hashCode() { - return (id << 8) + data; + return (id << 8); } @Override @@ -54,15 +39,9 @@ public boolean equals(Object obj) { @Override public String toString() { - return id + (data == 0 ? "" : "," + data); + return id; } - /** - * Get a wool block of a specific color - */ - public static Block wool(Color color) { - return WOOL.withData(color.woolColorData); - } // Predefined blocks public static final Block // AIR = id(0), diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Color.java b/src/main/resources/mcpi/api/java/src-api/pi/Color.java index dd2330eb..82b3ea7f 100644 --- a/src/main/resources/mcpi/api/java/src-api/pi/Color.java +++ b/src/main/resources/mcpi/api/java/src-api/pi/Color.java @@ -12,8 +12,4 @@ public enum Color { LIGHT_GRAY, CYAN, PURPLE, BLUE, BROWN, GREEN, RED, BLACK; - /** - * the block DATA for the color - */ - final int woolColorData = ordinal(); } diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java b/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java index c9c2ef84..9786f4ff 100644 --- a/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java +++ b/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java @@ -69,14 +69,6 @@ public Block getBlock(Vec position) { return Block.decode(receive()); } - /** - * Get a block - */ - public Block getBlockWithData(Vec position) { - send("world.getBlock", position); - return Block.decodeWithData(receive()); - } - /** * Set a block */ diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java index 6be42ad8..9ee56155 100644 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java +++ b/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java @@ -31,7 +31,7 @@ static void drawChristmasTree(Minecraft mc, Vec p) { // Draw "branches" for (int i = 0; i < tree.length; i++) { - drawDisc(mc, p.add(0, h, 0), tree[tree.length - i - 1], Block.LEAVES.withData(1)); + drawDisc(mc, p.add(0, h, 0), tree[tree.length - i - 1], Block.LEAVES); h++; } diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/block.py b/src/main/resources/mcpi/api/python/modded/mcpi/block.py deleted file mode 100644 index b64bc6c1..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/block.py +++ /dev/null @@ -1,133 +0,0 @@ -class Block: - """Minecraft PI block description. Can be sent to Minecraft.setBlock/s""" - def __init__(self, id, data=0): - self.id = id - self.data = data - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id and self.data == rhs.data - - def __hash__(self): - return (self.id << 8) + self.data - - def withData(self, data): - return Block(self.id, data) - - def __iter__(self): - """Allows a Block to be sent whenever id [and data] is needed""" - return iter((self.id, self.data)) - - def __repr__(self): - return "Block(%d, %d)"%(self.id, self.data) - -AIR = Block(0) -STONE = Block(1) -GRASS = Block(2) -DIRT = Block(3) -COBBLESTONE = Block(4) -WOOD_PLANKS = Block(5) -SAPLING = Block(6) -BEDROCK = Block(7) -WATER_FLOWING = Block(8) -WATER = WATER_FLOWING -WATER_STATIONARY = Block(9) -LAVA_FLOWING = Block(10) -LAVA = LAVA_FLOWING -LAVA_STATIONARY = Block(11) -SAND = Block(12) -GRAVEL = Block(13) -GOLD_ORE = Block(14) -IRON_ORE = Block(15) -COAL_ORE = Block(16) -WOOD = Block(17) -LEAVES = Block(18) -GLASS = Block(20) -LAPIS_LAZULI_ORE = Block(21) -LAPIS_LAZULI_BLOCK = Block(22) -SANDSTONE = Block(24) -BED = Block(26) -RAIL_POWERED = Block(27) -RAIL_DETECTOR = Block(28) -COBWEB = Block(30) -GRASS_TALL = Block(31) -DEAD_BUSH = Block(32) -WOOL = Block(35) -FLOWER_YELLOW = Block(37) -FLOWER_CYAN = Block(38) -MUSHROOM_BROWN = Block(39) -MUSHROOM_RED = Block(40) -GOLD_BLOCK = Block(41) -IRON_BLOCK = Block(42) -STONE_SLAB_DOUBLE = Block(43) -STONE_SLAB = Block(44) -BRICK_BLOCK = Block(45) -TNT = Block(46) -BOOKSHELF = Block(47) -MOSS_STONE = Block(48) -OBSIDIAN = Block(49) -TORCH = Block(50) -FIRE = Block(51) -STAIRS_WOOD = Block(53) -CHEST = Block(54) -DIAMOND_ORE = Block(56) -DIAMOND_BLOCK = Block(57) -CRAFTING_TABLE = Block(58) -FARMLAND = Block(60) -FURNACE_INACTIVE = Block(61) -FURNACE_ACTIVE = Block(62) -SIGN_STANDING = Block(63) -DOOR_WOOD = Block(64) -LADDER = Block(65) -RAIL = Block(66) -STAIRS_COBBLESTONE = Block(67) -SIGN_WALL = Block(68) -DOOR_IRON = Block(71) -REDSTONE_ORE = Block(73) -TORCH_REDSTONE = Block(76) -SNOW = Block(78) -ICE = Block(79) -SNOW_BLOCK = Block(80) -CACTUS = Block(81) -CLAY = Block(82) -SUGAR_CANE = Block(83) -FENCE = Block(85) -PUMPKIN = Block(86) -NETHERRACK = Block(87) -SOUL_SAND = Block(88) -GLOWSTONE_BLOCK = Block(89) -LIT_PUMPKIN = Block(91) -STAINED_GLASS = Block(95) -BEDROCK_INVISIBLE = Block(95) -TRAPDOOR = Block(96) -STONE_BRICK = Block(98) -GLASS_PANE = Block(102) -MELON = Block(103) -FENCE_GATE = Block(107) -STAIRS_BRICK = Block(108) -STAIRS_STONE_BRICK = Block(109) -MYCELIUM = Block(110) -NETHER_BRICK = Block(112) -FENCE_NETHER_BRICK = Block(113) -STAIRS_NETHER_BRICK = Block(114) -END_STONE = Block(121) -WOODEN_SLAB = Block(126) -STAIRS_SANDSTONE = Block(128) -EMERALD_ORE = Block(129) -RAIL_ACTIVATOR = Block(157) -LEAVES2 = Block(161) -TRAPDOOR_IRON = Block(167) -FENCE_SPRUCE = Block(188) -FENCE_BIRCH = Block(189) -FENCE_JUNGLE = Block(190) -FENCE_DARK_OAK = Block(191) -FENCE_ACACIA = Block(192) -DOOR_SPRUCE = Block(193) -DOOR_BIRCH = Block(194) -DOOR_JUNGLE = Block(195) -DOOR_ACACIA = Block(196) -DOOR_DARK_OAK = Block(197) -GLOWING_OBSIDIAN = Block(246) -NETHER_REACTOR_CORE = Block(247) diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/entity.py b/src/main/resources/mcpi/api/python/modded/mcpi/entity.py deleted file mode 100644 index b78a4850..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/entity.py +++ /dev/null @@ -1,102 +0,0 @@ -class Entity: - '''Minecraft PI entity description. Can be sent to Minecraft.spawnEntity''' - - def __init__(self, id, name = None): - self.id = id - self.name = name - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id - - def __hash__(self): - return self.id - - def __iter__(self): - '''Allows an Entity to be sent whenever id is needed''' - return iter((self.id,)) - - def __repr__(self): - return 'Entity(%d)'%(self.id) - -EXPERIENCE_ORB = Entity(2, "EXPERIENCE_ORB") -AREA_EFFECT_CLOUD = Entity(3, "AREA_EFFECT_CLOUD") -ELDER_GUARDIAN = Entity(4, "ELDER_GUARDIAN") -WITHER_SKELETON = Entity(5, "WITHER_SKELETON") -STRAY = Entity(6, "STRAY") -EGG = Entity(7, "EGG") -LEASH_HITCH = Entity(8, "LEASH_HITCH") -PAINTING = Entity(9, "PAINTING") -ARROW = Entity(10, "ARROW") -SNOWBALL = Entity(11, "SNOWBALL") -FIREBALL = Entity(12, "FIREBALL") -SMALL_FIREBALL = Entity(13, "SMALL_FIREBALL") -ENDER_PEARL = Entity(14, "ENDER_PEARL") -ENDER_SIGNAL = Entity(15, "ENDER_SIGNAL") -THROWN_EXP_BOTTLE = Entity(17, "THROWN_EXP_BOTTLE") -ITEM_FRAME = Entity(18, "ITEM_FRAME") -WITHER_SKULL = Entity(19, "WITHER_SKULL") -PRIMED_TNT = Entity(20, "PRIMED_TNT") -HUSK = Entity(23, "HUSK") -SPECTRAL_ARROW = Entity(24, "SPECTRAL_ARROW") -SHULKER_BULLET = Entity(25, "SHULKER_BULLET") -DRAGON_FIREBALL = Entity(26, "DRAGON_FIREBALL") -ZOMBIE_VILLAGER = Entity(27, "ZOMBIE_VILLAGER") -SKELETON_HORSE = Entity(28, "SKELETON_HORSE") -ZOMBIE_HORSE = Entity(29, "ZOMBIE_HORSE") -ARMOR_STAND = Entity(30, "ARMOR_STAND") -DONKEY = Entity(31, "DONKEY") -MULE = Entity(32, "MULE") -EVOKER_FANGS = Entity(33, "EVOKER_FANGS") -EVOKER = Entity(34, "EVOKER") -VEX = Entity(35, "VEX") -VINDICATOR = Entity(36, "VINDICATOR") -ILLUSIONER = Entity(37, "ILLUSIONER") -MINECART_COMMAND = Entity(40, "MINECART_COMMAND") -BOAT = Entity(41, "BOAT") -MINECART = Entity(42, "MINECART") -MINECART_CHEST = Entity(43, "MINECART_CHEST") -MINECART_FURNACE = Entity(44, "MINECART_FURNACE") -MINECART_TNT = Entity(45, "MINECART_TNT") -MINECART_HOPPER = Entity(46, "MINECART_HOPPER") -MINECART_MOB_SPAWNER = Entity(47, "MINECART_MOB_SPAWNER") -CREEPER = Entity(50, "CREEPER") -SKELETON = Entity(51, "SKELETON") -SPIDER = Entity(52, "SPIDER") -GIANT = Entity(53, "GIANT") -ZOMBIE = Entity(54, "ZOMBIE") -SLIME = Entity(55, "SLIME") -GHAST = Entity(56, "GHAST") -PIG_ZOMBIE = Entity(57, "PIG_ZOMBIE") -ENDERMAN = Entity(58, "ENDERMAN") -CAVE_SPIDER = Entity(59, "CAVE_SPIDER") -SILVERFISH = Entity(60, "SILVERFISH") -BLAZE = Entity(61, "BLAZE") -MAGMA_CUBE = Entity(62, "MAGMA_CUBE") -ENDER_DRAGON = Entity(63, "ENDER_DRAGON") -WITHER = Entity(64, "WITHER") -BAT = Entity(65, "BAT") -WITCH = Entity(66, "WITCH") -ENDERMITE = Entity(67, "ENDERMITE") -GUARDIAN = Entity(68, "GUARDIAN") -SHULKER = Entity(69, "SHULKER") -PIG = Entity(90, "PIG") -SHEEP = Entity(91, "SHEEP") -COW = Entity(92, "COW") -CHICKEN = Entity(93, "CHICKEN") -SQUID = Entity(94, "SQUID") -WOLF = Entity(95, "WOLF") -MUSHROOM_COW = Entity(96, "MUSHROOM_COW") -SNOWMAN = Entity(97, "SNOWMAN") -OCELOT = Entity(98, "OCELOT") -IRON_GOLEM = Entity(99, "IRON_GOLEM") -HORSE = Entity(100, "HORSE") -RABBIT = Entity(101, "RABBIT") -POLAR_BEAR = Entity(102, "POLAR_BEAR") -LLAMA = Entity(103, "LLAMA") -LLAMA_SPIT = Entity(104, "LLAMA_SPIT") -PARROT = Entity(105, "PARROT") -VILLAGER = Entity(120, "VILLAGER") -ENDER_CRYSTAL = Entity(200, "ENDER_CRYSTAL") \ No newline at end of file diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py index bffb491d..bf02b82e 100644 --- a/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py @@ -1,8 +1,6 @@ from .connection import Connection from .vec3 import Vec3 from .event import BlockEvent, ChatEvent -from .entity import Entity -from .block import Block import math from .util import flatten @@ -28,9 +26,6 @@ - setSign() - spawnEntity()""" -def intFloor(*args): - return [int(math.floor(x)) for x in flatten(args)] - class CmdPositioner: """Methods for setting and getting positions""" def __init__(self, connection, packagePrefix): @@ -53,7 +48,7 @@ def getTilePos(self, id): def setTilePos(self, id, *args): """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) + self.conn.send(self.pkg + b".setTile", id, args) def setDirection(self, id, *args): """Set entity direction (entityId:int, x,y,z)""" @@ -176,32 +171,24 @@ def __init__(self, connection): self.events = CmdEvents(connection) def getBlock(self, *args): - """Get block (x,y,z) => id:int""" - return int(self.conn.sendReceive(b"world.getBlock", intFloor(args))) - - def getBlockWithData(self, *args): - """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", intFloor(args)) - return Block(*list(map(int, ans.split(",")))) + """Get block (x,y,z) => material:string""" + return self.conn.sendReceive(b"world.getBlock", args) def getBlocks(self, *args): - """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - s = self.conn.sendReceive(b"world.getBlocks", intFloor(args)) + """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [material:string]""" + s = self.conn.sendReceive(b"world.getBlocks", args) return map(int, s.split(",")) def setBlock(self, *args): """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", intFloor(args)) + self.conn.send(b"world.setBlock", args) def setBlocks(self, *args): """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args)) + self.conn.send(b"world.setBlocks", args) def setSign(self, *args): - """Set a sign (x,y,z,id,data,[line1,line2,line3,line4]) - - Wall signs (id=68) require data for facing direction 2=north, 3=south, 4=west, 5=east - Standing signs (id=63) require data for facing rotation (0-15) 0=south, 4=west, 8=north, 12=east + """Set a sign (x,y,z,material,facing,[line1,line2,line3,line4]) @author: Tim Cummings https://www.triptera.com.au/wordpress/""" lines = [] flatargs = [] @@ -209,15 +196,15 @@ def setSign(self, *args): flatargs.append(arg) for flatarg in flatargs[5:]: lines.append(flatarg.replace(",",";").replace(")","]").replace("(","[")) - self.conn.send(b"world.setSign",intFloor(flatargs[0:5]) + lines) + self.conn.send(b"world.setSign",flatargs[0:5] + lines) def spawnEntity(self, *args): """Spawn entity (x,y,z,id,[data])""" - return int(self.conn.sendReceive(b"world.spawnEntity", intFloor(args))) + return int(self.conn.sendReceive(b"world.spawnEntity", args)) def getHeight(self, *args): """Get the height of the world (x,z) => int""" - return int(self.conn.sendReceive(b"world.getHeight", intFloor(args))) + return int(self.conn.sendReceive(b"world.getHeight", args)) def getPlayerEntityIds(self): """Get the entity ids of the connected players => [id:int]""" diff --git a/src/main/resources/mcpi/api/python/original/mcpi/block.py b/src/main/resources/mcpi/api/python/original/mcpi/block.py deleted file mode 100644 index 52c85023..00000000 --- a/src/main/resources/mcpi/api/python/original/mcpi/block.py +++ /dev/null @@ -1,97 +0,0 @@ -class Block: - """Minecraft PI block description. Can be sent to Minecraft.setBlock/s""" - def __init__(self, id, data=0): - self.id = id - self.data = data - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id and self.data == rhs.data - - def __hash__(self): - return (self.id << 8) + self.data - - def withData(self, data): - return Block(self.id, data) - - def __iter__(self): - """Allows a Block to be sent whenever id [and data] is needed""" - return iter((self.id, self.data)) - - def __repr__(self): - return "Block(%d, %d)"%(self.id, self.data) - -AIR = Block(0) -STONE = Block(1) -GRASS = Block(2) -DIRT = Block(3) -COBBLESTONE = Block(4) -WOOD_PLANKS = Block(5) -SAPLING = Block(6) -BEDROCK = Block(7) -WATER_FLOWING = Block(8) -WATER = WATER_FLOWING -WATER_STATIONARY = Block(9) -LAVA_FLOWING = Block(10) -LAVA = LAVA_FLOWING -LAVA_STATIONARY = Block(11) -SAND = Block(12) -GRAVEL = Block(13) -GOLD_ORE = Block(14) -IRON_ORE = Block(15) -COAL_ORE = Block(16) -WOOD = Block(17) -LEAVES = Block(18) -GLASS = Block(20) -LAPIS_LAZULI_ORE = Block(21) -LAPIS_LAZULI_BLOCK = Block(22) -SANDSTONE = Block(24) -BED = Block(26) -COBWEB = Block(30) -GRASS_TALL = Block(31) -WOOL = Block(35) -FLOWER_YELLOW = Block(37) -FLOWER_CYAN = Block(38) -MUSHROOM_BROWN = Block(39) -MUSHROOM_RED = Block(40) -GOLD_BLOCK = Block(41) -IRON_BLOCK = Block(42) -STONE_SLAB_DOUBLE = Block(43) -STONE_SLAB = Block(44) -BRICK_BLOCK = Block(45) -TNT = Block(46) -BOOKSHELF = Block(47) -MOSS_STONE = Block(48) -OBSIDIAN = Block(49) -TORCH = Block(50) -FIRE = Block(51) -STAIRS_WOOD = Block(53) -CHEST = Block(54) -DIAMOND_ORE = Block(56) -DIAMOND_BLOCK = Block(57) -CRAFTING_TABLE = Block(58) -FARMLAND = Block(60) -FURNACE_INACTIVE = Block(61) -FURNACE_ACTIVE = Block(62) -DOOR_WOOD = Block(64) -LADDER = Block(65) -STAIRS_COBBLESTONE = Block(67) -DOOR_IRON = Block(71) -REDSTONE_ORE = Block(73) -SNOW = Block(78) -ICE = Block(79) -SNOW_BLOCK = Block(80) -CACTUS = Block(81) -CLAY = Block(82) -SUGAR_CANE = Block(83) -FENCE = Block(85) -GLOWSTONE_BLOCK = Block(89) -BEDROCK_INVISIBLE = Block(95) -STONE_BRICK = Block(98) -GLASS_PANE = Block(102) -MELON = Block(103) -FENCE_GATE = Block(107) -GLOWING_OBSIDIAN = Block(246) -NETHER_REACTOR_CORE = Block(247) diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index 1d1f293d..ff5b4c4d 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -1,7 +1,6 @@ from .connection import Connection from .vec3 import Vec3 from .event import BlockEvent -from .block import Block import math from .util import flatten @@ -18,9 +17,6 @@ @author: Aron Nieminen, Mojang AB""" -def intFloor(*args): - return [int(math.floor(x)) for x in flatten(args)] - class CmdPositioner: """Methods for setting and getting positions""" def __init__(self, connection, packagePrefix): @@ -43,7 +39,7 @@ def getTilePos(self, id): def setTilePos(self, id, *args): """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) + self.conn.send(self.pkg + b".setTile", id, args) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -119,31 +115,27 @@ def __init__(self, connection): self.events = CmdEvents(connection) def getBlock(self, *args): - """Get block (x,y,z) => id:int""" - return int(self.conn.sendReceive(b"world.getBlock", intFloor(args))) + """Get block (x,y,z) => material:string""" + return self.conn.sendReceive(b"world.getBlock", args) - def getBlockWithData(self, *args): - """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", intFloor(args)) - return Block(*list(map(int, ans.split(",")))) """ @TODO """ def getBlocks(self, *args): - """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - return int(self.conn.sendReceive(b"world.getBlocks", intFloor(args))) + """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [material:string]""" + return self.conn.sendReceive(b"world.getBlocks", args) def setBlock(self, *args): """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", intFloor(args)) + self.conn.send(b"world.setBlock", args) def setBlocks(self, *args): """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args)) + self.conn.send(b"world.setBlocks", args) def getHeight(self, *args): """Get the height of the world (x,z) => int""" - return int(self.conn.sendReceive(b"world.getHeight", intFloor(args))) + return int(self.conn.sendReceive(b"world.getHeight", args)) def getPlayerEntityIds(self): """Get the entity ids of the connected players => [id:int]""" diff --git a/src/main/resources/test/Test.py b/src/main/resources/test/Test.py index 87598f83..c08d2aa0 100644 --- a/src/main/resources/test/Test.py +++ b/src/main/resources/test/Test.py @@ -4,9 +4,6 @@ import original.mcpi.minecraft as minecraft import modded.mcpi.minecraft as minecraftmodded -import original.mcpi.block as block -import modded.mcpi.block as blockmodded -import modded.mcpi.entity as entitymodded import time import math @@ -28,13 +25,18 @@ def runBlockTests(mc): "GLOWSTONE_BLOCK","GLASS_PANE","LIT_PUMPKIN","END_STONE","EMERALD_ORE","GLOWING_OBSIDIAN","ICE", "SNOW_BLOCK","MYCELIUM","NETHER_BRICK","NETHER_REACTOR_CORE"] fences=["FENCE","FENCE_NETHER_BRICK","FENCE_SPRUCE","FENCE_BIRCH","FENCE_JUNGLE","FENCE_DARK_OAK","FENCE_ACACIA"] - woods=["WOOD_PLANKS"] - trees=["WOOD","LEAVES"] - trees2=["LEAVES2"] #options are acacia and dark oak + woods=["ACACIA_PLANKS","BIRCH_PLANKS","DARK_OAK_PLANKS","JUNGLE_PLANKS","OAK_PLANKS","SPRUCE_PLANKS"] + trees=["ACACIA_LOG","BIRCH_LOG","DARK_OAK_LOG","JUNGLE_LOG","OAK_LOG","SPRUCE_LOG","ACACIA_LEAVES","BIRCH_LEAVES","DARK_OAK_LEAVES", + "JUNGLE_LEAVES","OAK_LEAVES","SPRUCE_LEAVES"] plants=["DEAD_BUSH","FLOWER_CYAN","FLOWER_YELLOW","SUGAR_CANE"] liquids=["WATER","LAVA"] beds=["BED"] - coloureds=["WOOL","STAINED_GLASS"] + coloureds=["BLACK_WOOL","BLUE_WOOL","BROWN_WOOL","CYAN_WOOL","GRAY_WOOL","GREEN_WOOL","LIGHT_BLUE_WOOL","LIGHT_GRAY_WOOL", + "LIME_WOOL","MAGENTA_WOOL","ORANGE_WOOL","PINK_WOOL","PURPLE_WOOL","RED_WOOL","WHITE_WOOL","YELLOW_WOOL", + "BLACK_STAINED_GLASS","BLUE_STAINED_GLASS","BROWN_STAINED_GLASS","CYAN_STAINED_GLASS","GRAY_STAINED_GLASS", + "GREEN_STAINED_GLASS","LIGHT_BLUE_STAINED_GLASS","LIGHT_GRAY_STAINED_GLASS","LIME_STAINED_GLASS","MAGENTA_STAINED_GLASS", + "ORANGE_STAINED_GLASS","PINK_STAINED_GLASS","PURPLE_STAINED_GLASS","RED_STAINED_GLASS","WHITE_STAINED_GLASS", + "YELLOW_STAINED_GLASS"] flats=["RAIL","RAIL_POWERED","RAIL_DETECTOR","RAIL_ACTIVATOR","TRAPDOOR","TRAPDOOR_IRON"] slabs=["STONE_SLAB","STONE_SLAB_DOUBLE","WOODEN_SLAB"] torches=["TORCH","TORCH_REDSTONE"] @@ -44,14 +46,15 @@ def runBlockTests(mc): doors=["DOOR_WOOD","DOOR_IRON","DOOR_SPRUCE","DOOR_BIRCH","DOOR_JUNGLE","DOOR_ACACIA","DOOR_DARK_OAK"] gates=["FENCE_GATE"] wallmounts=["SIGN_WALL","LADDER","CHEST","FURNACE_INACTIVE","FURNACE_ACTIVE"] - saplings=["SAPLING"] - tallgrasses=["GRASS_TALL"] + saplings=["ACACIA_SAPLING","BIRCH_SAPLING","DARK_OAK_SAPLING","JUNGLE_SAPLING","OAK_SAPLING","SPRUCE_SAPLING"] + tallgrasses=["TALL_GRASS"] stonebricks=["STONE_BRICK"] snowblocks=["SNOW"] sandstones=["SANDSTONE"] cacti=["CACTUS"] mushrooms=["MUSHROOM_BROWN","MUSHROOM_RED"] - + facings=["SOUTH","SOUTH_WEST","WEST","NORTH_WEST","NORTH","NORTH_EAST","EAST","SOUTH_EAST"] + # location for platform showing all block types xtest = 0 ytest = 50 @@ -61,36 +64,28 @@ def runBlockTests(mc): # note some blocks have different names but same ids so they only have to be tested once per id # create a map of ids to names so can see which ones haven't been tested by name untested=set() - blockmap={} - for varname in dir(blockmodded): - var=getattr(blockmodded,varname) + tested=set() + for varname in dir(blocks): try: - # check var has data and id and add id to untested set - var.data - untested.add(var.id) - try: - names=blockmap[var.id] - names.append(varname) - except KeyError: - blockmap[var.id]=[varname] + untested.add(varname) except AttributeError: #only interested in objects with an id and data which behave like Blocks pass - signmount=blockmodded.STONE - sign=blockmodded.SIGN_STANDING.withData(12) - signid=sign.id + signmount="STONE" + signface="SOUTH_WEST" + sign="SIGN_STANDING" x=xtest y=ytest-1 z=ztest - mc.setBlocks(x,y,z,x+100,y,z+100,blockmodded.STONE) + mc.setBlocks(x,y,z,x+100,y,z+100,"STONE") time.sleep(1) #clear the area in segments, otherwise it breaks the server #clearing area - #mc.setBlocks(x,y+1,z,x+100,y+50,z+100,blockmodded.AIR) + #mc.setBlocks(x,y+1,z,x+100,y+50,z+100,"AIR") for y_inc in range(1, 10): - mc.setBlocks(x,y+y_inc,z,x+100,y+y_inc,z+100,blockmodded.AIR) + mc.setBlocks(x,y+y_inc,z,x+100,y+y_inc,z+100,"AIR") time.sleep(2) mc.player.setTilePos(xtest, ytest, ztest) time.sleep(1) @@ -98,345 +93,278 @@ def runBlockTests(mc): y=ytest z=ztest+10 for key in solids + gases + flats + fences: - b = getattr(blockmodded,key) z += 1 mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) time.sleep(1) x=xtest+20 z=ztest+10 for key in trees: - for data in range(16): - b = getattr(blockmodded,key).withData(data) - z += 1 - mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) - for key in trees2: - for data in [0,1,4,5,8,9,12,13]: - b = getattr(blockmodded,key).withData(data) - z += 1 - mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + z += 1 + mc.setBlock(x-1,y,z,signmount) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) for key in woods + stonebricks: - for data in range(4): - b = getattr(blockmodded,key).withData(data) - z += 1 - mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + z += 1 + mc.setBlock(x-1,y,z,signmount) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) for key in sandstones: - for data in range(3): - b = getattr(blockmodded,key).withData(data) - z += 1 - mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + z += 1 + mc.setBlock(x-1,y,z,signmount) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) for key in saplings + tallgrasses: - for data in range(4): - b = getattr(blockmodded,key).withData(data) - z += 1 - mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y-1,z,blockmodded.DIRT) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + z += 1 + mc.setBlock(x-1,y,z,signmount) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y-1,z,"DIRT") + mc.setBlock(x,y,z,key) + untested.discard(key) for key in plants: - b = getattr(blockmodded,key) z += 1 mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y-1,z,blockmodded.DIRT) - mc.setBlock(x+1,y-2,z,blockmodded.DIRT) - mc.setBlock(x+1,y-1,z,blockmodded.WATER) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y-1,z,"DIRT") + mc.setBlock(x+1,y-2,z,"DIRT") + mc.setBlock(x+1,y-1,z,"WATER") + mc.setBlock(x,y,z,key) + untested.discard(key) for key in cacti: - b = getattr(blockmodded,key) z += 1 mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) # cactus has to be on sand and away from other blocks - mc.setBlock(x+1,y-2,z,blockmodded.DIRT) - mc.setBlock(x+1,y-1,z,blockmodded.SAND) + mc.setBlock(x+1,y-2,z,"DIRT") + mc.setBlock(x+1,y-1,z,"SAND") mc.setBlock(x+1,y,z,b) - untested.discard(b.id) + untested.discard(key) for key in mushrooms: - b = getattr(blockmodded,key) z += 1 mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlocks(x-3,y+3,z-3,x+3,y+3,z+3,blockmodded.STONE) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + mc.setSign(x-1,y+1,z,key,signface,"facing=" + signface,"material=" + key) + mc.setBlocks(x-3,y+3,z-3,x+3,y+3,z+3,"STONE") + mc.setBlock(x,y,z,key) + untested.discard(key) time.sleep(1) x=xtest+30 z=ztest+10 for key in coloureds: - for data in range(16): - b = getattr(blockmodded,key).withData(data) - z += 1 - mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + z += 1 + mc.setBlock(x-1,y,z,signmount) + mc.setSign(x-1,y+1,z,sign,"facing=" + signface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) for key in beds: #RaspberryJuice can't do coloured beds - b = getattr(blockmodded,key) z += 10 mc.setBlock(x-1,y,z,signmount) mc.setBlock(x+1,y,z,signmount) mc.setBlock(x,y,z-1,signmount) mc.setBlock(x,y,z+1,signmount) - mc.setSign(x-1,y+1,z,signid,4,key,"id=" + str(b.id),"head=11","foot=3") - mc.setSign(x+1,y+1,z,signid,12,key,"id=" + str(b.id),"head=9","foot=1") - mc.setSign(x,y+1,z-1,signid,8,key,"id=" + str(b.id),"head=8","foot=0") - mc.setSign(x,y+1,z+1,signid,0,key,"id=" + str(b.id),"head=10","foot=2") - mc.setBlock(x+3,y,z,b.id,1) - mc.setBlock(x+2,y,z,b.id,9) - mc.setBlock(x-3,y,z,b.id,3) - mc.setBlock(x-2,y,z,b.id,11) - mc.setBlock(x,y,z-3,b.id,0) - mc.setBlock(x,y,z-2,b.id,8) - mc.setBlock(x,y,z+3,b.id,2) - mc.setBlock(x,y,z+2,b.id,10) - untested.discard(b.id) - b=blockmodded.SIGN_STANDING - mc.setSign (x-2,y,z-5,b.id,15,"SIGN_STANDING","id=" + str(b.id),"data=15","rotation") - mc.setSign (x-4,y,z-4,b.id,14,"SIGN_STANDING","id=" + str(b.id),"data=14","rotation") - mc.setSign (x-5,y,z-2,b.id,13,"SIGN_STANDING","id=" + str(b.id),"data=13","rotation") - mc.setSign (x-6,y,z ,b.id,12,"SIGN_STANDING","id=" + str(b.id),"data=12","rotation") - mc.setSign (x-5,y,z+2,b.id,11,"SIGN_STANDING","id=" + str(b.id),"data=11","rotation") - mc.setSign (x-4,y,z+4,b.id,10,"SIGN_STANDING","id=" + str(b.id),"data=10","rotation") - mc.setSign (x-2,y,z+5,b.id, 9,"SIGN_STANDING","id=" + str(b.id),"data= 9","rotation") - mc.setSign (x ,y,z+6,b.id, 8,"SIGN_STANDING","id=" + str(b.id),"data= 8","rotation") - mc.setSign (x+2,y,z+5,b.id, 7,"SIGN_STANDING","id=" + str(b.id),"data= 7","rotation") - mc.setSign (x+4,y,z+4,b.id, 6,"SIGN_STANDING","id=" + str(b.id),"data= 6","rotation") - mc.setSign (x+5,y,z+2,b.id, 5,"SIGN_STANDING","id=" + str(b.id),"data= 5","rotation") - mc.setSign (x+6,y,z ,b.id, 4,"SIGN_STANDING","id=" + str(b.id),"data= 4","rotation") - mc.setSign (x+5,y,z-2,b.id, 3,"SIGN_STANDING","id=" + str(b.id),"data= 3","rotation") - mc.setSign (x+4,y,z-4,b.id, 2,"SIGN_STANDING","id=" + str(b.id),"data= 2","rotation") - mc.setSign (x+2,y,z-5,b.id, 1,"SIGN_STANDING","id=" + str(b.id),"data= 1","rotation") - mc.setSign (x ,y,z-6,b.id, 0,"SIGN_STANDING","id=" + str(b.id),"data= 0","rotation") - untested.discard(b.id) + mc.setSign(x-1,y+1,z,sign,"WEST","material=" + sign,"facing=WEST","head=11","foot=3") + mc.setSign(x+1,y+1,z,sign,"EAST","material=" + sign,"facing=EAST","head=9","foot=1") + mc.setSign(x,y+1,z-1,sign,"NORTH","material=" + sign,"facing=NORTH","head=8","foot=0") + mc.setSign(x,y+1,z+1,sign,"SOUTH","material=" + sign,"facing=SOUTH","head=10","foot=2") + mc.setBlock(x+3,y,z,key) + mc.setBlock(x+2,y,z,key) + mc.setBlock(x-3,y,z,key) + mc.setBlock(x-2,y,z,key) + mc.setBlock(x,y,z-3,key) + mc.setBlock(x,y,z-2,key) + mc.setBlock(x,y,z+3,key) + mc.setBlock(x,y,z+2,key) + untested.discard(key) + mc.setSign (x-2,y,z-5,"SIGN_STANDING","SOUTH_SOUTH_EAST","facing=SOUTH_SOUTH_EAST","rotation") + mc.setSign (x-4,y,z-4,"SIGN_STANDING","SOUTH_EAST", "facing=SOUTH_EAST", "rotation") + mc.setSign (x-5,y,z-2,"SIGN_STANDING","EAST_SOUTH_EAST", "facing=EAST_SOUTH_EAST", "rotation") + mc.setSign (x-6,y,z ,"SIGN_STANDING","EAST", "facing=EAST", "rotation") + mc.setSign (x-5,y,z+2,"SIGN_STANDING","EAST_NORTH_EAST", "facing=EAST_NORTH_EAST", "rotation") + mc.setSign (x-4,y,z+4,"SIGN_STANDING","NORTH_EAST", "facing=NORTH_EAST", "rotation") + mc.setSign (x-2,y,z+5,"SIGN_STANDING","NORTH_NORTH_EAST","facing=NORTH_NORTH_EAST","rotation") + mc.setSign (x ,y,z+6,"SIGN_STANDING","NORTH", "facing=NORTH", "rotation") + mc.setSign (x+2,y,z+5,"SIGN_STANDING","NORTH_NORTH_WEST","facing=NORTH_NORTH_WEST","rotation") + mc.setSign (x+4,y,z+4,"SIGN_STANDING","NORTH_WEST", "facing=NORTH_WEST", "rotation") + mc.setSign (x+5,y,z+2,"SIGN_STANDING","WEST_NORTH_WEST", "facing=WEST_NORTH_WEST", "rotation") + mc.setSign (x+6,y,z ,"SIGN_STANDING","WEST", "facing=WEST", "rotation") + mc.setSign (x+5,y,z-2,"SIGN_STANDING","WEST_SOUTH_WEST", "facing=WEST_SOUTH_WEST", "rotation") + mc.setSign (x+4,y,z-4,"SIGN_STANDING","SOUTH_WEST", "facing=SOUTH_WEST", "rotation") + mc.setSign (x+2,y,z-5,"SIGN_STANDING","SOUTH_SOUTH_WEST","facing=SOUTH_SOUTH_WEST","rotation") + mc.setSign (x ,y,z-6,"SIGN_STANDING","SOUTH", "facing=SOUTH", "rotation") + untested.discard(key) time.sleep(1) x=xtest+40 z=ztest+10 for key in liquids: z += 1 - mc.setBlocks(x-1,y,z,x+1,y,z+10,blockmodded.STONE) - b = getattr(blockmodded,key + "_STATIONARY") + mc.setBlocks(x-1,y,z,x+1,y,z+10,"STONE") z += 1 - mc.setSign(x-1,y+1,z,sign,key+"_STATIONARY","id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) - for data in range(8): - b = getattr(blockmodded,key).withData(data) + mc.setSign(x-1,y+1,z,sign,signface,"facing=" + signface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) + for newface in facings: z += 1 - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + mc.setSign(x-1,y+1,z,key,newface,"facing=" + newface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) for key in snowblocks: z += 1 - mc.setBlocks(x-1,y,z,x-1,y,z+8,blockmodded.STONE) - for data in range(8): - b = getattr(blockmodded,key).withData(data) + mc.setBlocks(x-1,y,z,x-1,y,z+8,"STONE") + for newface in facings: z += 1 - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + mc.setSign(x-1,y+1,z,key,newface,"facing=" + newface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) time.sleep(1) x=xtest+50 z=ztest+10 for key in slabs: - for data in range(8): - b = getattr(blockmodded,key).withData(data) + for newface in facings: z += 1 mc.setBlock(x-1,y,z,signmount) - mc.setSign(x-1,y+1,z,sign,key,"id=" + str(b.id),"data=" + str(b.data)) - mc.setBlock(x,y,z,b) - untested.discard(b.id) + mc.setSign(x-1,y+1,z,key,newface,"facing=" + newface,"material=" + key) + mc.setBlock(x,y,z,key) + untested.discard(key) time.sleep(1) x=xtest+60 y=ytest z=ztest+10 - wallsignid=blockmodded.SIGN_WALL.id + wallsign="SIGN_WALL" for key in wallmounts: - b = getattr(blockmodded,key) mc.setBlock(x,y,z,signmount) mc.setBlock(x,y+1,z,signmount) #north - mc.setBlock(x,y,z-1,b.id,2) - mc.setSign(x,y+1,z-1,wallsignid,2,key,"id=" + str(b.id),"data=2","north") + mc.setBlock(x,y,z-1,key) + mc.setSign(x,y+1,z-1,wallsign,"NORTH","north") #south - mc.setBlock(x,y,z+1,b.id,3) - mc.setSign(x,y+1,z+1,wallsignid,3,key,"id=" + str(b.id),"data=3","south") + mc.setBlock(x,y,z+1,key) + mc.setSign(x,y+1,z+1,wallsign,"SOUTH","south") #west - mc.setBlock(x-1,y,z,b.id,4) - mc.setSign(x-1,y+1,z,wallsignid,4,key,"id=" + str(b.id),"data=4","west") + mc.setBlock(x-1,y,z,key) + mc.setSign(x-1,y+1,z,wallsign,"WEST","west") #east - mc.setBlock(x+1,y,z,b.id,5) - mc.setSign(x+1,y+1,z,wallsignid,5,key,"id=" + str(b.id),"data=5","east") + mc.setBlock(x+1,y,z,key) + mc.setSign(x+1,y+1,z,wallsign,"EAST","east") y+=2 - untested.discard(b.id) - #untested.discard(wallsignid) + untested.discard(key) + #untested.discard(wallsign) time.sleep(1) x=xtest+60 y=ytest z=ztest+20 for key in torches: - b = getattr(blockmodded,key) mc.setBlocks(x,y,z,x,y+2,z,signmount) #north - mc.setBlock(x,y,z-1,b.id,4) - mc.setSign(x,y+1,z-1,wallsignid,2,key,"id=" + str(b.id),"data=4","north") + mc.setBlock(x,y,z-1,key) + mc.setSign(x,y+1,z-1,wallsign,"NORTH","facing=NORTH") #south - mc.setBlock(x,y,z+1,b.id,3) - mc.setSign(x,y+1,z+1,wallsignid,3,key,"id=" + str(b.id),"data=3","south") + mc.setBlock(x,y,z+1,key) + mc.setSign(x,y+1,z+1,wallsign,"SOUTH","facing=SOUTH") #west - mc.setBlock(x-1,y,z,b.id,2) - mc.setSign(x-1,y+1,z,wallsignid,4,key,"id=" + str(b.id),"data=2","west") + mc.setBlock(x-1,y,z,key) + mc.setSign(x-1,y+1,z,wallsign,"WEST","facing=WEST") #east - mc.setBlock(x+1,y,z,b.id,1) - mc.setSign(x+1,y+1,z,wallsignid,5,key,"id=" + str(b.id),"data=1","east") + mc.setBlock(x+1,y,z,key) + mc.setSign(x+1,y+1,z,wallsign,"EAST","facing=EAST") #up - mc.setBlock(x,y+3,z,b.id,5) - mc.setSign(x+1,y+2,z,wallsignid,5,key,"id=" + str(b.id),"data=5","up") + mc.setBlock(x,y+3,z,key) + mc.setSign(x+1,y+2,z,wallsign,"UP","facing=UP") z+=10 - untested.discard(b.id) + untested.discard(key) time.sleep(1) x=xtest+70 y=ytest z=ztest+10 for key in doors: - b = getattr(blockmodded,key) mc.setBlocks(x,y,z,x+3,y+2,z+3,signmount) - mc.setBlocks(x+1,y,z+1,x+2,y+1,z+2,blockmodded.AIR) - mc.setBlock(x+1,y ,z ,b.id,1) - mc.setBlock(x+1,y+1,z ,b.id,9) - mc.setBlock(x+2,y ,z ,b.id,1) - mc.setBlock(x+2,y+1,z ,b.id,8) - mc.setBlock(x ,y ,z+1,b.id,0) - mc.setBlock(x ,y+1,z+1,b.id,8) - mc.setBlock(x ,y ,z+2,b.id,0) - mc.setBlock(x ,y+1,z+2,b.id,9) - mc.setBlock(x+3,y ,z+1,b.id,2) - mc.setBlock(x+3,y+1,z+1,b.id,9) - mc.setBlock(x+3,y ,z+2,b.id,2) - mc.setBlock(x+3,y+1,z+2,b.id,8) - mc.setBlock(x+1,y ,z+3,b.id,3) - mc.setBlock(x+1,y+1,z+3,b.id,8) - mc.setBlock(x+2,y ,z+3,b.id,3) - mc.setBlock(x+2,y+1,z+3,b.id,9) - mc.setSign (x ,y ,z-1,wallsignid,2,key,"id=" + str(b.id),"data=1") - mc.setSign (x ,y+1,z-1,wallsignid,2,key,"id=" + str(b.id),"data=9") - mc.setSign (x+3,y ,z-1,wallsignid,2,key,"id=" + str(b.id),"data=1") - mc.setSign (x+3,y+1,z-1,wallsignid,2,key,"id=" + str(b.id),"data=8") - mc.setSign (x-1,y ,z ,wallsignid,4,key,"id=" + str(b.id),"data=0") - mc.setSign (x-1,y+1,z ,wallsignid,4,key,"id=" + str(b.id),"data=8") - mc.setSign (x-1,y ,z+3,wallsignid,4,key,"id=" + str(b.id),"data=0") - mc.setSign (x-1,y+1,z+3,wallsignid,4,key,"id=" + str(b.id),"data=9") - mc.setSign (x+4,y ,z ,wallsignid,5,key,"id=" + str(b.id),"data=2") - mc.setSign (x+4,y+1,z ,wallsignid,5,key,"id=" + str(b.id),"data=9") - mc.setSign (x+4,y ,z+3,wallsignid,5,key,"id=" + str(b.id),"data=2") - mc.setSign (x+4,y+1,z+3,wallsignid,5,key,"id=" + str(b.id),"data=8") - mc.setSign (x ,y ,z+4,wallsignid,3,key,"id=" + str(b.id),"data=3") - mc.setSign (x ,y+1,z+4,wallsignid,3,key,"id=" + str(b.id),"data=8") - mc.setSign (x+3,y ,z+4,wallsignid,3,key,"id=" + str(b.id),"data=3") - mc.setSign (x+3,y+1,z+4,wallsignid,3,key,"id=" + str(b.id),"data=9") + mc.setBlocks(x+1,y,z+1,x+2,y+1,z+2,"AIR") + mc.setBlock(x+1,y ,z ,key) + mc.setBlock(x+1,y+1,z ,key) + mc.setBlock(x+2,y ,z ,key) + mc.setBlock(x+2,y+1,z ,key) + mc.setBlock(x ,y ,z+1,key) + mc.setBlock(x ,y+1,z+1,key) + mc.setBlock(x ,y ,z+2,key) + mc.setBlock(x ,y+1,z+2,key) + mc.setBlock(x+3,y ,z+1,key) + mc.setBlock(x+3,y+1,z+1,key) + mc.setBlock(x+3,y ,z+2,key) + mc.setBlock(x+3,y+1,z+2,key) + mc.setBlock(x+1,y ,z+3,key) + mc.setBlock(x+1,y+1,z+3,key) + mc.setBlock(x+2,y ,z+3,key) + mc.setBlock(x+2,y+1,z+3,key) y+=3 - untested.discard(b.id) + untested.discard(key) for key in gates: - b = getattr(blockmodded,key) - mc.setBlocks(x,y,z,x+3,y,z+3,blockmodded.AIR) - mc.setBlock(x+1,y ,z ,b.id,0) - mc.setBlock(x+2,y ,z ,b.id,0) - mc.setBlock(x ,y ,z+1,b.id,1) - mc.setBlock(x ,y ,z+2,b.id,1) - mc.setBlock(x+3,y ,z+1,b.id,1) - mc.setBlock(x+3,y ,z+2,b.id,1) - mc.setBlock(x+1,y ,z+3,b.id,0) - mc.setBlock(x+2,y ,z+3,b.id,0) + mc.setBlocks(x,y,z,x+3,y,z+3,"AIR") + mc.setBlock(x+1,y ,z ,key) + mc.setBlock(x+2,y ,z ,key) + mc.setBlock(x ,y ,z+1,key) + mc.setBlock(x ,y ,z+2,key) + mc.setBlock(x+3,y ,z+1,key) + mc.setBlock(x+3,y ,z+2,key) + mc.setBlock(x+1,y ,z+3,key) + mc.setBlock(x+2,y ,z+3,key) mc.setBlock(x,y,z,signmount) mc.setBlock(x+3,y,z,signmount) mc.setBlock(x,y,z+3,signmount) mc.setBlock(x+3,y,z+3,signmount) - mc.setSign (x ,y ,z-1,wallsignid,2,key,"id=" + str(b.id),"data=0") - mc.setSign (x+3,y ,z-1,wallsignid,2,key,"id=" + str(b.id),"data=0") - mc.setSign (x-1,y ,z ,wallsignid,4,key,"id=" + str(b.id),"data=1") - mc.setSign (x-1,y ,z+3,wallsignid,4,key,"id=" + str(b.id),"data=1") - mc.setSign (x+4,y ,z ,wallsignid,5,key,"id=" + str(b.id),"data=1") - mc.setSign (x+4,y ,z+3,wallsignid,5,key,"id=" + str(b.id),"data=1") - mc.setSign (x ,y ,z+4,wallsignid,3,key,"id=" + str(b.id),"data=0") - mc.setSign (x+3,y ,z+4,wallsignid,3,key,"id=" + str(b.id),"data=0") y+=3 - untested.discard(b.id) + untested.discard(key) time.sleep(1) x=xtest+70 y=ytest z=ztest+20 for key in stairs: - b = getattr(blockmodded,key) mc.setBlocks(x+1,y,z-1,x+3,y+11,z-3,signmount) - mc.setBlock(x+1,y ,z ,b.id,0) - mc.setBlock(x+2,y+1,z ,b.id,0) - mc.setBlock(x+3,y+2,z ,b.id,0) + mc.setBlock(x+1,y ,z ,key) + mc.setBlock(x+2,y+1,z ,key) + mc.setBlock(x+3,y+2,z ,key) mc.setBlock(x+4,y+2,z ,signmount) - mc.setBlock(x+4,y+3,z-1,b.id,3) - mc.setBlock(x+4,y+4,z-2,b.id,3) - mc.setBlock(x+4,y+5,z-3,b.id,3) + mc.setBlock(x+4,y+3,z-1,key) + mc.setBlock(x+4,y+4,z-2,key) + mc.setBlock(x+4,y+5,z-3,key) mc.setBlock(x+4,y+5,z-4,signmount) - mc.setBlock(x+3,y+6,z-4,b.id,1) - mc.setBlock(x+2,y+7,z-4,b.id,1) - mc.setBlock(x+1,y+8,z-4,b.id,1) + mc.setBlock(x+3,y+6,z-4,key) + mc.setBlock(x+2,y+7,z-4,key) + mc.setBlock(x+1,y+8,z-4,key) mc.setBlock(x ,y+8,z-4,signmount) - mc.setBlock(x ,y+9,z-3,b.id,2) - mc.setBlock(x ,y+10,z-2,b.id,2) - mc.setBlock(x ,y+11,z-1,b.id,2) + mc.setBlock(x ,y+9,z-3,key) + mc.setBlock(x ,y+10,z-2,key) + mc.setBlock(x ,y+11,z-1,key) mc.setBlock(x ,y+11,z ,signmount) - mc.setBlock(x+1,y-1,z ,b.id,5) - mc.setBlock(x+2,y ,z ,b.id,5) - mc.setBlock(x+3,y+1,z ,b.id,5) - mc.setBlock(x+4,y+2,z-1,b.id,6) - mc.setBlock(x+4,y+3,z-2,b.id,6) - mc.setBlock(x+4,y+4,z-3,b.id,6) - mc.setBlock(x+3,y+5,z-4,b.id,4) - mc.setBlock(x+2,y+6,z-4,b.id,4) - mc.setBlock(x+1,y+7,z-4,b.id,4) - mc.setBlock(x ,y+8,z-3,b.id,7) - mc.setBlock(x ,y+9,z-2,b.id,7) - mc.setBlock(x ,y+10,z-1,b.id,7) - mc.setSign (x+2,y+2 ,z ,wallsignid,3,key,"id=" + str(b.id),"data=0") - mc.setSign (x+3,y ,z ,wallsignid,3,key,"id=" + str(b.id),"data=5") - mc.setSign (x+4,y+5 ,z-2,wallsignid,5,key,"id=" + str(b.id),"data=3") - mc.setSign (x+4,y+3 ,z-3,wallsignid,5,key,"id=" + str(b.id),"data=6") - mc.setSign (x+2,y+8 ,z-4,wallsignid,2,key,"id=" + str(b.id),"data=1") - mc.setSign (x+1,y+6 ,z-4,wallsignid,2,key,"id=" + str(b.id),"data=4") - mc.setSign (x ,y+11,z-2,wallsignid,4,key,"id=" + str(b.id),"data=2") - mc.setSign (x ,y+9 ,z-1,wallsignid,4,key,"id=" + str(b.id),"data=7") + mc.setBlock(x+1,y-1,z ,key) + mc.setBlock(x+2,y ,z ,key) + mc.setBlock(x+3,y+1,z ,key) + mc.setBlock(x+4,y+2,z-1,key) + mc.setBlock(x+4,y+3,z-2,key) + mc.setBlock(x+4,y+4,z-3,key) + mc.setBlock(x+3,y+5,z-4,key) + mc.setBlock(x+2,y+6,z-4,key) + mc.setBlock(x+1,y+7,z-4,key) + mc.setBlock(x ,y+8,z-3,key) + mc.setBlock(x ,y+9,z-2,key) + mc.setBlock(x ,y+10,z-1,key) y+=12 - untested.discard(b.id) + untested.discard(key) #Display list of all blocks which did not get tested - for id in untested: - untest="Untested block " + str(id) - for varname in blockmap[id]: - untest+=" " + varname + for name in untested: + untest="Untested block " + name mc.postToChat(untest) mc.postToChat("runBlockTests() complete") @@ -468,17 +396,17 @@ def runEntityTests(mc): xtest = 50 ytest = 50 ztest = 50 - air=blockmodded.AIR - wall=blockmodded.GLASS - roof=blockmodded.STONE - floor=blockmodded.STONE - fence=blockmodded.FENCE - signmount=blockmodded.STONE - sign=blockmodded.SIGN_STANDING.withData(4) - signid=sign.id - torch=blockmodded.TORCH.withData(5) - rail=blockmodded.RAIL - wallsignid=blockmodded.SIGN_WALL.id + air="AIR" + wall="GLASS" + roof="STONE" + floor="STONE" + fence="FENCE" + signmount="STONE" + signface="WEST" + sign=sign + torch="TORCH".withData(5) + rail="RAIL" + wallsign="SIGN_WALL" mc.postToChat("runEntityTests(): Creating test entities at x=" + str(xtest) + " y=" + str(ytest) + " z=" + str(ztest)) #mc.setBlocks(xtest,ytest-1,ztest,xtest+100,ytest+50,ztest+100,air) @@ -496,7 +424,7 @@ def runEntityTests(mc): x=xtest y=ytest z=ztest + r - id=mc.spawnEntity(x,y,z,entitymodded.VILLAGER) + id=mc.spawnEntity(x,y,z,"VILLAGER") theta = 0 while theta <= 2 * math.pi: time.sleep(1) @@ -538,7 +466,7 @@ def runEntityTests(mc): x += 10 e = getattr(entitymodded,key) mc.setBlock(x+2,y,z,signmount) - mc.setSign(x+2,y+1,z,sign,key,"id=" + str(e.id)) + mc.setSign(x+2,y+1,z,key,signface,"id=" + str(e.id)) mc.spawnEntity(x,y,z,e) untested.discard(e.id) for key in hangers: @@ -548,7 +476,7 @@ def runEntityTests(mc): x += 10 e = getattr(entitymodded,key) mc.setBlocks(x+2,y,z-1,x+2,y+2,z+1,signmount) - mc.setSign(x+1,y,z,wallsignid,4,key,"id=" + str(e.id)) + mc.setSign(x+1,y,z,wallsign,4,key,"id=" + str(e.id)) mc.spawnEntity(x+1,y+2,z,e) untested.discard(e.id) z = ztest - 4 @@ -563,7 +491,7 @@ def runEntityTests(mc): mc.setBlocks(x-2,y,z-2,x+2,y,z+2,fence) mc.setBlocks(x-1,y,z-1,x+1,y,z+1,air) mc.setBlock(x-3,y,z-1,torch) - mc.setSign(x-3,y,z,wallsignid,4,key,"id=" + str(e.id)) + mc.setSign(x-3,y,z,wallsign,4,key,"id=" + str(e.id)) mc.spawnEntity(x,y,z,e) untested.discard(e.id) x+=10 @@ -576,8 +504,8 @@ def runEntityTests(mc): x += 10 e = getattr(entitymodded,key) mc.setBlock(x+2,y,z,signmount) - mc.setSign(x+2,y+1,z,sign,key,"id=" + str(e.id)) - mc.setBlock(x+2,y,z-1,torch.id,4) + mc.setSign(x+2,y+1,z,key,signface,"id=" + str(e.id)) + mc.setBlock(x+2,y,z-1,torch.id) mc.setBlocks(x,y,z-1,x,y,z+1,rail) mc.spawnEntity(x,y,z,e) untested.discard(e.id) @@ -589,10 +517,10 @@ def runEntityTests(mc): x += 10 e = getattr(entitymodded,key) mc.setBlock(x+2,y,z,signmount) - mc.setSign(x+2,y+1,z,sign,key,"id=" + str(e.id)) - mc.setBlock(x+2,y,z-1,torch.id,2) + mc.setSign(x+2,y+1,z,key,signface,"id=" + str(e.id)) + mc.setBlock(x+2,y,z-1,torch.id) mc.setBlocks(x-2,y-2,z-3,x+2,y-1,z+2,floor) - mc.setBlocks(x-1,y-1,z-2,x+1,y-1,z+1,blockmodded.WATER_STATIONARY) + mc.setBlocks(x-1,y-1,z-2,x+1,y-1,z+1,"WATER_STATIONARY") mc.spawnEntity(x,y,z,e) untested.discard(e.id) @@ -610,7 +538,7 @@ def runEntityTests(mc): mc.setBlocks(x-2,y-1,z,x+6,y-1,z+4,floor) mc.setBlocks(x+1,y,z+1,x+3,y+3,z+3,air) mc.setBlock(x-1,y,z+1,torch) - mc.setSign(x-1,y,z+2,sign,key,"id=" + str(e.id)) + mc.setSign(x-1,y,z+2,key,signface,"id=" + str(e.id)) mc.spawnEntity(x+2,y,z+2,e) untested.discard(e.id) @@ -624,7 +552,7 @@ def runEntityTests(mc): mc.setBlocks(x,y+21,z,x+20,y+21,z+20,roof) mc.setBlocks(x-5,y-1,z-1,x+20,y-1,z+21,floor) mc.setBlocks(x+1,y,z+1,x+19,y+20,z+19,air) - mc.setSign(x-1,y,z+2,sign,key,"id=" + str(e.id)) + mc.setSign(x-1,y,z+2,key,signface,"id=" + str(e.id)) mc.spawnEntity(x+10,y+5,z+10,e) untested.discard(e.id) z += 20 @@ -634,19 +562,19 @@ def runEntityTests(mc): time.sleep(1) for key in bosses: e = getattr(entitymodded,key) - mc.setBlocks(x,y,z,x+20,y+20,z+20,blockmodded.BEDROCK) - mc.setBlocks(x,y+21,z,x+20,y+21,z+20,blockmodded.BEDROCK) - mc.setBlocks(x-5,y-1,z-1,x+20,y-1,z+21,blockmodded.BEDROCK) + mc.setBlocks(x,y,z,x+20,y+20,z+20,"BEDROCK") + mc.setBlocks(x,y+21,z,x+20,y+21,z+20,"BEDROCK") + mc.setBlocks(x-5,y-1,z-1,x+20,y-1,z+21,"BEDROCK") mc.setBlocks(x+1,y,z+1,x+19,y+20,z+19,air) mc.setBlocks(x+1,y,z+8,x+19,y,z+12,torch) mc.setBlocks(x+1,y+10,z+2,x+1,y+15,z+18,torch.id,1) mc.setBlocks(x+19,y+10,z+2,x+19,y+15,z+18,torch.id,2) mc.setBlocks(x+1,y+10,z+19,x+19,y+15,z+19,torch.id,4) mc.setBlocks(x+1,y+10,z+1,x+19,y+15,z+1,torch.id,3) - mc.setBlocks(x,y,z+9,x+3,y+3,z+11,blockmodded.BEDROCK) + mc.setBlocks(x,y,z+9,x+3,y+3,z+11,"BEDROCK") mc.setBlocks(x+4,y,z+9,x+19,y+3,z+11,wall) mc.setBlocks(x,y,z+10,x+19,y+2,z+10,air) - mc.setSign(x-1,y,z+2,sign,key,"id=" + str(e.id)) + mc.setSign(x-1,y,z+2,key,signface,"id=" + str(e.id)) mc.spawnEntity(x+10,y+5,z+10,e) untested.discard(e.id) z += 20 @@ -659,8 +587,8 @@ def runEntityTests(mc): mc.setBlocks(x,y,z,x+20,y+20,z+20,wall) mc.setBlocks(x,y+21,z,x+20,y+21,z+20,roof) mc.setBlocks(x-5,y-1,z-1,x+20,y-1,z+21,floor) - mc.setBlocks(x+1,y,z+1,x+19,y+20,z+19,blockmodded.WATER_STATIONARY) - mc.setSign(x-1,y,z+2,sign,key,"id=" + str(e.id)) + mc.setBlocks(x+1,y,z+1,x+19,y+20,z+19,"WATER_STATIONARY") + mc.setSign(x-1,y,z+2,key,signface,"id=" + str(e.id)) mc.spawnEntity(x+10,y,z+10,e) untested.discard(e.id) z += 20 @@ -711,20 +639,15 @@ def runTests(mc, library="Standard library", extended=False): mc.postToChat("block below is - " + str(below)) - #getBlockWithData - blockBelow = mc.getBlockWithData(pos.x, pos.y-1, pos.z) - mc.postToChat("block data below is = " + str(blockBelow.data)) - - #setBlock no data - mc.setBlock(pos.x,pos.y+2,pos.z, block.GOLD_BLOCK.id) + mc.setBlock(pos.x,pos.y+2,pos.z, "GOLD_BLOCK") #setBlock with data - mc.setBlock(pos.x,pos.y+3,pos.z, block.WOOL.id, 1) + mc.setBlock(pos.x,pos.y+3,pos.z, "BLUE_WOOL") #setBlocks mc.setBlocks(pos.x,pos.y + 10,pos.z, pos.x + 5, pos.y + 15, pos.z + 5, - block.WOOL.id, 5) + "BLUE_WOOL") #getBlocks if extended: @@ -771,8 +694,8 @@ def runTests(mc, library="Standard library", extended=False): if extended: entity_types = mc.getEntityTypes() - mc.postToChat("The last found was entity: id=" + str(entity_types[-1].id) + " name=" + entity_types[-1].name) - mc.spawnEntity(tilePos.x + 2, tilePos.y + 2, tilePos.x + 2, entitymodded.CREEPER) + mc.postToChat("The last found was entity: name=" + entity_types[-1]) + mc.spawnEntity(tilePos.x + 2, tilePos.y + 2, tilePos.x + 2, "CREEPER") mc.postToChat("Creeper spawned") mc.postToChat("Post To Chat - Run full block and entity test Y/N?") diff --git a/src/main/resources/test/modded/mcpi/block.py b/src/main/resources/test/modded/mcpi/block.py deleted file mode 100644 index b64bc6c1..00000000 --- a/src/main/resources/test/modded/mcpi/block.py +++ /dev/null @@ -1,133 +0,0 @@ -class Block: - """Minecraft PI block description. Can be sent to Minecraft.setBlock/s""" - def __init__(self, id, data=0): - self.id = id - self.data = data - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id and self.data == rhs.data - - def __hash__(self): - return (self.id << 8) + self.data - - def withData(self, data): - return Block(self.id, data) - - def __iter__(self): - """Allows a Block to be sent whenever id [and data] is needed""" - return iter((self.id, self.data)) - - def __repr__(self): - return "Block(%d, %d)"%(self.id, self.data) - -AIR = Block(0) -STONE = Block(1) -GRASS = Block(2) -DIRT = Block(3) -COBBLESTONE = Block(4) -WOOD_PLANKS = Block(5) -SAPLING = Block(6) -BEDROCK = Block(7) -WATER_FLOWING = Block(8) -WATER = WATER_FLOWING -WATER_STATIONARY = Block(9) -LAVA_FLOWING = Block(10) -LAVA = LAVA_FLOWING -LAVA_STATIONARY = Block(11) -SAND = Block(12) -GRAVEL = Block(13) -GOLD_ORE = Block(14) -IRON_ORE = Block(15) -COAL_ORE = Block(16) -WOOD = Block(17) -LEAVES = Block(18) -GLASS = Block(20) -LAPIS_LAZULI_ORE = Block(21) -LAPIS_LAZULI_BLOCK = Block(22) -SANDSTONE = Block(24) -BED = Block(26) -RAIL_POWERED = Block(27) -RAIL_DETECTOR = Block(28) -COBWEB = Block(30) -GRASS_TALL = Block(31) -DEAD_BUSH = Block(32) -WOOL = Block(35) -FLOWER_YELLOW = Block(37) -FLOWER_CYAN = Block(38) -MUSHROOM_BROWN = Block(39) -MUSHROOM_RED = Block(40) -GOLD_BLOCK = Block(41) -IRON_BLOCK = Block(42) -STONE_SLAB_DOUBLE = Block(43) -STONE_SLAB = Block(44) -BRICK_BLOCK = Block(45) -TNT = Block(46) -BOOKSHELF = Block(47) -MOSS_STONE = Block(48) -OBSIDIAN = Block(49) -TORCH = Block(50) -FIRE = Block(51) -STAIRS_WOOD = Block(53) -CHEST = Block(54) -DIAMOND_ORE = Block(56) -DIAMOND_BLOCK = Block(57) -CRAFTING_TABLE = Block(58) -FARMLAND = Block(60) -FURNACE_INACTIVE = Block(61) -FURNACE_ACTIVE = Block(62) -SIGN_STANDING = Block(63) -DOOR_WOOD = Block(64) -LADDER = Block(65) -RAIL = Block(66) -STAIRS_COBBLESTONE = Block(67) -SIGN_WALL = Block(68) -DOOR_IRON = Block(71) -REDSTONE_ORE = Block(73) -TORCH_REDSTONE = Block(76) -SNOW = Block(78) -ICE = Block(79) -SNOW_BLOCK = Block(80) -CACTUS = Block(81) -CLAY = Block(82) -SUGAR_CANE = Block(83) -FENCE = Block(85) -PUMPKIN = Block(86) -NETHERRACK = Block(87) -SOUL_SAND = Block(88) -GLOWSTONE_BLOCK = Block(89) -LIT_PUMPKIN = Block(91) -STAINED_GLASS = Block(95) -BEDROCK_INVISIBLE = Block(95) -TRAPDOOR = Block(96) -STONE_BRICK = Block(98) -GLASS_PANE = Block(102) -MELON = Block(103) -FENCE_GATE = Block(107) -STAIRS_BRICK = Block(108) -STAIRS_STONE_BRICK = Block(109) -MYCELIUM = Block(110) -NETHER_BRICK = Block(112) -FENCE_NETHER_BRICK = Block(113) -STAIRS_NETHER_BRICK = Block(114) -END_STONE = Block(121) -WOODEN_SLAB = Block(126) -STAIRS_SANDSTONE = Block(128) -EMERALD_ORE = Block(129) -RAIL_ACTIVATOR = Block(157) -LEAVES2 = Block(161) -TRAPDOOR_IRON = Block(167) -FENCE_SPRUCE = Block(188) -FENCE_BIRCH = Block(189) -FENCE_JUNGLE = Block(190) -FENCE_DARK_OAK = Block(191) -FENCE_ACACIA = Block(192) -DOOR_SPRUCE = Block(193) -DOOR_BIRCH = Block(194) -DOOR_JUNGLE = Block(195) -DOOR_ACACIA = Block(196) -DOOR_DARK_OAK = Block(197) -GLOWING_OBSIDIAN = Block(246) -NETHER_REACTOR_CORE = Block(247) diff --git a/src/main/resources/test/modded/mcpi/entity.py b/src/main/resources/test/modded/mcpi/entity.py deleted file mode 100644 index b78a4850..00000000 --- a/src/main/resources/test/modded/mcpi/entity.py +++ /dev/null @@ -1,102 +0,0 @@ -class Entity: - '''Minecraft PI entity description. Can be sent to Minecraft.spawnEntity''' - - def __init__(self, id, name = None): - self.id = id - self.name = name - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id - - def __hash__(self): - return self.id - - def __iter__(self): - '''Allows an Entity to be sent whenever id is needed''' - return iter((self.id,)) - - def __repr__(self): - return 'Entity(%d)'%(self.id) - -EXPERIENCE_ORB = Entity(2, "EXPERIENCE_ORB") -AREA_EFFECT_CLOUD = Entity(3, "AREA_EFFECT_CLOUD") -ELDER_GUARDIAN = Entity(4, "ELDER_GUARDIAN") -WITHER_SKELETON = Entity(5, "WITHER_SKELETON") -STRAY = Entity(6, "STRAY") -EGG = Entity(7, "EGG") -LEASH_HITCH = Entity(8, "LEASH_HITCH") -PAINTING = Entity(9, "PAINTING") -ARROW = Entity(10, "ARROW") -SNOWBALL = Entity(11, "SNOWBALL") -FIREBALL = Entity(12, "FIREBALL") -SMALL_FIREBALL = Entity(13, "SMALL_FIREBALL") -ENDER_PEARL = Entity(14, "ENDER_PEARL") -ENDER_SIGNAL = Entity(15, "ENDER_SIGNAL") -THROWN_EXP_BOTTLE = Entity(17, "THROWN_EXP_BOTTLE") -ITEM_FRAME = Entity(18, "ITEM_FRAME") -WITHER_SKULL = Entity(19, "WITHER_SKULL") -PRIMED_TNT = Entity(20, "PRIMED_TNT") -HUSK = Entity(23, "HUSK") -SPECTRAL_ARROW = Entity(24, "SPECTRAL_ARROW") -SHULKER_BULLET = Entity(25, "SHULKER_BULLET") -DRAGON_FIREBALL = Entity(26, "DRAGON_FIREBALL") -ZOMBIE_VILLAGER = Entity(27, "ZOMBIE_VILLAGER") -SKELETON_HORSE = Entity(28, "SKELETON_HORSE") -ZOMBIE_HORSE = Entity(29, "ZOMBIE_HORSE") -ARMOR_STAND = Entity(30, "ARMOR_STAND") -DONKEY = Entity(31, "DONKEY") -MULE = Entity(32, "MULE") -EVOKER_FANGS = Entity(33, "EVOKER_FANGS") -EVOKER = Entity(34, "EVOKER") -VEX = Entity(35, "VEX") -VINDICATOR = Entity(36, "VINDICATOR") -ILLUSIONER = Entity(37, "ILLUSIONER") -MINECART_COMMAND = Entity(40, "MINECART_COMMAND") -BOAT = Entity(41, "BOAT") -MINECART = Entity(42, "MINECART") -MINECART_CHEST = Entity(43, "MINECART_CHEST") -MINECART_FURNACE = Entity(44, "MINECART_FURNACE") -MINECART_TNT = Entity(45, "MINECART_TNT") -MINECART_HOPPER = Entity(46, "MINECART_HOPPER") -MINECART_MOB_SPAWNER = Entity(47, "MINECART_MOB_SPAWNER") -CREEPER = Entity(50, "CREEPER") -SKELETON = Entity(51, "SKELETON") -SPIDER = Entity(52, "SPIDER") -GIANT = Entity(53, "GIANT") -ZOMBIE = Entity(54, "ZOMBIE") -SLIME = Entity(55, "SLIME") -GHAST = Entity(56, "GHAST") -PIG_ZOMBIE = Entity(57, "PIG_ZOMBIE") -ENDERMAN = Entity(58, "ENDERMAN") -CAVE_SPIDER = Entity(59, "CAVE_SPIDER") -SILVERFISH = Entity(60, "SILVERFISH") -BLAZE = Entity(61, "BLAZE") -MAGMA_CUBE = Entity(62, "MAGMA_CUBE") -ENDER_DRAGON = Entity(63, "ENDER_DRAGON") -WITHER = Entity(64, "WITHER") -BAT = Entity(65, "BAT") -WITCH = Entity(66, "WITCH") -ENDERMITE = Entity(67, "ENDERMITE") -GUARDIAN = Entity(68, "GUARDIAN") -SHULKER = Entity(69, "SHULKER") -PIG = Entity(90, "PIG") -SHEEP = Entity(91, "SHEEP") -COW = Entity(92, "COW") -CHICKEN = Entity(93, "CHICKEN") -SQUID = Entity(94, "SQUID") -WOLF = Entity(95, "WOLF") -MUSHROOM_COW = Entity(96, "MUSHROOM_COW") -SNOWMAN = Entity(97, "SNOWMAN") -OCELOT = Entity(98, "OCELOT") -IRON_GOLEM = Entity(99, "IRON_GOLEM") -HORSE = Entity(100, "HORSE") -RABBIT = Entity(101, "RABBIT") -POLAR_BEAR = Entity(102, "POLAR_BEAR") -LLAMA = Entity(103, "LLAMA") -LLAMA_SPIT = Entity(104, "LLAMA_SPIT") -PARROT = Entity(105, "PARROT") -VILLAGER = Entity(120, "VILLAGER") -ENDER_CRYSTAL = Entity(200, "ENDER_CRYSTAL") \ No newline at end of file diff --git a/src/main/resources/test/modded/mcpi/minecraft.py b/src/main/resources/test/modded/mcpi/minecraft.py index bffb491d..0f63ea8e 100644 --- a/src/main/resources/test/modded/mcpi/minecraft.py +++ b/src/main/resources/test/modded/mcpi/minecraft.py @@ -1,8 +1,6 @@ from .connection import Connection from .vec3 import Vec3 from .event import BlockEvent, ChatEvent -from .entity import Entity -from .block import Block import math from .util import flatten @@ -28,9 +26,6 @@ - setSign() - spawnEntity()""" -def intFloor(*args): - return [int(math.floor(x)) for x in flatten(args)] - class CmdPositioner: """Methods for setting and getting positions""" def __init__(self, connection, packagePrefix): @@ -53,7 +48,7 @@ def getTilePos(self, id): def setTilePos(self, id, *args): """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) + self.conn.send(self.pkg + b".setTile", id, args) def setDirection(self, id, *args): """Set entity direction (entityId:int, x,y,z)""" @@ -176,32 +171,24 @@ def __init__(self, connection): self.events = CmdEvents(connection) def getBlock(self, *args): - """Get block (x,y,z) => id:int""" - return int(self.conn.sendReceive(b"world.getBlock", intFloor(args))) - - def getBlockWithData(self, *args): - """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", intFloor(args)) - return Block(*list(map(int, ans.split(",")))) + """Get block (x,y,z) => material:string""" + return self.conn.sendReceive(b"world.getBlock", args) def getBlocks(self, *args): - """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - s = self.conn.sendReceive(b"world.getBlocks", intFloor(args)) - return map(int, s.split(",")) + """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [material:string]""" + s = self.conn.sendReceive(b"world.getBlocks", args) + return s.split(",") def setBlock(self, *args): """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", intFloor(args)) + self.conn.send(b"world.setBlock", args) def setBlocks(self, *args): """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args)) + self.conn.send(b"world.setBlocks", args) def setSign(self, *args): - """Set a sign (x,y,z,id,data,[line1,line2,line3,line4]) - - Wall signs (id=68) require data for facing direction 2=north, 3=south, 4=west, 5=east - Standing signs (id=63) require data for facing rotation (0-15) 0=south, 4=west, 8=north, 12=east + """Set a sign (x,y,z,material,facing,[line1,line2,line3,line4]) @author: Tim Cummings https://www.triptera.com.au/wordpress/""" lines = [] flatargs = [] @@ -209,15 +196,15 @@ def setSign(self, *args): flatargs.append(arg) for flatarg in flatargs[5:]: lines.append(flatarg.replace(",",";").replace(")","]").replace("(","[")) - self.conn.send(b"world.setSign",intFloor(flatargs[0:5]) + lines) + self.conn.send(b"world.setSign",flatargs[0:4] + lines) def spawnEntity(self, *args): """Spawn entity (x,y,z,id,[data])""" - return int(self.conn.sendReceive(b"world.spawnEntity", intFloor(args))) + return int(self.conn.sendReceive(b"world.spawnEntity", args)) def getHeight(self, *args): """Get the height of the world (x,z) => int""" - return int(self.conn.sendReceive(b"world.getHeight", intFloor(args))) + return int(self.conn.sendReceive(b"world.getHeight", args)) def getPlayerEntityIds(self): """Get the entity ids of the connected players => [id:int]""" @@ -245,10 +232,10 @@ def setting(self, setting, status): self.conn.send(b"world.setting", setting, 1 if bool(status) else 0) def getEntityTypes(self): - """Return a list of Entity objects representing all the entity types in Minecraft""" + """Return a list of strings representing all the entity types in Minecraft""" s = self.conn.sendReceive(b"world.getEntityTypes") types = [t for t in s.split("|") if t] - return [Entity(int(e[:e.find(",")]), e[e.find(",") + 1:]) for e in types] + return [e[:e.find(",")] for e in types] @staticmethod diff --git a/src/main/resources/test/original/mcpi/block.py b/src/main/resources/test/original/mcpi/block.py deleted file mode 100644 index 52c85023..00000000 --- a/src/main/resources/test/original/mcpi/block.py +++ /dev/null @@ -1,97 +0,0 @@ -class Block: - """Minecraft PI block description. Can be sent to Minecraft.setBlock/s""" - def __init__(self, id, data=0): - self.id = id - self.data = data - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id and self.data == rhs.data - - def __hash__(self): - return (self.id << 8) + self.data - - def withData(self, data): - return Block(self.id, data) - - def __iter__(self): - """Allows a Block to be sent whenever id [and data] is needed""" - return iter((self.id, self.data)) - - def __repr__(self): - return "Block(%d, %d)"%(self.id, self.data) - -AIR = Block(0) -STONE = Block(1) -GRASS = Block(2) -DIRT = Block(3) -COBBLESTONE = Block(4) -WOOD_PLANKS = Block(5) -SAPLING = Block(6) -BEDROCK = Block(7) -WATER_FLOWING = Block(8) -WATER = WATER_FLOWING -WATER_STATIONARY = Block(9) -LAVA_FLOWING = Block(10) -LAVA = LAVA_FLOWING -LAVA_STATIONARY = Block(11) -SAND = Block(12) -GRAVEL = Block(13) -GOLD_ORE = Block(14) -IRON_ORE = Block(15) -COAL_ORE = Block(16) -WOOD = Block(17) -LEAVES = Block(18) -GLASS = Block(20) -LAPIS_LAZULI_ORE = Block(21) -LAPIS_LAZULI_BLOCK = Block(22) -SANDSTONE = Block(24) -BED = Block(26) -COBWEB = Block(30) -GRASS_TALL = Block(31) -WOOL = Block(35) -FLOWER_YELLOW = Block(37) -FLOWER_CYAN = Block(38) -MUSHROOM_BROWN = Block(39) -MUSHROOM_RED = Block(40) -GOLD_BLOCK = Block(41) -IRON_BLOCK = Block(42) -STONE_SLAB_DOUBLE = Block(43) -STONE_SLAB = Block(44) -BRICK_BLOCK = Block(45) -TNT = Block(46) -BOOKSHELF = Block(47) -MOSS_STONE = Block(48) -OBSIDIAN = Block(49) -TORCH = Block(50) -FIRE = Block(51) -STAIRS_WOOD = Block(53) -CHEST = Block(54) -DIAMOND_ORE = Block(56) -DIAMOND_BLOCK = Block(57) -CRAFTING_TABLE = Block(58) -FARMLAND = Block(60) -FURNACE_INACTIVE = Block(61) -FURNACE_ACTIVE = Block(62) -DOOR_WOOD = Block(64) -LADDER = Block(65) -STAIRS_COBBLESTONE = Block(67) -DOOR_IRON = Block(71) -REDSTONE_ORE = Block(73) -SNOW = Block(78) -ICE = Block(79) -SNOW_BLOCK = Block(80) -CACTUS = Block(81) -CLAY = Block(82) -SUGAR_CANE = Block(83) -FENCE = Block(85) -GLOWSTONE_BLOCK = Block(89) -BEDROCK_INVISIBLE = Block(95) -STONE_BRICK = Block(98) -GLASS_PANE = Block(102) -MELON = Block(103) -FENCE_GATE = Block(107) -GLOWING_OBSIDIAN = Block(246) -NETHER_REACTOR_CORE = Block(247) diff --git a/src/main/resources/test/original/mcpi/minecraft.py b/src/main/resources/test/original/mcpi/minecraft.py index 1d1f293d..370488a2 100644 --- a/src/main/resources/test/original/mcpi/minecraft.py +++ b/src/main/resources/test/original/mcpi/minecraft.py @@ -1,7 +1,6 @@ from .connection import Connection from .vec3 import Vec3 from .event import BlockEvent -from .block import Block import math from .util import flatten @@ -18,9 +17,6 @@ @author: Aron Nieminen, Mojang AB""" -def intFloor(*args): - return [int(math.floor(x)) for x in flatten(args)] - class CmdPositioner: """Methods for setting and getting positions""" def __init__(self, connection, packagePrefix): @@ -43,7 +39,7 @@ def getTilePos(self, id): def setTilePos(self, id, *args): """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) + self.conn.send(self.pkg + b".setTile", id, args) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -119,31 +115,26 @@ def __init__(self, connection): self.events = CmdEvents(connection) def getBlock(self, *args): - """Get block (x,y,z) => id:int""" - return int(self.conn.sendReceive(b"world.getBlock", intFloor(args))) - - def getBlockWithData(self, *args): - """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", intFloor(args)) - return Block(*list(map(int, ans.split(",")))) + """Get block (x,y,z) => material:string""" + return self.conn.sendReceive(b"world.getBlock", args) """ @TODO """ def getBlocks(self, *args): - """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - return int(self.conn.sendReceive(b"world.getBlocks", intFloor(args))) + """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [material:string]""" + return self.conn.sendReceive(b"world.getBlocks", args) def setBlock(self, *args): """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", intFloor(args)) + self.conn.send(b"world.setBlock", args) def setBlocks(self, *args): """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args)) + self.conn.send(b"world.setBlocks", args) def getHeight(self, *args): """Get the height of the world (x,z) => int""" - return int(self.conn.sendReceive(b"world.getHeight", intFloor(args))) + return int(self.conn.sendReceive(b"world.getHeight", args)) def getPlayerEntityIds(self): """Get the entity ids of the connected players => [id:int]"""