# Custom Gui Handlers

These can only be done on the client, make sure this is only done on the client.

```java
ConfigGuiRegistry registry = AutoConfig.getGuiRegistry(CONFIG_NAME);
```

### **GuiProvider**

A `GuiProvider` is a handler that maps fields to gui entries.

```
registry.registerAnnotationProvider(...); // apply based on the presence of an annotation
registry.registerPredicateProvider(...); // apply based on a certain Predicate<Field>
registry.registerTypeProvider(...); // apply to a certain type
```

If multiple registered providers apply to the same field, the priority is as follows: Annotation, then Predicate, then Type. If multiple providers of a single category apply, the first one that was registered will be used. Custom registered providers always take priority over the built-in providers.

### **GuiTransformer**

A `GuiTransformer` is a handler that maps a generated gui entry to a new gui entry. It can also apply some modifications to the passed entry and return the same reference.

```
registry.registerAnnotationTransformer(...); // apply based on the presence of an annotation
registry.registerPredicateTransformer(...); // apply based on a certain Predicate<Field>
```

All matching transformers are applied in order of registration. Custom registered transformers always apply before built-in ones.
