public boolean connectsTo(String blockConnection, BlockFace face) { final Boolean[] booleans = connectData.get(blockConnection); return booleans != null && booleans[face.ordinal()]; } }
private static Byte getStates(WrappedBlockData blockData) { byte states = 0; String type = blockData.getValue("type"); if (type.equals("left")) states |= 1; if (type.equals("right")) states |= 2; states |= (BlockFace.valueOf(blockData.getValue("facing").toUpperCase()).ordinal() << 2); if (blockData.getMinecraftKey().equals("minecraft:trapped_chest")) states |= 16; return states; }
@Override public int connect(UserConnection user, Position position, int blockState) { StairData stairData = stairDataMap.get(blockState); if (stairData == null) return blockState; short s = 0; if (stairData.isBottom()) s |= 1; s |= getShape(user, position, stairData) << 1; s |= stairData.getType() << 4; s |= stairData.getFacing().ordinal() << 9; Integer newBlockState = connectedBlocks.get(s); return newBlockState == null ? blockState : newBlockState; }
@Override public int connect(UserConnection user, Position position, int blockState) { BlockFace facing = chestFacings.get(blockState); byte states = 0; states |= (facing.ordinal() << 2); boolean trapped = trappedChests.contains(blockState); if (trapped) states |= 16; int relative; if (chestFacings.containsKey(relative = getBlockData(user, position.getRelative(BlockFace.NORTH))) && trapped == trappedChests.contains(relative)) { states |= facing == BlockFace.WEST ? 1 : 2; } else if (chestFacings.containsKey(relative = getBlockData(user, position.getRelative(BlockFace.SOUTH))) && trapped == trappedChests.contains(relative)) { states |= facing == BlockFace.EAST ? 1 : 2; } else if (chestFacings.containsKey(relative = getBlockData(user, position.getRelative(BlockFace.WEST))) && trapped == trappedChests.contains(relative)) { states |= facing == BlockFace.NORTH ? 2 : 1; } else if (chestFacings.containsKey(relative = getBlockData(user, position.getRelative(BlockFace.EAST))) && trapped == trappedChests.contains(relative)) { states |= facing == BlockFace.SOUTH ? 2 : 1; } Integer newBlockState = connectedStates.get(states); return newBlockState == null ? blockState : newBlockState; } }
private static short getStates(StairData stairData) { short s = 0; if (stairData.isBottom()) s |= 1; s |= stairData.getShape() << 1; s |= stairData.getType() << 4; s |= stairData.getFacing().ordinal() << 9; return s; }
@Override public int connect(UserConnection user, Position position, int blockState) { DoorData doorData = doorDataMap.get(blockState); if (doorData == null) return blockState; short s = 0; s |= (doorData.getType() & 0x7) << 6; if (doorData.isLower()) { DoorData upperHalf = doorDataMap.get(getBlockData(user, position.getRelative(BlockFace.TOP))); if (upperHalf == null) return blockState; s |= 1; if (doorData.isOpen()) s |= 2; if (upperHalf.isPowered()) s |= 4; if (upperHalf.isRightHinge()) s |= 8; s |= doorData.getFacing().ordinal() << 4; } else { DoorData lowerHalf = doorDataMap.get(getBlockData(user, position.getRelative(BlockFace.BOTTOM))); if (lowerHalf == null) return blockState; if (lowerHalf.isOpen()) s |= 2; if (doorData.isPowered()) s |= 4; if (doorData.isRightHinge()) s |= 8; s |= lowerHalf.getFacing().ordinal() << 4; } Integer newBlockState = connectedStates.get(s); return newBlockState == null ? blockState : newBlockState; }
private static short getStates(DoorData doorData) { short s = 0; if (doorData.isLower()) s |= 1; if (doorData.isOpen()) s |= 2; if (doorData.isPowered()) s |= 4; if (doorData.isRightHinge()) s |= 8; s |= doorData.getFacing().ordinal() << 4; s |= (doorData.getType() & 0x7) << 6; return s; }