/** * Retrieves a read/write structure for BlockData in Minecraft 1.8. * <p> * This modifier will automatically marshal between WrappedBlockData and the * internal Minecraft IBlockData. * @return A modifier for BlockData fields. */ public StructureModifier<WrappedBlockData> getBlockData() { // Convert to and from our wrapper return structureModifier.withType( MinecraftReflection.getIBlockDataClass(), BukkitConverters.getWrappedBlockDataConverter()); }
@Override public Object getGeneric(MultiBlockChangeInfo specific) { try { if (constructor == null) { constructor = nmsClass.getConstructor( PacketType.Play.Server.MULTI_BLOCK_CHANGE.getPacketClass(), short.class, MinecraftReflection.getIBlockDataClass() ); } return constructor.newInstance( null, specific.location, BukkitConverters.getWrappedBlockDataConverter().getGeneric(specific.data) ); } catch (Throwable ex) { throw new RuntimeException("Failed to construct MultiBlockChangeInfo instance.", ex); } }
private static WrappedBlockData getBlockData(Object handle) { return new StructureModifier<>(handle.getClass()) .withTarget(handle) .withType(MinecraftReflection.getIBlockDataClass(), BukkitConverters.getWrappedBlockDataConverter()) .read(0); }
@Override public MultiBlockChangeInfo getSpecific(Object generic) { StructureModifier<Object> modifier = new StructureModifier<>(generic.getClass(), null, false).withTarget(generic); StructureModifier<Short> shorts = modifier.withType(short.class); short location = shorts.read(0); StructureModifier<WrappedBlockData> dataModifier = modifier.withType(MinecraftReflection.getIBlockDataClass(), BukkitConverters.getWrappedBlockDataConverter()); WrappedBlockData data = dataModifier.read(0); return new MultiBlockChangeInfo(location, data, chunk); }
return BukkitConverters.getItemStackConverter().getGeneric((ItemStack) wrapped); } else if (wrapped instanceof WrappedBlockData) { return BukkitConverters.getWrappedBlockDataConverter().getGeneric((WrappedBlockData) wrapped); } else if (wrapped instanceof Vector3F) { return Vector3F.getConverter().getGeneric((Vector3F) wrapped);
return BukkitConverters.getItemStackConverter().getSpecific(value); } else if (is(MinecraftReflection.getIBlockDataClass(), value)) { return BukkitConverters.getWrappedBlockDataConverter().getSpecific(value); } else if (is (Vector3F.getMinecraftClass(), value)) { return Vector3F.getConverter().getSpecific(value);