Advanced Usage

This page isnt rly structured rn

Example ItemStack Deserialiser zer Using Helper Mapper

Warp deserialisers can use other deserialisers, including dynamic ones. A common pattern is to create configuration objects as an intermediate form when creating deserialisers for external types.

class ItemStackDeserializer implements Deserializer<ItemStack> {
    @Configuration    
    interface Helper {
        @Property("type")
        Material type();
        
        @Property("count")
        Optional<Integer> count();
        
        @Property("item-name")
        Optional<Component> itemName();
    }  

    @Override
    public Renderer<HashMap> deserialize(ConfigurationNode node, Deserializer.Context dctx) throws DeserializationException {
        Helper helper = context.deserializer(Helper.class).orElseThrow().deserialize(node, context);
        
        ItemStack item = ItemStack.of(helper.type(), helper.count().orElse(1));
        helper.itemName().ifPresent(itemName -> item.setData(DataComponentTypes.ITEM_NAME, itemName));
        return _ -> new ItemStack(item); // defensive copy
    }
}

Last updated