Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
1aa4346
commit so I can PR this
screret Jul 1, 2025
92906af
Merge branch '1.20.1' into mui2-refactor
Spicierspace153 Jul 28, 2025
d235841
base package for mui (#3603)
YoungOnionMC Aug 2, 2025
087aa05
Client/screen package (#3664)
YoungOnionMC Aug 7, 2025
d53ae11
Api/widget (#3667)
YoungOnionMC Aug 13, 2025
151245e
api/widgets (#3682)
YoungOnionMC Aug 13, 2025
f251853
syncing (#3718)
YoungOnionMC Aug 17, 2025
f62c758
themes (#3867)
YoungOnionMC Sep 6, 2025
ab31e62
drawables + spotless (#3842)
YoungOnionMC Sep 6, 2025
a1df1d9
api/util (#3871)
YoungOnionMC Sep 6, 2025
1a04d05
json utils (#3875)
YoungOnionMC Sep 8, 2025
292cca4
screen overlays (#3876)
YoungOnionMC Sep 12, 2025
5301047
api/facotry + spotless (#4022) - [Admin]
YoungOnionMC Oct 6, 2025
4f035fa
missing utils (#4023) - [Admin]
YoungOnionMC Oct 6, 2025
2c7c2af
Common + factories (#4024) - [Admin]
YoungOnionMC Oct 6, 2025
18acafa
mui mixins (#4025) - [Admin]
YoungOnionMC Oct 6, 2025
7ed6aeb
xei integration (#4026) - [Admin]
YoungOnionMC Oct 6, 2025
2eef805
fake level (#4027) - [Admin]
YoungOnionMC Oct 6, 2025
8b7117a
Retry misc files, game launches now (#4031)
YoungOnionMC Oct 6, 2025
b6ad2ab
update mui2 refactor up to #4019 (#4033)
YoungOnionMC Oct 6, 2025
eeb2809
[MUI2] Fix image & adaptable sizing in GTGuiTextures (#4039)
purebluez Oct 7, 2025
7c7dbb7
Fix Tooltip Rendering inside mui UIs (#4038)
Spicierspace153 Oct 7, 2025
997803b
[MUI2] Merge MUI2's GuiTextures with GT's GTGuiTextures (#4041)
purebluez Oct 8, 2025
03b250c
Test Tile, Fixing Sync networking (#4043)
YoungOnionMC Oct 8, 2025
e8954e9
Item Count, Tooltip Layering, Debug Keybind (#4040)
YoungOnionMC Oct 8, 2025
9c3e99f
Fix Mouse Offsets in various contexts (#4044)
YoungOnionMC Oct 8, 2025
f472454
Making UI in builders (#4046)
jurrejelle Oct 8, 2025
e07dca8
Fix mui dark background layer (#4049)
brachy84 Oct 9, 2025
1158022
Part 1 of MUI updating (#4052)
YoungOnionMC Oct 9, 2025
6109f06
Entity Drawables (#4054)
YoungOnionMC Oct 9, 2025
2246011
Part 2 of Mui Updating (#4053)
YoungOnionMC Oct 10, 2025
ac8bb79
[MUI2] Animation refactor (#4055)
jurrejelle Oct 10, 2025
abc97dd
Add the missing CharTyped event listener to ClientScreenHandler (#4045)
screret Oct 10, 2025
95cb0b8
[MUI2] PlayerInventoryUIFactory + Curios compat (#4056)
brachy84 Oct 11, 2025
f3169a0
update mui p4 (#4059)
YoungOnionMC Oct 11, 2025
abddbae
[MUI2] dynamic sync (#4060)
jurrejelle Oct 11, 2025
487949a
[MUI2] Fix Textfield (#4061)
brachy84 Oct 11, 2025
b48f997
Machine Controller Cover Gui (#4048)
YoungOnionMC Oct 11, 2025
e919ec5
More MUI updaing p5 (#4062)
YoungOnionMC Oct 12, 2025
6ed2f80
Resizeable Panels (#4063)
YoungOnionMC Oct 12, 2025
ffb0018
[MUI] updating pt 6 (#4064)
jurrejelle Oct 12, 2025
fee1fca
update mui p7 (#4068)
YoungOnionMC Oct 13, 2025
3577211
Port CleanroomMC/ModularUI#135 (#4077)
Spicierspace153 Oct 18, 2025
ce70a1e
Port CleanroomMC/ModularUI#140 (#4067)
screret Oct 18, 2025
3f91da7
[MUI2] Small commits (#4083)
brachy84 Oct 18, 2025
bc78acf
Make schema rendering code sane (#4084)
screret Oct 18, 2025
741729a
Theme refactoring and improvements (#4087)
YoungOnionMC Oct 19, 2025
9a5e999
[MUI2] Fix slot desync on world load (#4088)
brachy84 Oct 19, 2025
ae22f62
scroll bars and fixes idk (#4091)
YoungOnionMC Oct 20, 2025
8e9b34c
the rest of the owl (#4092)
YoungOnionMC Oct 20, 2025
ca2be0e
[MUI] Fix depth problems (#4095)
brachy84 Oct 20, 2025
e7964e4
merge 1.20 into mui2 refactor (#4100)
YoungOnionMC Oct 21, 2025
5d42461
cache multi preview renders (#4096)
screret Oct 21, 2025
227c649
Fix Machine Controller Cover's UI (#4105)
purebluez Oct 22, 2025
d6587e8
[MUI] Fix several mui issues (#4112)
brachy84 Oct 24, 2025
a32e70b
[MUI2] Port Storage Cover (#4153)
purebluez Nov 6, 2025
d4907f1
[MUI] add UI builder option to multis (#4162)
jurrejelle Nov 9, 2025
0b939ca
Background Inverse Texture (#4165)
Ghostipedia Nov 10, 2025
e1d464b
Background Inverse Texture but I give it the right size this time! (#…
Ghostipedia Nov 10, 2025
422ec6e
Make Base Backgrounds/Tabs Sharpened to Match 1.12 Stylizing (#4167)
Ghostipedia Nov 10, 2025
0df4742
Update MUI to 727a80b4 (#4173)
YoungOnionMC Nov 13, 2025
82d0d08
Update MUI to current as of 11-13-25 (#4178)
YoungOnionMC Nov 14, 2025
3b81957
[MUI2] Dynamic singleblock UI from recipe type (#4101)
jurrejelle Nov 15, 2025
0fc5dee
Update MUI as of 11-15-2025 (#4185)
YoungOnionMC Nov 15, 2025
10a5fbe
[MUI2] Port Advanced Energy Detector Cover (#4191)
purebluez Nov 17, 2025
ea8bbfe
Multipart foundational + item bus - [MUI2] (#4222)
YoungOnionMC Nov 23, 2025
6cbda2a
Steam Machine and fisher work - [MUI2] (#4221)
YoungOnionMC Nov 23, 2025
52c9295
RecipeTypeUI foundation - [MUI2] (#4220)
YoungOnionMC Nov 23, 2025
6c6100a
[MUI2] Add an addMultiLang method to IRichTextBuilder (#4223)
purebluez Nov 24, 2025
0b7af8f
[MUI2] Parallel hatches (#4218)
jurrejelle Nov 24, 2025
ce055e7
[MUI] Remove floating "Inventory" (#4217)
jurrejelle Nov 24, 2025
767fa1f
[MUI] Block breaker UI (#4216)
jurrejelle Nov 24, 2025
60200f8
[MUI2] Buffer (#4234)
jurrejelle Nov 25, 2025
b5c9eda
[MUI2] Object Holder (#4232)
jurrejelle Nov 29, 2025
9e1058d
[MUI2] Data Hatches (#4251)
jurrejelle Nov 29, 2025
4d1c891
[MUI2] Muffler Hatch (#4253)
jurrejelle Nov 29, 2025
7f97b17
[MUI2] Object holder rework slots (#4256)
jurrejelle Nov 29, 2025
8b1f7ed
Fix new object holder GUI using the wrong slot index for the input it…
screret Dec 1, 2025
468492d
[MUI2] Extract createSquareSlotgroupFromInventory (#4255)
jurrejelle Dec 1, 2025
3e92d4f
[MUI2] Super/Quantum Tank (#4282)
jurrejelle Dec 12, 2025
f47f9ba
[MUI2] Creative computation provider (#4294)
TarLaboratories Dec 13, 2025
01a95bd
[MUI2] Battery Buffer (#4281)
TarLaboratories Dec 13, 2025
5dcb495
Fix MUI not being reopened properly (#4354)
ghzdude Dec 22, 2025
19a1a6b
[MUI2] Miner (#4334)
TarLaboratories Dec 22, 2025
c22fe63
[MUI2] Item Collector (#4332)
TarLaboratories Dec 22, 2025
60bbd20
[MUI2] Turbo Charger (#4331)
TarLaboratories Dec 22, 2025
041b4d3
[MUI2] Maintenance Hatch (#4328)
TarLaboratories Dec 22, 2025
e411451
[MUI2] Center stuff in battery buffer UI (#4315)
TarLaboratories Dec 22, 2025
e64c796
[MUI2] Dual Hatch (#4330)
TarLaboratories Dec 22, 2025
f64fd10
[MUI2] rotor holder (#4252)
jurrejelle Dec 22, 2025
c3ab309
[MUI2] Fluid Hatch (#4344)
TarLaboratories Dec 22, 2025
ebfa8a2
[MUI] - Singleblock RecipeType UIs (#4309)
YoungOnionMC Dec 22, 2025
f274292
[MUI2] Programmed Circuit (#4311)
TarLaboratories Dec 22, 2025
62f81d8
[MUI2] Fix Tiled UITextures not drawing correctly (#4358)
ghzdude Dec 22, 2025
56ab3bd
mui2 merge nightmare (#4360)
YoungOnionMC Dec 23, 2025
786ece6
14759d1a to d4e989e0, skipped 848d9e60 (#4366)
YoungOnionMC Dec 23, 2025
6e0afaa
[MUI2] Fix Theme Deserialization (#4373)
ghzdude Dec 24, 2025
158aeac
Start of theme application for steam machines (#4374)
YoungOnionMC Dec 24, 2025
49af1a7
[MUI2] - Steam Boilers (#4380)
YoungOnionMC Dec 26, 2025
936eea8
[MUI2] Auto Maintenance Hatch (#4391)
zetrock1 Jan 1, 2026
f5a4a75
[MUI2] Pump Machine (#4357)
zetrock1 Jan 5, 2026
52cd430
Replace ldlib sync data system with new data sync system (#3491)
gustovafing Dec 23, 2025
19ad605
Fix sync lists being immutable (#4371)
gustovafing Dec 25, 2025
ea57226
[8.0] Fix some tests (#4407)
TarLaboratories Jan 2, 2026
df3c771
Merge remote-tracking branch 'origin/1.20.1-v8.0.0' into mui2-refactor
YoungOnionMC Jan 5, 2026
5edc0a0
fix the merge that happened [MUI2] (#4425)
YoungOnionMC Jan 5, 2026
276effa
Update MUI to 3 Jan 2026 (#4434)
YoungOnionMC Jan 7, 2026
c1a4225
fix client classes being loaded on server
TarLaboratories Jan 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ dependencies {
// Configuration
jarJar(modApi(forge.configuration.get()))

// Math Parser
jarJar(implementation(libs.mxparser.get()))
additionalRuntimeClasspath(libs.mxparser.get())

// Mixin (& Extras)
annotationProcessor(variantOf(libs.mixin) { classifier("processor") })
compileOnly(annotationProcessor(forge.mixinExtras.common.get()))
Expand Down Expand Up @@ -119,4 +123,6 @@ dependencies {
modExtraLocalRuntime(forge.ponder)
modExtraLocalRuntime(variantOf(forge.create) { classifier("slim") })
modExtraLocalRuntime(forge.flywheel.forge)

modLocalRuntime(forge.curios)
}
89 changes: 89 additions & 0 deletions docs/content/Development/Data-Sync-System/Annotations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
title: "Annotations"
---

# Annotations
The following annotations define the sync/save behaviour for an `ISyncManaged` object.

### `@SaveField`

The `@SaveField` annotation defines a field that should be saved to the server. `nbtKey` is optional, the key will default to the field name.
```java
@SaveField(nbtKey="nbtKeyToSaveTo")
public int mySaveInt = 10;
```

### `@SyncToClient`

The `@SyncToClient` annotation defines a field with a value that should be synced to clients.

!!! warning
Client sync fields **do not** automatically detect changes. When changing a client sync field, call `ISyncManaged.getSyncDataHolder().markClientSyncFieldDirty(FIELD_NAME)`
```java
@SaveField(nbtKey="nbtKeyToSaveTo")
@SyncToClient
public int mySaveAndSyncInt = 10;

@SyncToClient
@RerenderOnChanged
public long mySyncRerenderLong = 10000L;

public void serverTick() {
int newIntValue = getNewIntValue();
long newLongValue = getNewLongValue();
if (mySaveAndSyncInt != newIntValue) {
mySaveAndSyncInt = newIntValue;
getSyncDataHolder().markClientSyncFieldDirty("mySaveAndSyncInt");
}
if (mySyncRerenderLong != newLongValue) {
mySyncRerenderLong = newLongValue;
getSyncDataHolder().markClientSyncFieldDirty("mySyncRerenderLong");
}
}
```

### `@ClientFieldChangeListener` and `@RerenderOnChanged`

The `@ClientFieldChangeListener` annotation defines a method to be called on the client when a client sync field has changed value;

Annotating a `@SyncToClient` field with `@RerenderOnChanged` will cause clients to rerender the block entity when this field changes.

```java
@SyncToClient
@SaveField
@RerenderOnChanged
public boolean isWorkingEnabled = true;

@ClientFieldChangeListener(fieldName="isWorkingEnabled")
public void isWorkingChanged() {
setRenderState(getRenderState().setValue(GTMachineModelProperties.IS_WORKING_ENABLED, isWorkingEnabled));
}
```

### `@FieldDataModifier` and `@CustomDataField`



The `@FieldDataModifier`annotation defines custom processing to be performed on the NBT for a field, e.g. for compatibility reasons.

The `@CustomDataField`annotation defines a field with a type too complex to be serialised using the normal system. Custom data fields must have exactly one load modifier and one data modifier.

Field data modifiers on non-custom fields will be applied *after* standard serialisation/deserialisation, and will be called with an argument containing the current tag.

```java
@CustomDataField
@SaveField
public VeryComplexType myVeryComplexValue = new VeryComplexType();

@FieldDataModifier(fieldName="myVeryComplexValue", target=FieldDataModifier.MODIFY_TARGET.LOAD_NBT)
public void loadVeryComplexValue(CompoundTag tag) {
// Process tag here.
myVeryComplexValue = new VeryComplexType();
}

@FieldDataModifier(fieldName="myVeryComplexValue", target=FieldDataModifier.MODIFY_TARGET.SAVE_NBT)
public CompoundTag saveVeryComplexValue(CompoundTag tag, boolean isSendingToClient) {
// Save data here.
return tag;
}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
title: "Migrating from LDLib SyncData"
---
# Migrating from LDLib SyncData

### General migration guidelines

- Remove all `ManagedFieldHolder` fields.
- Replace `FieldManagedStorage` fields with `SyncDataHolder` fields.
- Replace `IEnhancedManaged` objects with `ISyncManaged`.
- Replace `IAsyncAutoSyncBlockEntity`, `IAutoPersistBlockEntity`, `IAutoSyncBlockEntity` and `IManagedBlockEntity` by extending `ManagedSyncBlockEntity`.

### Annotations

!!! warning
Client sync fields **do not** automatically detect changes. When changing a client sync field, call `ISyncManaged.syncDataHolder.markClientSyncFieldDirty(FIELD_NAME)`

- `@DescSynced` -> `@SyncToClient`
- `@RequireRerender` -> `@RerenderOnChanged`
- `@Persisted` -> `@SaveField`
- `@UpdateListener` -> `@ClientFieldChangeListener` on listener method.
- `@DropSaved` - Removed, make machines implement `IDropSaveMachine` instead
- `@ReadOnlyManaged` and `@LazyManaged` See usage docs for instructions on complex sync objects

### Other changes

- `saveCustomPersistedData` & `loadCustomPersistedData` methods: Use `@CustomDataModifier` & `@FieldDataModifier`
98 changes: 98 additions & 0 deletions docs/content/Development/Data-Sync-System/Usage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
title: "Usage"
---

## Usage

### Registering classes with the sync system

At the core of the system is the interface `ISyncManaged`, which represents a class that to be synchronised with the client or saved.
All block entities which should be synchronised or saved must extend the abstract class `ManagedSyncBlockEntity`.

!!! warning
Block entities that inherit `ManagedSyncBlockEntity` must call `ManagedSyncBlockEntity::updateTick`***every tick*** within their ticker, or they will not be saved.

```java
class MySyncObject implements ISyncManaged {
// Any class that directly implements ISyncManaged must have the following:
@Getter
protected final SyncDataHolder syncDataHolder = new SyncDataHolder(this);


/**
* Function called when the SyncDataHolder requests a rerender
*/
void scheduleRenderUpdate();

/**
* Function called to notify the server that this object has been updated and must be synced to clients
*/
void markAsChanged();
}
```

### Registering fields to be managed by the system
See [Annotations](Annotations.md)

### Type compatibility
The following field types are supported by default:
- Any class implementing `ISyncManaged`
- Any class implementing `INBTSerializable<Tag>`
- All primitive types
- If `T`, `K` are supported types:
- `T[]`
- `Set<T>`
- `List<T>`,
- `Map<T, K>`
- `String`
- `ItemStack`
- `FluidStack`
- `UUID`
- `BlockPos`
- `CompoundTag`
- `GTRecipe`
- `GTRecipeType`
- `MachineRenderState`
- `Material`
- `Component`

### Adding support for additional types

To add support for an additional type, call `ValueTransformers.registerClassTransformer(Class<?> cls, IValueTransformer<?> transformer)` or `ValueTransformers.registerInterfaceTransformer(Class<?> cls, IValueTransformer<?> transformer)`

The `IValueTransformer<T>` interface defines how a value of type `T` should be serialised.

```java
public interface IValueTransformer<T> {

// If this type cannot be instanced purely from a serialised tag.
// All complex type typically have mustProvideObject true
default boolean mustProvideObject() {
return false;
}

// A method for serialising a value into a tag
// Called when serialising a value to be sent to the client
default Tag serializeClientSyncNBT(@Nullable T value, ISyncManaged holder) {
return serializeNBT(value, holder);
}

// A method for deserialising a value from a tag
// Called when deserialising a value on the client.
// If mustProvideObject == true, currentVal is the currently saved value.
default T deserializeClientNBT(Tag tag, ISyncManaged holder, @Nullable T currentVal) {
return deserializeNBT(tag, holder, currentVal);
}


// A method for serialising a value into a tag.
// The holder param is the object this sync value is attached to
Tag serializeNBT(T value, ISyncManaged holder);

// A method for deserialising a value from a tag
// If mustProvideObject == true, currentVal is the currently saved value.
T deserializeNBT(Tag tag, ISyncManaged holder, @Nullable T currentVal);
}
```

Some types may be too complex to be processed using this system. For more complex NBT interactions, use the `@FieldDataModifier` and `@CustomDataField` annotations.
12 changes: 12 additions & 0 deletions docs/content/Development/Data-Sync-System/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
title: "Data Sync/Save system "
---

# Data Sync/Save System

For serialising data to saves and synchronising with clients, a custom data sync system based on Java Annotations is used.

- See [Usage](Usage.md) for a guide on using the system
- See [Annotations](Annotations.md) for a list of annotations provided by the system
- See [Migrating From LDLib SyncData](Migrating-From-LDLib-SyncData.md) for instructions on how to migrate from the LDLib SyncData system, which was used in versions 7.x and lower.

5 changes: 0 additions & 5 deletions docs/content/Development/SyncData/.pages

This file was deleted.

6 changes: 0 additions & 6 deletions docs/content/Development/SyncData/Annotations/.pages

This file was deleted.

6 changes: 0 additions & 6 deletions docs/content/Development/SyncData/Annotations/DescSynced.md

This file was deleted.

6 changes: 0 additions & 6 deletions docs/content/Development/SyncData/Annotations/Persisted.md

This file was deleted.

This file was deleted.

This file was deleted.

50 changes: 0 additions & 50 deletions docs/content/Development/SyncData/Using-SyncData.md

This file was deleted.

12 changes: 0 additions & 12 deletions docs/content/Development/SyncData/index.md

This file was deleted.

Loading
Loading